Exiger une vérification d'identité
Faire vérifier l'identité d'un signataire avant qu'il signe — pièce d'identité, détection du vivant, comparaison du visage —, puis suivre la vérification.
Une vérification d'identité fait montrer au participant sa pièce d'identité — et, selon le niveau, son visage — à un prestataire
spécialisé, qui rend sa décision. Dans un parcours, c'est une action du participant (Type 5), qui passe avant sa signature ; le
parcours peut en plus exiger un niveau d'identité pour signer.
| Niveau | Ce qui est vérifié |
|---|---|
0 |
Rien (d'office). |
1 |
La pièce d'identité : son authenticité, sa lecture, sa validité. |
2 |
La pièce, et le vivant : la personne devant la caméra est réelle. |
3 |
Complet : la pièce, le vivant, et le visage filmé comparé à celui de la pièce. |
C'est un service payant : une organisation qui n'est pas encore en production ne lance aucun parcours qui en comporte une — voir Environnement d'essai.
1Le modèle de vérification
Un modèle de vérification dit les contrôles demandés ; le niveau qu'il atteint en découle.
GET https://staging-api.docage.com/PersonIdentityVerifications/DefaultTemplates
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl "https://staging-api.docage.com/PersonIdentityVerifications/DefaultTemplates" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Get, "https://staging-api.docage.com/PersonIdentityVerifications/DefaultTemplates");
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/PersonIdentityVerifications/DefaultTemplates", {
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;[
{ "Level": 1, "TemplateId": "ffffffff-0000-4000-8000-000000000061", "Name": "Vérification identité simple (pièce d'identité)", "Source": "System" },
{ "Level": 2, "TemplateId": "ffffffff-0000-4000-8000-000000000062", "Name": "Vérification identité pièce et vivant (pièce d'identité + détection du vivant)", "Source": "System" },
{ "Level": 3, "TemplateId": "ffffffff-0000-4000-8000-000000000063", "Name": "Vérification identité complète (pièce d'identité + détection du vivant + concordance)", "Source": "System" }
]Pour chaque niveau, le modèle retenu par défaut : celui de vos préférences, sinon celui de votre organisation (Source vaut alors
User ou Organization), sinon le modèle de la plateforme. Vos autres modèles :
GET https://staging-api.docage.com/PersonIdentityVerifications/TemplatesIdAndName.
2L'action de vérification
Dans un parcours en brouillon, ou un modèle de parcours, le signataire reçoit l'action « Vérification d'identité » :
POST https://staging-api.docage.com/TransactionActions
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{
"TransactionMemberId": "dddddddd-0000-4000-8000-000000000004",
"Type": 5,
"PersonIdentityVerificationId": "ffffffff-0000-4000-8000-000000000062"
}curl -X POST "https://staging-api.docage.com/TransactionActions" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{
"TransactionMemberId": "dddddddd-0000-4000-8000-000000000004",
"Type": 5,
"PersonIdentityVerificationId": "ffffffff-0000-4000-8000-000000000062"
}'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Post, "https://staging-api.docage.com/TransactionActions");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"TransactionMemberId": "dddddddd-0000-4000-8000-000000000004",
"Type": 5,
"PersonIdentityVerificationId": "ffffffff-0000-4000-8000-000000000062"
}
""", 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/TransactionActions", {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"TransactionMemberId": "dddddddd-0000-4000-8000-000000000004",
"Type": 5,
"PersonIdentityVerificationId": "ffffffff-0000-4000-8000-000000000062"
})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;PersonIdentityVerificationIddésigne un modèle : un modèle de la plateforme, ou de l'organisation du parcours. Quand vient son tour, le serveur en tire la vérification de ce participant, et l'invite.- Le serveur range la vérification d'un participant avant sa signature : d'office, elle passe avant toute validation et toute signature.
- Un modèle de parcours qui porte déjà la vérification la transmet aux parcours qu'on en tire : voir Créer un parcours à partir d'un modèle.
Un parcours lancé n'en reçoit plus : l'action est refusée (409).
3Exiger le niveau pour signer
PUT https://staging-api.docage.com/TransactionMembers/dddddddd-0000-4000-8000-000000000004
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Content-Type: application/json
{ "RequiredIdentityLevel": 2 }curl -X PUT "https://staging-api.docage.com/TransactionMembers/dddddddd-0000-4000-8000-000000000004" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "Content-Type: application/json" \
-d '{"RequiredIdentityLevel": 2}'using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Put, "https://staging-api.docage.com/TransactionMembers/dddddddd-0000-4000-8000-000000000004");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.Content = new StringContent("""
{
"RequiredIdentityLevel": 2
}
""", 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/TransactionMembers/dddddddd-0000-4000-8000-000000000004", {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({"RequiredIdentityLevel": 2})
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;RequiredIdentityLevel est le niveau que le participant doit avoir prouvé avant de signer. Posé sur le parcours
(PUT https://staging-api.docage.com/Transactions/{id}, même propriété), il vaut pour tous ses signataires ; le plus exigeant des deux s'applique.
- Au lancement, chaque signataire concerné doit avoir une vérification dont le modèle atteint ce niveau, ou une identité déjà vérifiée
à ce niveau ; sinon, le lancement est refusé (
400) : « Camille Martin : doit avoir une identité vérifiée au niveau « Pièce et vivant » pour signer (réglage du participant) — ajoutez-lui une vérification d'identité dont les contrôles atteignent ce niveau ». - À la signature, le niveau se juge sur ce que la vérification a réellement établi : une vérification qui n'a lu que la pièce n'atteint pas « Pièce et vivant ».
- Sans niveau exigé, la vérification se fait quand même avant la signature, et un refus du prestataire refuse le parcours.
Un parcours lancé ne change plus d'exigence : PUT https://staging-api.docage.com/TransactionMembers/{id} y est refusé (409).
4Lancer, puis suivre
POST https://staging-api.docage.com/Transactions/LaunchTransaction/{id} envoie le parcours. Quand vient son tour, le participant reçoit son invitation,
puis montre sa pièce chez le prestataire — et, selon le niveau, son visage, après y avoir consenti.
GET https://staging-api.docage.com/Transactions/GetTransactionMembers/cccccccc-0000-4000-8000-000000000003
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…curl "https://staging-api.docage.com/Transactions/GetTransactionMembers/cccccccc-0000-4000-8000-000000000003" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…"using HttpClient client = new();
using HttpRequestMessage request = new(HttpMethod.Get, "https://staging-api.docage.com/Transactions/GetTransactionMembers/cccccccc-0000-4000-8000-000000000003");
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/GetTransactionMembers/cccccccc-0000-4000-8000-000000000003", {
headers: {
Authorization: `Bearer ${token}`
}
});
const text = await response.text();
if (!response.ok) throw new Error(text);
const result = text ? JSON.parse(text) : null;Chaque participant porte son IdentityVerificationStatus :
IdentityVerificationStatus |
Statut |
|---|---|
0 |
Aucune vérification. |
1 |
En attente : son tour n'est pas encore venu. |
2 |
À faire : le participant est invité. |
4 |
Commencée : il est chez le prestataire. |
5 |
Terminée : son identité est vérifiée. |
6 |
Refusée : par le prestataire, ou par le participant lui-même ; le parcours est refusé. |
Le parcours entier porte aussi le sien (GET https://staging-api.docage.com/Transactions/{id}). Une session qui expire, ou que le participant quitte,
chez le prestataire ne décide rien : il peut recommencer.
L'action elle-même — QUERY https://staging-api.docage.com/TransactionActions, filtrée par TransactionMemberId et Type à 5, puis
GET https://staging-api.docage.com/TransactionActions/{id} — donne le motif d'un refus (StatusDetails) et, une fois son tour venu, l'identifiant de
la vérification de ce participant (PersonIdentityVerificationId).
- Relancer un participant qui tarde, par l'identifiant du participant :
PUT https://staging-api.docage.com/TransactionMembers/SendReminder/{id}— voir Relancer les participants. - Relire la décision chez le prestataire, quand son rappel tarde, par l'identifiant de la vérification :
POST https://staging-api.docage.com/PersonIdentityVerifications/{id}/Refresh. Une vérification approuvée termine l'action, une vérification refusée la refuse. - Le rapport du prestataire, en PDF, une fois la vérification décidée :
GET https://staging-api.docage.com/PersonIdentityVerifications/{id}/Report. Il porte des données personnelles : ne le faites circuler que là où il doit aller.
Les pièges
- Désignez toujours un modèle, jamais une vérification déjà faite : celle d'un autre parcours est refusée au lancement de l'étape.
- Une identité déjà vérifiée et encore valide, au niveau du modèle, peut clore l'action d'office, sans invitation, quand le modèle
réutilise les identités valides (
ReuseValidIdentity). - La vérification est facturée quand le prestataire rend sa décision — approuvée ou refusée —, selon les contrôles effectués, même dans un parcours d'essai.
- Retirer la vérification d'un brouillon :
DELETE https://staging-api.docage.com/TransactionActions/BatchDelete, avec l'identifiant de l'action. Si un niveau reste exigé, le lancement le refusera : retirez les deux, ou aucun. - Le niveau d'identité ne change pas le niveau de la signature (
SignatureLevel) : ce sont deux réglages distincts.