Passer au contenu principal
POST
cURL

Prise en charge KYC et KYB

Un seul endpoint crée à la fois des sessions de vérification des utilisateurs et des sessions de vérification d’entreprise. Le type du workflow détermine le type de session :
  • Transmettez un workflow_id de workflow KYC → une session de vérification d’identité (KYC) est créée. Réponse session_kind: "user".
  • Transmettez un workflow_id de workflow KYB → une session de vérification d’entreprise (KYB) est créée. Réponse session_kind: "business".
Configurez les workflows dans la console, à l’adresse Workflows → Create workflow. Un workflow est soit KYC, soit KYB, dès sa création ; vous ne pouvez pas changer ensuite son type.

Exemples

Réponse (201 Created) :

Documents de signature électronique

Lorsque le workflow comporte une étape Signature électronique qui reprend des documents de la session (signature_documents_source défini sur session ou both), envoyez-les dans sign.documents. Chaque document est le fichier encodé en base64, afin que Didit n’ait jamais besoin de le récupérer depuis une URL.
Sans fields, le signataire lit le document et l’accepte.

Placer les champs par texte d’ancrage

Au lieu d’une position, un champ peut porter une anchor : un extrait de texte du document qui indique où le champ doit être placé. Les ancres conviennent aux documents que vous générez pour chaque session, par exemple à partir d’un modèle Word. Pour les documents du workflow, placez les champs dans la console. Lorsque le texte est absent du document, l’appel renvoie 400 avec field_anchor_not_found et la clé du champ. Didit ne supprime pas le texte d’ancrage du PDF ; écrivez-le donc dans la même couleur que le fond de la page.

Valeurs des champs

sign.field_values définit la valeur de chaque champ dont prefill est api.<key>, qu’il s’agisse de documents du workflow ou de documents de session. Il s’agit d’un objet indexé par ces noms <key>. Les valeurs sont des chaînes de 1 à 500 caractères pour les champs text et data, et des booléens pour une checkbox.

Erreurs et appels répétés

Une session accepte jusqu’à 20 documents et 50 Mo au total. L’appel renvoie 400 avec une erreur sign lorsque :
  • Le workflow ne comporte aucune étape de signature électronique.
  • Vous avez envoyé sign.documents alors que l’étape n’accepte que les documents du workflow.
  • L’étape n’accepte que les documents de session et vous n’en avez envoyé aucun, ou elle ne comporte aucun document de workflow et vous n’en avez envoyé aucun.
  • Un document est trop volumineux, n’est pas du base64 valide ou n’est pas un fichier pris en charge.
  • Un fichier Word est refusé avec signature_document_not_supported, ou ne peut pas être converti et renvoie signature_document_conversion_failed, chacun avec le reason indiqué dans Fichiers pris en charge.
  • Un champ est invalide, son ancre est introuvable (field_anchor_not_found), ou une valeur de champ est refusée.
Un nouvel appel de création pour le même workflow_id et le même vendor_data renvoie la session en attente. Si cet appel envoie sign, ses documents, ses champs et ses valeurs de champs doivent être identiques à ceux du premier appel (même ordre, mêmes titres, noms de fichiers, contenus, champs et valeurs). Toute différence renvoie 400 avec {"sign": "signature_document_changed"} : utilisez un autre vendor_data, ou attendez que la session en attente soit terminée.

Tester avec les scénarios sandbox

Sur une application en mode sandbox, transmettez sandbox_scenario pour précharger un résultat déterministe (approbation, un refus spécifique ou un scénario En cours d’examen) sans solliciter de vrais fournisseurs ni toucher à votre solde :
sandbox_scenario est rejeté avec 400 sur les applications en production. Si vous ne connaissez pas encore le résultat au moment de la création, configurez-le (ou reconfigurez-le) plus tard via POST /v3/session/{session_id}/sandbox/arm/, tant que la session est toujours Not Started : le sélecteur de scénario préalable du parcours hébergé utilise ce même endpoint. Consultez Sandbox et données de test pour le catalogue complet des scénarios, le registre des valeurs magiques et la structure de requête et de réponse de l’endpoint d’armement.

vendor_data rattache la session à une entité

  • Pour les workflows KYC : rattache la session à une entité utilisateur. Si l’utilisateur n’existe pas, il est créé automatiquement.
  • Pour les workflows KYB : rattache la session à une entité entreprise. Créée automatiquement si elle est nouvelle.
Pour en savoir plus, consultez liaison des données fournisseur.

Consentement biométrique dans l’Illinois, le Texas et le Colorado

Le parcours hébergé et le SDK natif 4.10.0 ou ultérieur peuvent afficher une étape de consentement biométrique explicite avant la première capture du visage, selon le mode de consentement de l’application et le lieu où se trouve la personne. Deux champs facultatifs alimentent cette décision :
  • user_state : le lieu de résidence de la personne, lorsque vous le connaissez (US-IL, IL ou Illinois). En mode Auto, un État concerné déclenche l’affichage de l’étape.
  • biometric_consent : un objet contenant given_at et text_version, pour un consentement que vous avez déjà recueilli. Le parcours ne le redemande pas.
Les SDK natifs antérieurs à 4.10.0 ne peuvent pas afficher cette étape : leurs sessions se déroulent comme auparavant, et la décision indique que le consentement n’a pas été recueilli. Voir Consentement biométrique.

Important : la communication des informations et le recueil du consentement ont toujours lieu dans votre produit

Create Session génère une URL de vérification et un token de session. Cet appel ne prouve pas, à lui seul, que vous avez communiqué à l’utilisateur les informations légales ou recueilli le consentement requis pour votre cas d’usage précis. Si vous démarrez une session Didit depuis votre propre application, votre site web, un wrapper de SDK ou un parcours en marque blanche, vous devriez gérer la couche juridique dans votre propre expérience utilisateur, avant que l’utilisateur ne commence la capture.

Liste de contrôle recommandée avant la vérification

  1. Indiquez à l’utilisateur que votre entreprise demande la vérification et que Didit est le prestataire de vérification / sous-traitant qui assure le fonctionnement du parcours.
  2. Renvoyez vers votre avis de confidentialité et vers toutes les conditions juridiques applicables côté responsable du traitement pour ce parcours.
  3. Renvoyez vers l’Avis de confidentialité de la vérification et les Conditions d’utilisation pour l’utilisateur final de la vérification d’identité de Didit.
  4. Si votre workflow comprend une capture de document, une capture de selfie, une détection du vivant ou des données biométriques, recueillez un consentement explicite et affirmatif partout où la loi applicable ou votre position juridique l’exige.
  5. Si vous utilisez une interface personnalisée, un domaine personnalisé ou un parcours uniquement via l’API, affichez ces informations dans votre propre produit avant d’envoyer l’utilisateur vers le parcours Didit.
  6. Conservez votre propre trace de l’avis d’information ou du texte de consentement, de l’horodatage et des métadonnées associées, si votre service juridique exige une piste d’audit.
Les exigences légales varient selon les juridictions. Le marquage en marque blanche ne retire pas à Didit son rôle dans le parcours de vérification. Faites relire votre implémentation par un conseil juridique avant le lancement si vous opérez dans des juridictions soumises à des règles spécifiques à la biométrie.

Autorisations

x-api-key
string
header
requis

La clé API de votre application, issue de Développeurs -> Clés API dans la Business Console. La clé principale dispose d'un accès complet. Une clé nommée peut être restreinte : aucun, lecture ou écriture par ressource, limitée à certains workflows ou aux sessions approuvées, à une liste d'adresses IP et à une date d'expiration. 401 signifie que la clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a été envoyée, que la clé n'a pas accès à cette ressource ou action, ou que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur une route de session signifie que la session est hors des workflows ou des statuts de la clé. Une clé sans accès aux médias reçoit les URL d'images, de vidéos et de PDF à null, et une clé sans accès en écriture aux sessions reçoit les liens et tokens de session à null. Voir https://docs.didit.me/console/api-keys.

Corps

application/json
workflow_id
string<uuid>
requis

Identifiant stable du workflow définissant les étapes de vérification que la session exécutera. Les workflows sont créés et gérés sur la page Workflows de la Console. Le paramètre workflow_id détermine également implicitement si la session relève du KYC ou du KYB.

Exemple:

"11111111-2222-3333-4444-555555555555"

vendor_data
string

Un identifiant unique pour l'utilisateur en cours de vérification, tel qu'un UUID, une adresse e-mail ou un identifiant utilisateur interne. Ce champ sert à : (1) Regroupement d'utilisateurs — les sessions ayant le même vendor_data sont associées au même profil utilisateur dans l'onglet Utilisateurs. (2) Détection de doublons entre sessions — lors de la vérification de visages, documents, numéros de téléphone, e-mails, adresses IP ou empreintes d'appareils dupliqués, les sessions avec le même vendor_data sont traitées comme étant le même utilisateur et exclues des correspondances. Sans vendor_data, chaque session est traitée comme un utilisateur unique et tous les doublons potentiels sont signalés. Nous recommandons vivement de toujours fournir un vendor_data afin de réduire le bruit dans la détection des doublons.

Exemple:

"user-123"

multi_account_segment
string

Domaine optionnel de détection de doublons au sein de votre organisation. Les vérifications de visages en double comparent cette session uniquement avec d'autres sessions portant le même segment, afin que des bases de comptes distinctes (comptes personnels et professionnels, ou une par sous-client B2B) ne signalent pas une personne détenant légitimement un compte dans chacune. Omettez-le pour utiliser le domaine unique par défaut, qui est celui utilisé par chaque session actuellement. La mise en correspondance avec la liste de blocage et la liste d'autorisation ignore ce champ.

Maximum string length: 64
Exemple:

"business-accounts"

callback
string

URL vers laquelle rediriger l'utilisateur une fois la vérification terminée. Didit ajoute automatiquement verificationSessionId et status (Approved, Declined, In Review) en tant que paramètres de requête. Les schémas d'URL personnalisés (par exemple myapp://) sont pris en charge pour les rappels mobiles. En cas d'omission, le callback_url par défaut du workflow est utilisé. Lorsque l'application a des domaines autorisés (allowed_domains sur PATCH /v3/webhook/), un rappel http ou https doit appartenir à l'une de ces origines (le même schéma, le même hôte et le même port), sinon la requête échoue avec 400 sur callback : callback must be on one of the application's allowed domains: https://app.example.com. Les schémas d'URL personnalisés sont toujours acceptés.

Exemple:

"https://example.com/verification/callback"

callback_method
enum<string>
défaut:initiator

Détermine quel appareil doit gérer la redirection vers l'URL de rappel fournie. Utilisez initiator pour rediriger uniquement l'appareil qui a démarré le flux, completer pour l'appareil qui le termine, ou both pour autoriser l'un ou l'autre appareil à déclencher le rappel. Si vous constatez que le rappel ne se déclenche pas de manière fiable, nous vous recommandons de définir cette valeur sur both.

Options disponibles:
initiator,
completer,
both
Exemple:

"both"

metadata
any

JSON arbitraire stocké avec la session et renvoyé dans la réponse et les webhooks. Toute valeur JSON est acceptée (objet, chaîne, nombre, tableau), mais un objet JSON de paires clé/valeur est recommandé. Non visible par l'utilisateur final. Utilisez-le pour transmettre vos propres identifiants de corrélation, variantes d'A/B testing ou contexte métier.

Exemple:
tags
string[]

Tags ajoutés à la session lors de sa création, par leur nom. Jusqu'à 10, de 50 caractères maximum chacun. Les noms sont insensibles à la casse et stockés en majuscules. Un nom qui n'existe pas encore dans l'application est créé en tant que nouveau tag. Les tags s'affichent sur la session dans la console, où vous pouvez filtrer selon ces derniers.

Maximum array length: 10
Maximum string length: 50
Exemple:
language
enum<string>

Code de langue (ISO 639-1) pour l'interface du processus de vérification. Contrôle la langue affichée à l'utilisateur final pendant la vérification. S'il n'est pas fourni, la langue du navigateur sera automatiquement détectée et utilisée. Consultez toutes les langues prises en charge ici.

Options disponibles:
en,
ar,
bg,
bn,
bs,
ca,
cnr,
cs,
da,
de,
el,
es,
et,
fa,
fi,
fr,
he,
hi,
hr,
hu,
hy,
id,
it,
ja,
ka,
kk,
ko,
ky,
lt,
lv,
mk,
mn,
ms,
nl,
no,
pl,
pt-BR,
pt,
ro,
ru,
sk,
sl,
so,
sq,
sr,
sv,
th,
tr,
uk,
uz,
vi,
zh-CN,
zh-TW,
zh
Exemple:

"en"

contact_details
object

Coordonnées de l'utilisateur pouvant être utilisées pour les notifications, le préremplissage des formulaires de vérification et la vérification du téléphone. Cela comprend l'adresse e-mail, la langue préférée pour les communications et le numéro de téléphone.

Exemple:
expected_details
object

Informations attendues sur l'utilisateur utilisées pour la validation croisée avec les données extraites de sa pièce d'identité, du Justificatif de domicile et d'autres étapes de vérification. Les discordances apparaissent sous forme d'avertissements sur la décision ; certains champs (par ex. id_country, expected_document_types) modifient également le parcours côté utilisateur. Pour les workflows de Vérification d'entreprise (KYB), seuls les champs relatifs à l'entreprise (company_name, registry_country, registration_number) sont utilisés — ils préremplissent la recherche dans le registre des sociétés pour l'utilisateur — et tous les champs relatifs aux personnes physiques sont ignorés.

Exemple:
portrait_image
string<byte>

Image portrait du visage de l'utilisateur final encodée en Base64 (max 2 Mo ; JPEG, PNG, WebP ou TIFF). Utilisée comme image de référence à comparer à la capture de détection du vivant lorsque le workflow est un workflow Biometric Authentication avec la Correspondance faciale activée, ou tout workflow en graphe où la Correspondance faciale s'exécute avant la vérification d'identité (OCR). Facultatif lorsque l'utilisateur identifié par vendor_data possède déjà une image de visage enregistrée : Didit la réutilise automatiquement, en appliquant l'ordre de priorité suivant : visage issu d'une détection du vivant approuvée, photo de puce d'ePassport, portrait de document d'identité, visage de profil enrôlé manuellement (seuls les visages issus de sessions approuvées ou les visages que vous avez vous-même enrôlés sont réutilisés). Lorsqu'elle est fournie, portrait_image prévaut toujours sur le visage enregistré. Si elle est omise et qu'aucun visage enregistré n'existe (ou que vendor_data n'est pas envoyé), la création de la session échoue avec une erreur 400. Ignoré pour les autres types de workflow.

Exemple:

"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="

sandbox_scenario
string

Slug de scénario réservé à la sandbox. Uniquement accepté lorsque la clé API appartient à une application en mode sandbox ; rejeté sur les applications en production. Lorsqu'il est défini, le flux de création applique les valeurs magiques associées au scénario sur les champs d'entrée de la session (contact_details, expected_details) afin que les fournisseurs simulés reproduisent le résultat du scénario à travers le véritable pipeline de workflow. Consultez le catalogue de scénarios via GET /v1/sandbox/scenarios/ ou Sandbox et données de test. Vous pouvez également armer (ou réarmer) un scénario après la création via POST /v3/session/{sessionId}/sandbox/arm/, tant que la session est toujours à l'état Not Started. Pour la recherche sans document, utilisez lookup_partial_match, lookup_no_match ou lookup_provider_error afin de tester le budget de tentatives configuré et le mécanisme de secours. Pour les portefeuilles d'identité, utilisez wallet_cancelled, wallet_timeout ou wallet_provider_error ; approve simule un portefeuille vérifié. Tous les portefeuilles du catalogue peuvent être testés dans la sandbox, y compris les schémas non disponibles sur les applications en production. Les tentatives simulées ne sont pas facturées.

Exemple:

"decline_document_expired"

sign
object

Données d'entrée de Signature électronique pour cette session. documents correspond aux documents à signer, pour un workflow dont l'étape de Signature électronique extrait les documents de la session (signature_documents_source session ou both) : jusqu'à 20 documents et 50 Mo au total. field_values renseigne les champs dont le prefill est api.<key>, aussi bien sur les documents du workflow que de la session. Créer à nouveau une session pour les mêmes workflow_id et vendor_data renvoie la session en attente ; si cet appel transmet sign, ses documents, champs et valeurs doivent être identiques aux premiers, et toute différence renvoie 400 avec {"sign": "signature_document_changed"}. Voir Documents de signature électronique.

user_state
string

Lieu de résidence de la personne, lorsqu'il est connu : un code de subdivision ISO 3166-2 (US-IL, ES-M) ou un code ou nom d'État américain (IL, Illinois). Un État dont la législation impose un consentement biométrique explicite (Illinois, Texas, Colorado) amène le flux de vérification à le demander avant de capturer un visage, avec le déclencheur declared_state. Une valeur non reconnue renvoie 400. Voir Consentement biométrique.

Maximum string length: 16
Exemple:

"US-IL"

Consentement biométrique explicite que vous avez déjà recueilli auprès de la personne. Il satisfait à l'exigence, de sorte que le flux de vérification ne le redemande pas, et la décision l'enregistre avec status: "given" et le déclencheur customer_collected. Une réponse déjà donnée par la personne au cours du parcours n'est jamais remplacée. Voir Consentement biométrique.

Réponse

Session créée (ou renvoyée, si une session non terminée avec les mêmes vendor_data existe déjà sur la dernière version publiée du workflow). La réponse est la session sérialisée, incluant l'url de vérification hébergée vers laquelle rediriger l'utilisateur.

session_id
string<uuid>
requis

Identifiant unique de la session de vérification. Utilisez cet identifiant lors de l'appel à GET /v3/session/{sessionId}/decision/.

Exemple:

"11111111-2222-3333-4444-555555555555"

session_number
integer
requis

Numéro séquentiel et lisible attribué à la session au sein de votre application. Utile pour le support et les tableaux de bord.

Exemple:

43762

session_token
string
requis

Token de 12 caractères compatible avec les URL autorisant l'utilisateur final à accéder au flux de vérification hébergé à url. Valide jusqu'à l'expiration de la session. Traitez-le comme un secret — toute personne en sa possession peut ouvrir le flux de vérification pour cette session.

Exemple:

"3FaJ9wLqX2Mz"

url
string<uri>
requis

URL de vérification hébergée vers laquelle rediriger l'utilisateur final. L'URL intègre le session_token et, si configuré, utilise votre domaine en marque blanche. Lorsque la requête comprend language, l'URL contient un segment de chemin de langue — https://verify.didit.me/{language}/session/{session_token} (par exemple /es/session/...) ; sans language, ce segment est omis.

Exemple:

"https://verify.didit.me/session/3FaJ9wLqX2Mz"

vendor_data
string | null
requis

Identifiant que vous avez transmis dans la requête pour lier la session à un utilisateur ou une entreprise dans votre propre système. Renvoyé textuellement. Null lorsqu'il n'est pas fourni.

Exemple:

"user-123"

metadata
any
requis

Payload JSON arbitraire que vous avez stocké avec la session au moment de sa création. Renvoyé textuellement — quelle que soit la valeur JSON envoyée (objet, chaîne, nombre, tableau), elle est retournée telle quelle, bien qu'un objet JSON soit recommandé. Non visible par l'utilisateur final. Toujours présent dans les réponses ; null lorsqu'il n'a pas été fourni lors de la création.

Exemple:
status
enum<string>
requis

Statut actuel de la session. Les sessions nouvellement créées renvoient Not Started. Si une session non terminée existait déjà pour le même vendor_data sur la dernière version publiée du workflow, le statut renvoyé reflète cette session existante.

Options disponibles:
Not Started,
In Progress,
Approved,
Declined,
In Review,
Expired,
Abandoned,
Kyc Expired,
Resubmitted,
Awaiting User
Exemple:

"Not Started"

callback
string<uri> | null
requis

URL de redirection finale vers laquelle l'utilisateur est renvoyé après avoir terminé le flux. Didit ajoute ?verificationSessionId={session_id}&status={status} à cette URL. Se rabat sur l'URL de rappel configurée du workflow si elle n'est pas fournie dans la requête ; null si aucune n'est définie. Lorsque l'application a des domaines autorisés et que cette URL est une URL web en dehors de ceux-ci (par exemple une valeur par défaut de workflow définie avant la modification de la liste), le flux hébergé n'y redirige pas l'utilisateur.

Exemple:

"https://example.com/verification/callback"

workflow_id
string<uuid>
requis

Identifiant stable du workflow sur lequel s'exécute cette session. Il s'agit toujours de l'identifiant de groupe stable du workflow — même si vous avez référencé un UUID de version de workflow spécifique dans la requête (recherche rétrocompatible), la réponse contient le workflow_id stable. Utilisez-le pour corréler la session avec le workflow que vous avez configuré dans la Console.

Exemple:

"11111111-2222-3333-4444-555555555555"

workflow_version
integer
requis

Numéro de version de la version publiée du workflow à laquelle la session a été associée lors de sa création. Didit résout workflow_id vers la dernière version publiée du workflow lorsque la session est créée, et la session continue d'exécuter cette version même si le workflow est republié ultérieurement.

Exemple:

3

tags
string[]

Les étiquettes sur la session, par nom.

Exemple:
Dernière modification le 7 novembre 2026