Créer et modifier
Ce qu'un POST et un PUT attendent, ce que le serveur écrit seul, et la corbeille.
Chaque type de fiche se crée, se modifie et se supprime à la même adresse que sa liste (https://staging-api.docage.com/Contacts,
https://staging-api.docage.com/Companies…).
Créer
POST envoie la fiche entière, en JSON, et rend l'identifiant de la fiche créée :
POST https://staging-api.docage.com/Contacts
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com",
"Mobile": "+33600000001"
}curl -X POST "https://staging-api.docage.com/Contacts" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com",
"Mobile": "+33600000001"
}'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Post, "https://staging-api.docage.com/Contacts");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com",
"Mobile": "+33600000001"
}
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts", {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com",
"Mobile": "+33600000001"
})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;"9b2d7a46-3c1e-4f0a-8b5d-1a2b3c4d5e6f"- La fiche appartient à l'organisation de l'utilisateur, sauf si elle en désigne une autre (
ParentOrganizationId) — voir Organisations et intégrateurs. - Une propriété interdite à la création dans la référence (dates de création et de modification, statuts, compteurs…) est écrite par le serveur : celle que vous envoyez est ignorée, sans erreur.
- Une propriété en lecture seule ne se modifie plus après la création, mais elle peut se poser à la création quand elle n'est
pas interdite à la création :
IsTemplatecrée un modèle plutôt qu'une fiche (voir Modèles et instances). - Une fiche peut arriver avec ses liaisons et ses champs personnalisés, posés dans la même écriture — voir Champs personnalisés.
Plutôt que de partir de zéro, une fiche peut partir d'un modèle : voir Modèles et instances.
Modifier
PUT n'envoie que les propriétés modifiées, avec leur nouvelle valeur ; les autres ne changent pas :
PUT https://staging-api.docage.com/Contacts/9b2d7a46-3c1e-4f0a-8b5d-1a2b3c4d5e6f
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{
"Job": "Directrice administrative",
"City": "Lyon"
}curl -X PUT "https://staging-api.docage.com/Contacts/9b2d7a46-3c1e-4f0a-8b5d-1a2b3c4d5e6f" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{"Job": "Directrice administrative", "City": "Lyon"}'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Put, "https://staging-api.docage.com/Contacts/9b2d7a46-3c1e-4f0a-8b5d-1a2b3c4d5e6f");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"Job": "Directrice administrative",
"City": "Lyon"
}
""", Encoding.UTF8, "application/json");
using HttpResponseMessage response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException(result);const response = await fetch("https://staging-api.docage.com/Contacts/9b2d7a46-3c1e-4f0a-8b5d-1a2b3c4d5e6f", {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({"Job": "Directrice administrative", "City": "Lyon"})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;La réponse est l'identifiant de la fiche. Un corps vide est refusé (400) ; une fiche que l'utilisateur ne peut pas modifier
aussi (403), comme un modèle système, que seule la plateforme modifie.
Attention
Une propriété que le PUT ne peut pas écrire est ignorée sans erreur : une propriété inconnue, une valeur qui ne se convertit
pas dans son type, une propriété en lecture seule. La réponse ne le dit pas : relisez la fiche (GET https://staging-api.docage.com/Contacts/{id})
quand la valeur compte.
Les refus
| Code | Ce qu'il dit |
|---|---|
400 |
La fiche envoyée ne se lit pas, ou une valeur est refusée : le corps dit laquelle. |
403 |
L'utilisateur n'a pas le droit de créer ou de modifier cette fiche. |
404 |
La fiche n'existe pas, ou l'utilisateur ne la voit pas. |
409 |
La fiche ressemble à une fiche existante (contacts, selon les règles de dédoublonnage de l'organisation) : le corps liste les fiches proches. |
422 |
Une règle de la fiche est enfreinte (une valeur incohérente, une référence interdite) : le corps dit laquelle. |
Voir Erreurs pour le format des réponses d'erreur.
Supprimer, restaurer
DELETE https://staging-api.docage.com/Contacts/{id}, ouDELETE https://staging-api.docage.com/Contacts/BatchDeleteavec la liste des identifiants : les fiches vont à la corbeille.PUT https://staging-api.docage.com/Contacts/BatchRestore, avec la liste des identifiants : elles en reviennent.DELETE https://staging-api.docage.com/Contacts/BatchDefinitivelyDelete: les fiches de la corbeille sont supprimées définitivement. C'est irréversible.
POST https://staging-api.docage.com/Contacts/Duplicate copie des fiches : la réponse associe à chaque identifiant source celui de sa copie, ou le motif
d'un refus.