Vérifier les parcours à signer ensemble
Trouver les parcours qui attendent la signature de l'utilisateur, et savoir lesquels peuvent entrer dans un même lot.
1Trouver les parcours qui attendent sa signature
QUERY https://staging-api.docage.com/Transactions
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{
"Filter": { "PropertyName": "IsSignableByMe", "Comparison": "=", "Value": "true" },
"Take": 200,
"EntityProperties": ["Id", "Name"]
}curl -X QUERY "https://staging-api.docage.com/Transactions" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"Filter": {"PropertyName": "IsSignableByMe", "Comparison": "=", "Value": "true"},
"Take": 200,
"EntityProperties": ["Id", "Name"]
}'using HttpClient client = new();
using HttpRequestMessage request = new(new HttpMethod("QUERY"), "https://staging-api.docage.com/Transactions");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"Filter": {
"PropertyName": "IsSignableByMe",
"Comparison": "=",
"Value": "true"
},
"Take": 200,
"EntityProperties": [
"Id",
"Name"
]
}
""", 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/Transactions", {
method: "QUERY",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"Filter": {"PropertyName": "IsSignableByMe", "Comparison": "=", "Value": "true"},
"Take": 200,
"EntityProperties": ["Id", "Name"]
})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;La liste rend les parcours en cours où une signature de l'utilisateur authentifié est attendue — celle dont la préparation a déjà commencé comprise.
2Vérifier lesquels peuvent entrer dans un lot
QUERY https://staging-api.docage.com/Transactions/Signabilities
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
["cccccccc-0000-4000-8000-000000000001", "cccccccc-0000-4000-8000-000000000002"]curl -X QUERY "https://staging-api.docage.com/Transactions/Signabilities" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '["cccccccc-0000-4000-8000-000000000001", "cccccccc-0000-4000-8000-000000000002"]'using HttpClient client = new();
using HttpRequestMessage request = new(new HttpMethod("QUERY"), "https://staging-api.docage.com/Transactions/Signabilities");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
[
"cccccccc-0000-4000-8000-000000000001",
"cccccccc-0000-4000-8000-000000000002"
]
""", 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/Transactions/Signabilities", {
method: "QUERY",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify(["cccccccc-0000-4000-8000-000000000001", "cccccccc-0000-4000-8000-000000000002"])
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Le corps est la liste des identifiants des parcours, deux cents au plus : un lot de mille se vérifie en cinq requêtes. La même lecture se
fait par GET, avec le même corps. La réponse a un élément par parcours, dans l'ordre demandé :
[
{
"TransactionId": "cccccccc-0000-4000-8000-000000000001",
"TransactionName": "Contrat de prestation",
"SignMode": 1,
"SignatureLevel": 1,
"RequiresSecurityCode": true,
"Reason": null,
"RecipientMasked": "c***@example.com",
"GroupKey": "3A9F04C2B17E55D0",
"CreatedByAnotherUser": true
},
{
"TransactionId": "cccccccc-0000-4000-8000-000000000002",
"TransactionName": "Avenant n° 2",
"SignMode": -1,
"SignatureLevel": 1,
"RequiresSecurityCode": true,
"Reason": "Ce parcours exige de parcourir chaque document avant de signer : signez-le depuis le parcours",
"RecipientMasked": null,
"GroupKey": null,
"CreatedByAnotherUser": false
}
]| Propriété | Ce qu'elle dit |
|---|---|
SignatureLevel |
Le niveau de signature : 1 avancée, 2 qualifiée, 3 avancée avec certificat qualifié. |
RequiresSecurityCode |
Le niveau demande un code de sécurité (avancée, ou avec certificat qualifié quand l'auteur du parcours en a voulu un). |
SignMode |
Le canal du code : 0 SMS, 1 email ; -1 quand aucun code ne part, ou que le parcours n'entre pas dans un lot. |
Reason |
Pourquoi il n'entre pas dans un lot, dans la langue du compte ; vide s'il y entre. |
RecipientMasked |
La coordonnée qui recevra le code, masquée (c***@example.com, +33 ****78). |
GroupKey |
Son groupe : un lot ne réunit que des parcours du même groupe — même organisation, même niveau, même canal, même coordonnée. Une valeur à comparer, rien de plus. |
CreatedByAnotherUser |
Le parcours a été créé par un autre que le signataire : à lui signaler, sans le bloquer. |
Pourquoi un parcours n'entre pas dans un lot
Les raisons les plus courantes, telles que Reason les dit :
- « Ce parcours est introuvable ou vous n'y avez pas accès » — la même réponse pour un parcours inconnu et pour un parcours que vous ne voyez pas ;
- « Aucune signature ne vous attend dans ce parcours » — y compris quand le signataire y est désigné par une fiche de contact, et non par son compte ;
- « Ce n'est pas encore à vous de signer dans ce parcours » ;
- « Plusieurs signatures vous attendent dans ce parcours : signez-le depuis le parcours » ;
- « Ce parcours exige de parcourir chaque document avant de signer : signez-le depuis le parcours » ;
- « Ce parcours exige une identité vérifiée pour signer : signez-le depuis le parcours » ;
- « D'autres étapes vous attendent dans ce parcours : ouvrez-le pour les faire » ;
- « Une organisation hors production n'envoie pas de code par téléphone : signez ce parcours depuis votre invitation » ;
- « La signature n'est pas disponible sur ce service » ;
- « Ce parcours n'est plus en cours ».
Un parcours écarté se signe depuis son invitation, ou en ouvrant le parcours.
Les pièges
- Ne gardez pour un lot que des parcours qui ont le même
GroupKey: un parcours d'un autre groupe est écarté du lot, avec sa raison. Plusieurs groupes font plusieurs lots. - Cette route accepte aussi la clé API ; les étapes du lot, non : voir Signer plusieurs parcours en une fois.
- Suite : Ouvrir le lot et envoyer le code.