Vai al contenuto principale
POST
cURL

Supporto KYC e KYB

Un unico endpoint crea sia sessioni di Verifica degli utenti sia sessioni di Verifica aziendale. Il tipo di workflow determina il tipo di sessione:
  • Passa un workflow_id di un Workflow KYC → viene creata una sessione di Verifica degli utenti (KYC). Risposta session_kind: "user".
  • Passa un workflow_id di un workflow KYB → viene creata una sessione di Verifica aziendale (KYB). Risposta session_kind: "business".
Configura i workflow nella console in Workflows → Create workflow. Al momento della creazione, un workflow è KYC oppure KYB; in seguito non puoi cambiarne il tipo.

Esempi

Risposta (201 Created):

Documenti di firma elettronica

Quando il workflow include un passaggio di Firma elettronica che usa i documenti della sessione (signature_documents_source impostato su session o both), invia i documenti in sign.documents. Ogni documento è il file in base64, quindi Didit non deve mai recuperarlo da un URL.
Senza fields, il firmatario legge il documento e lo accetta.

Posiziona i campi tramite testo di ancoraggio

Invece di una posizione, un campo può avere un anchor: un testo nel documento che indica dove va il campo. Le ancore sono adatte ai documenti che generi per ogni sessione, per esempio da un modello Word. Per i documenti del workflow, posiziona i campi nella console. Se il testo non è nel documento, la chiamata restituisce 400 con field_anchor_not_found e la chiave del campo. Didit non rimuove il testo di ancoraggio dal PDF, quindi scrivilo con lo stesso colore dello sfondo della pagina.

Valori dei campi

sign.field_values imposta il valore di ogni campo il cui prefill è api.<key>, sia nei documenti del workflow sia in quelli della sessione. È un oggetto con chiavi corrispondenti a questi nomi <key>. I valori sono stringhe da 1 a 500 caratteri per i campi text e data, e booleani per un checkbox.

Errori e chiamate ripetute

Una sessione accetta fino a 20 documenti e 50 MB in totale. La chiamata restituisce 400 con un errore sign quando:
  • Il workflow non ha un passaggio di Firma elettronica.
  • Hai inviato sign.documents e il passaggio accetta solo i documenti del workflow.
  • Il passaggio accetta solo i documenti della sessione e non ne hai inviati, oppure non ha documenti del workflow e non ne hai inviati.
  • Un documento è troppo grande, non è base64 valido o non è un file supportato.
  • Un file Word viene rifiutato con signature_document_not_supported, oppure non può essere convertito e restituisce signature_document_conversion_failed; in entrambi i casi è riportato il reason elencato in File supportati.
  • Un campo non è valido, la sua ancora non viene trovata (field_anchor_not_found), oppure un valore del campo viene rifiutato.
Chiamare nuovamente l’endpoint di creazione per lo stesso workflow_id e vendor_data restituisce la sessione in attesa. Se questa chiamata invia sign, i suoi documenti, campi e valori dei campi devono essere identici ai primi (stesso ordine, titoli, nomi dei file, contenuto, campi e valori). Qualsiasi differenza restituisce 400 con {"sign": "signature_document_changed"}: usa un vendor_data diverso, oppure attendi che la sessione in attesa termini.

Test con scenari sandbox

In un’applicazione in modalità sandbox, passa sandbox_scenario per precaricare un esito deterministico (approvazione, un rifiuto specifico o uno scenario In revisione) senza toccare i provider reali né il tuo saldo:
sandbox_scenario viene rifiutato con 400 nelle applicazioni in ambiente di produzione. Se al momento della creazione non conosci ancora l’esito, puoi impostarlo (o reimpostarlo) in seguito tramite POST /v3/session/{session_id}/sandbox/arm/, finché la sessione è ancora Not Started: il selettore dello scenario prima del flusso ospitato usa questo stesso endpoint. Consulta Sandbox e dati di test per il catalogo completo degli scenari, il registro dei valori magici e la struttura di richiesta e risposta dell’endpoint arm.

vendor_data collega la sessione a un’entità

  • Per i workflow KYC: viene collegato a un’entità utente. Se l’utente non esiste, viene creato automaticamente.
  • Per i workflow KYB: viene collegato a un’entità aziendale. Se è nuova, viene creata automaticamente.
Per saperne di più, leggi collegamento dei vendor data.

Consenso biometrico in Illinois, Texas e Colorado

Il flusso ospitato e l’SDK nativo 4.10.0 o successivo possono mostrare un passaggio esplicito di consenso biometrico prima della prima acquisizione del volto, a seconda della modalità di consenso dell’applicazione e della località della persona. Due campi facoltativi alimentano questa decisione:
  • user_state: dove vive la persona, quando lo conosci (US-IL, IL o Illinois). In modalità Auto, uno stato coperto fa sì che il flusso chieda il consenso.
  • biometric_consent: un oggetto con given_at e text_version, per il consenso che hai già raccolto. Il flusso non lo richiede di nuovo.
Gli SDK nativi precedenti alla 4.10.0 non possono mostrare questo passaggio: le loro sessioni funzionano come prima e la decisione riporta il consenso come non raccolto. Vedi Consenso biometrico.

Importante: l’informativa viene fornita e il consenso viene raccolto ancora nel tuo prodotto

Create Session genera un URL di verifica e un token di sessione. Di per sé non dimostra che hai mostrato all’utente le informative o ottenuto il consenso richiesto per il tuo specifico caso d’uso. Se avvii una sessione Didit dalla tua applicazione, dal tuo sito web, da un wrapper SDK o da un flusso white label, devi gestire lo strato legale nella tua UX prima che l’utente inizi l’acquisizione.

Checklist consigliata prima della verifica

  1. Comunica all’utente che la tua azienda richiede la verifica e che Didit è il fornitore di verifica / responsabile del trattamento che supporta il flusso.
  2. Inserisci un link alla tua informativa sulla privacy e agli eventuali termini legali del titolare del trattamento applicabili al percorso.
  3. Inserisci un link alla Informativa sulla privacy per la verifica di Didit e ai Termini per l’utente finale per la verifica dell’identità.
  4. Se il tuo workflow include l’acquisizione del documento o del selfie, il Rilevamento della vitalità o l’uso di dati biometrici, raccogli un consenso esplicito e affermativo ogni volta che la legge applicabile o la tua posizione legale lo richiedono.
  5. Se usi un’interfaccia personalizzata, un dominio personalizzato o un percorso solo API, mostra queste informative nel tuo prodotto prima di inviare l’utente al flusso Didit.
  6. Conserva una tua registrazione del testo dell’informativa o del consenso, del timestamp e dei metadati correlati, se il tuo team legale richiede una traccia di audit.
I requisiti legali variano in base alla giurisdizione. Il branding white label non elimina il ruolo di Didit nel flusso di verifica. Prima del lancio, fai rivedere la tua implementazione da un legale se operi in giurisdizioni con norme specifiche sui dati biometrici.

Autorizzazioni

x-api-key
string
header
obbligatorio

La chiave API della tua applicazione, da Developers -> API keys nella Business Console. La chiave primaria ha accesso completo. Una chiave con nome può avere un ambito definito: nessuno, lettura o scrittura per risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco di indirizzi IP e a una data di scadenza. 401 indica che la chiave è errata, revocata o scaduta; 403 indica che non è stata inviata alcuna chiave, che la chiave non ha accesso a questa risorsa o azione, oppure che la richiesta proviene da un indirizzo non incluso nel suo elenco IP; 404 su una route di sessione indica che la sessione non rientra nei workflow o negli stati previsti dalla chiave. Una chiave senza accesso ai media riceve gli URL di immagini, video e PDF come null, e una chiave senza permessi di scrittura sulle sessioni riceve link e token di sessione come null. Consulta https://docs.didit.me/console/api-keys.

Corpo

application/json
workflow_id
string<uuid>
obbligatorio

Identificatore stabile del workflow che definisce i passaggi di verifica che la sessione eseguirà. I workflow vengono creati e gestiti nella pagina Workflows della Console. Il valore workflow_id seleziona inoltre implicitamente se la sessione è KYC o KYB.

Esempio:

"11111111-2222-3333-4444-555555555555"

vendor_data
string

Un identificatore univoco per l'utente in fase di verifica, come un UUID, un'email o un ID utente interno. Questo campo è utilizzato per: (1) Raggruppamento degli utenti — le sessioni con lo stesso vendor_data vengono collegate allo stesso profilo utente nella scheda Utenti. (2) Rilevamento di duplicati cross-sessione — durante il controllo di volti, documenti, numeri di telefono, email, indirizzi IP o fingerprint dei dispositivi duplicati, le sessioni con lo stesso vendor_data vengono trattate come lo stesso utente ed escluse dalle corrispondenze. Senza vendor_data, ogni sessione viene considerata come un utente univoco e vengono mostrati tutti i potenziali duplicati. Consigliamo vivamente di fornire sempre un vendor_data per ridurre il rumore nel rilevamento dei duplicati.

Esempio:

"user-123"

multi_account_segment
string

Ambito opzionale per il rilevamento dei duplicati all'interno della tua organizzazione. I controlli dei volti duplicati confrontano questa sessione solo con altre sessioni che presentano lo stesso segmento, in modo che basi di account distinte (account personali e aziendali, o uno per ciascun sub-cliente B2B) non segnalino una persona che possiede legittimamente un account in ciascuna di esse. Omettilo per utilizzare il singolo ambito predefinito, che è quello utilizzato oggi da ogni sessione. La corrispondenza con blocklist e allowlist ignora questo campo.

Maximum string length: 64
Esempio:

"business-accounts"

callback
string

URL a cui reindirizzare l'utente al termine della verifica. Didit aggiunge automaticamente verificationSessionId e status (Approved, Declined, In Review) come parametri di query. Gli schemi URL personalizzati (es. myapp://) sono supportati per i callback su dispositivi mobili. Se omesso, viene utilizzato il callback_url predefinito del workflow. Quando l'applicazione ha domini consentiti (allowed_domains su PATCH /v3/webhook/), un callback http o https deve appartenere a una di queste origini (stesso schema, host e porta), altrimenti la richiesta non va a buon fine con 400 su callback: callback must be on one of the application's allowed domains: https://app.example.com. Gli schemi URL personalizzati sono sempre accettati.

Esempio:

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

callback_method
enum<string>
predefinito:initiator

Determina quale dispositivo deve gestire il reindirizzamento all'URL di callback fornito. Usa initiator per reindirizzare solo il dispositivo che ha avviato il flusso, completer per il dispositivo che lo completa, oppure both per consentire a entrambi i dispositivi di attivare il callback. Se noti che il callback non si attiva in modo affidabile, ti consigliamo di impostare questo valore su both.

Opzioni disponibili:
initiator,
completer,
both
Esempio:

"both"

metadata
any

JSON arbitrario memorizzato con la sessione e restituito nella risposta e nei webhook. È accettato qualsiasi valore JSON (oggetto, stringa, numero, array), ma è consigliato un oggetto JSON di coppie chiave/valore. Non viene mostrato all'utente finale. Utilizzalo per trasmettere i tuoi ID di correlazione, varianti A/B o il contesto aziendale.

Esempio:
tags
string[]

Tag aggiunti alla sessione al momento della creazione, per nome. Fino a 10, ciascuno di massimo 50 caratteri. I nomi non distinguono tra maiuscole e minuscole e vengono memorizzati in maiuscolo. Un nome non ancora presente nell'applicazione viene creato come nuovo tag. I tag compaiono sulla sessione nella console, dove puoi filtrarli.

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

Codice lingua (ISO 639-1) per l'interfaccia della procedura di verifica. Controlla la lingua mostrata all'utente finale durante la verifica. Se non fornito, la lingua del browser verrà rilevata e utilizzata automaticamente. Consulta tutte le lingue supportate qui.

Opzioni disponibili:
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
Esempio:

"en"

contact_details
object

Informazioni di contatto dell'utente che possono essere utilizzate per le notifiche, la precompilazione dei moduli di verifica e la verifica telefonica. Sono inclusi l'indirizzo email, la lingua preferita per le comunicazioni e il numero di telefono.

Esempio:
expected_details
object

Dettagli dell'utente previsti utilizzati per la convalida incrociata rispetto ai dati estratti dal documento d'identità dell'utente, dalla Prova di residenza e da altri passaggi di verifica. Le discrepanze vengono segnalate come avvisi nella decisione; alcuni campi (ad es. id_country, expected_document_types) modificano anche il flusso visibile all'utente. Per i workflow di Verifica aziendale (KYB) vengono utilizzati solo i campi aziendali (company_name, registry_country, registration_number) — che precompilano la ricerca nel registro delle imprese per l'utente — e tutti i campi relativi alla persona vengono ignorati.

Esempio:
portrait_image
string<byte>

Immagine del volto dell'utente finale codificata in Base64 (max 2 MB; JPEG, PNG, WebP o TIFF). Utilizzata come immagine di riferimento da confrontare con l'acquisizione della vitalità quando il workflow è un workflow di Biometric Authentication con Confronto facciale abilitato, o qualsiasi workflow a grafo in cui il Confronto facciale viene eseguito prima della Verifica dell'identità (OCR). Opzionale quando l'utente specificato in vendor_data ha già un'immagine del volto memorizzata: Didit la riutilizza automaticamente, risolvendola in ordine di priorità: volto da rilevamento della vitalità approvato, foto del chip dell'ePassport, ritratto del documento d'identità, volto del profilo registrato manualmente (vengono riutilizzati solo i volti provenienti da sessioni approvate o i volti che hai registrato personalmente). Se fornita, portrait_image ha sempre la precedenza sul volto memorizzato. Se omessa e non esiste alcun volto memorizzato (o non viene inviato vendor_data), la creazione della sessione fallisce con 400. Ignorata per altri tipi di workflow.

Esempio:

"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="

sandbox_scenario
string

Slug dello scenario solo per la sandbox. Accettato solo quando la chiave API appartiene a un'applicazione in modalità sandbox; rifiutato nelle applicazioni di produzione. Se impostato, il flusso di creazione inserisce i valori magici associati allo scenario nei campi di input della sessione (contact_details, expected_details), consentendo ai provider simulati di riprodurre l'esito dello scenario lungo l'effettiva pipeline del workflow. Consulta il catalogo degli scenari con GET /v1/sandbox/scenarios/ o in Sandbox e dati di test. Puoi anche preparare (o ripreparare) uno scenario dopo la creazione tramite POST /v3/session/{sessionId}/sandbox/arm/, a condizione che la sessione sia ancora Not Started. Per le verifiche senza documenti, usa lookup_partial_match, lookup_no_match o lookup_provider_error per testare il budget di tentativi configurato e il fallback. Per i wallet di identità, usa wallet_cancelled, wallet_timeout o wallet_provider_error; approve simula un wallet verificato. Tutti i wallet del catalogo possono essere testati in sandbox, inclusi gli schemi non disponibili nelle applicazioni di produzione. I tentativi simulati non vengono addebitati.

Esempio:

"decline_document_expired"

sign
object

Dati di input di Firma elettronica per questa sessione. I documents sono i documenti da firmare, per un workflow il cui passaggio di Firma elettronica riceve i documenti dalla sessione (signature_documents_source session o both): fino a 20 documenti e 50 MB in totale. field_values compila i campi il cui prefill è api.<key>, sia sui documenti del workflow che su quelli della sessione. Creando nuovamente una sessione per gli stessi workflow_id e vendor_data viene restituita la sessione in sospeso; se tale chiamata invia sign, i relativi documenti, campi e valori devono essere identici a quelli iniziali, altrimenti qualsiasi differenza restituisce 400 con {"sign": "signature_document_changed"}. Consulta Documenti di Firma elettronica.

user_state
string

Dove risiede la persona, se noto: un codice di suddivisione ISO 3166-2 (US-IL, ES-M) o un codice o nome di uno stato USA (IL, Illinois). Uno stato la cui legislazione richiede un consenso biometrico esplicito (Illinois, Texas, Colorado) fa sì che il flusso di verifica lo richieda prima di acquisire il volto, con trigger declared_state. Un valore non riconosciuto restituisce 400. Consulta Consenso biometrico.

Maximum string length: 16
Esempio:

"US-IL"

Consenso biometrico esplicito già raccolto dalla persona. Soddisfa il requisito, quindi il flusso di verifica non lo richiede nuovamente, e la decisione lo registra come status: "given" con trigger customer_collected. Una risposta già fornita dalla persona nel flusso non viene mai sostituita. Consulta Consenso biometrico.

Risposta

Sessione creata (o restituita, se esiste già una sessione non completata con gli stessi vendor_data sull'ultima versione pubblicata del workflow). La risposta è la sessione serializzata, incluso l'url della pagina di verifica ospitata a cui reindirizzare l'utente.

session_id
string<uuid>
obbligatorio

Identificativo univoco della sessione di verifica. Usa questo id quando chiami GET /v3/session/{sessionId}/decision/.

Esempio:

"11111111-2222-3333-4444-555555555555"

session_number
integer
obbligatorio

Numero sequenziale e di facile lettura assegnato alla sessione all'interno della tua applicazione. Utile per l'assistenza e le dashboard.

Esempio:

43762

session_token
string
obbligatorio

Token URL-safe di 12 caratteri che autorizza l'utente finale ad accedere al flusso di verifica ospitato all'indirizzo url. Valido fino alla scadenza della sessione. Trattalo come un segreto: chiunque lo possieda può aprire il flusso di verifica per questa sessione.

Esempio:

"3FaJ9wLqX2Mz"

url
string<uri>
obbligatorio

URL di verifica ospitato a cui reindirizzare l'utente finale. L'URL include il session_token e, se configurato, utilizza il tuo dominio white label. Quando la richiesta include language, l'URL contiene un segmento di percorso per la lingua — https://verify.didit.me/{language}/session/{session_token} (ad es. /es/session/...); senza language, il segmento viene omesso.

Esempio:

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

vendor_data
string | null
obbligatorio

Identificatore che hai passato nella richiesta per collegare la sessione a un utente o a un'azienda nel tuo sistema. Restituito esattamente come inviato. Null se non fornito.

Esempio:

"user-123"

metadata
any
obbligatorio

Payload JSON arbitrario memorizzato con la sessione al momento della creazione. Viene restituito testualmente: qualunque valore JSON inviato (oggetto, stringa, numero, array) viene restituito così com'è, anche se è consigliato un oggetto JSON. Non viene mostrato all'utente finale. Sempre presente nelle risposte; null se non fornito al momento della creazione.

Esempio:
status
enum<string>
obbligatorio

Stato attuale della sessione. Le sessioni appena create restituiscono Not Started. Se esisteva già una sessione non conclusa per lo stesso vendor_data sull'ultima versione pubblicata del workflow, lo stato restituito riflette tale sessione esistente.

Opzioni disponibili:
Not Started,
In Progress,
Approved,
Declined,
In Review,
Expired,
Abandoned,
Kyc Expired,
Resubmitted,
Awaiting User
Esempio:

"Not Started"

callback
string<uri> | null
obbligatorio

URL di reindirizzamento finale a cui l'utente viene inviato dopo aver completato il flusso. Didit aggiunge ?verificationSessionId={session_id}&status={status} a questo URL. Utilizza come fallback l'URL di callback configurato nel workflow se non fornito nella richiesta; null quando nessuno dei due è impostato. Se l'applicazione ha domini consentiti e questo URL è un URL web esterno a essi (ad esempio un valore predefinito del workflow impostato prima della modifica dell'elenco), il flusso ospitato non vi reindirizza l'utente.

Esempio:

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

workflow_id
string<uuid>
obbligatorio

Identificatore stabile del workflow su cui viene eseguita questa sessione. Corrisponde sempre all'identificatore di gruppo stabile del workflow; anche se nella richiesta hai fatto riferimento all'UUID di una versione specifica del workflow (ricerca retrocompatibile), la risposta riporta il workflow_id stabile. Usalo per correlare la sessione con il workflow configurato nella Console.

Esempio:

"11111111-2222-3333-4444-555555555555"

workflow_version
integer
obbligatorio

Numero di versione della versione pubblicata del workflow a cui la sessione è stata associata al momento della creazione. Didit risolve workflow_id con l'ultima versione pubblicata del workflow quando la sessione viene creata, e la sessione continua a eseguire quella versione anche se il workflow viene ripubblicato successivamente.

Esempio:

3

tags
string[]

I tag presenti sulla sessione, per nome.

Esempio:
Ultima modifica il 7 novembre 2026