Modèles et instances
Partir d'un modèle plutôt que de zéro — lister les modèles, en tirer une fiche, créer un modèle.
Dans Docage, presque toute fiche peut être un modèle : un parcours type, un email type, un modèle de contact… Une fiche
tirée d'un modèle en est une instance ; elle en garde la trace dans TemplateId.
- Un modèle de votre organisation se lit et se modifie comme une fiche, selon vos droits.
- Un modèle système (
IsSystem) est fourni par Docage à toutes les organisations : il se lit et s'instancie, il ne se modifie pas. - Un modèle peut léguer des droits aux fiches qui en naissent.
Lister les modèles
GET https://staging-api.docage.com/Transactions/TemplatesIdAndName
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl "https://staging-api.docage.com/Transactions/TemplatesIdAndName" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Get, "https://staging-api.docage.com/Transactions/TemplatesIdAndName");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
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/Transactions/TemplatesIdAndName", {
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;[
{ "Id": "aaaaaaaa-0000-4000-8000-000000000001", "Name": "Contrat de prestation", "IsSystem": false }
]La route accepte le corps d'une liste (filtre, tri, pagination — voir Lire des listes) ; les modèles
système n'y figurent qu'avec "IncludeSystem": true. Pour lire les modèles entiers, lisez la liste du type avec
"IsTemplate": true.
Tirer une fiche d'un modèle
CreateEntityFromTemplate rend une fiche préparée d'après le modèle : ses propriétés, ses champs, ses liaisons. Elle n'est
pas enregistrée : complétez-la, puis créez-la par un POST.
GET https://staging-api.docage.com/Contacts/CreateEntityFromTemplate/aaaaaaaa-0000-4000-8000-000000000011/false
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl "https://staging-api.docage.com/Contacts/CreateEntityFromTemplate/aaaaaaaa-0000-4000-8000-000000000011/false" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Get, "https://staging-api.docage.com/Contacts/CreateEntityFromTemplate/aaaaaaaa-0000-4000-8000-000000000011/false");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
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/CreateEntityFromTemplate/aaaaaaaa-0000-4000-8000-000000000011/false", {
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Le corps du POST est la fiche reçue, complétée — ici abrégée :
POST https://staging-api.docage.com/Contacts
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{
"TemplateId": "aaaaaaaa-0000-4000-8000-000000000011",
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com"
}curl -X POST "https://staging-api.docage.com/Contacts" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"TemplateId": "aaaaaaaa-0000-4000-8000-000000000011",
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com"
}'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("""
{
"TemplateId": "aaaaaaaa-0000-4000-8000-000000000011",
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com"
}
""", 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({
"TemplateId": "aaaaaaaa-0000-4000-8000-000000000011",
"FirstName": "Camille",
"LastName": "Martin",
"Email": "camille.martin@example.com"
})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Gardez l'identifiant que rend le POST : c'est celui de la fiche créée.
Le dernier segment de l'adresse, true, prépare à la place un nouveau modèle à partir du modèle.
Deux types ont une création en une seule requête, à partir d'un modèle et de ce qui change : le parcours
(POST https://staging-api.docage.com/Transactions/CreateFullTransaction, voir
Envoyer un parcours à signer) et l'email (POST https://staging-api.docage.com/Mails/CreateFullMail, voir
Envoyer un email).
Le modèle désigné
TemplateId désigne un modèle que vous voyez. À la création (POST), un modèle introuvable ou que vous ne voyez pas répond 404 —
la même réponse pour les deux —, et une fiche qui n'est pas un modèle 422. Un classeur ne naît que d'un modèle de classeur de
votre organisation, ou d'un modèle de la plateforme, parce que le contenu du modèle y est recopié : tout autre modèle de classeur répond
422. Rien n'est créé.
Une modification (PUT) qui change TemplateId suit les mêmes règles ; tout refus y répond 422. Dans une création en une seule
requête, la clé TemplateId du formulaire suit les mêmes règles, et tout refus y répond 400, comme les autres refus de ces routes.
Créer un modèle
Un modèle se crée comme une fiche, avec "IsTemplate": true dans le corps du POST. Ce réglage ne se change plus ensuite : une
fiche ne devient pas un modèle, ni l'inverse.