Riferimento API di Live ID
Endpoint di Live ID Validation — emissione di una chiave di identificazione, creazione di una sessione di acquisizione, apertura della pagina di acquisizione ospitata, invio di un selfie, interrogazione dell'esito e payload del webhook di validazione.
Tre superfici: la gestione delle chiavi (autenticata con la dashboard, riservata agli amministratori), il ciclo di vita della sessione (autenticato con chiave e token di sessione, pubblico) e il webhook. L'URL di base qui sotto è l'host del Suo tenant.
Gli endpoint di sessione si trovano sotto /api/kyc/public/live-id e non sono autenticati con una chiave API — sono protetti dalla chiave di identificazione (per la creazione) oppure dal token di sessione monouso (per validazione e interrogazione), e hanno un limite di frequenza per indirizzo IP.
Emetta una chiave di identificazione
POST /api/kyc/live-id/:orgSlug/keys Autenticazione: sessione della dashboard (amministratore / proprietario)
Emette una chiave per profilo. Il token in chiaro viene restituito una sola volta — lo conservi in modo sicuro sul Suo backend; viene conservato solo il suo hash.
Corpo della richiesta
{ "applicantId": "app_…", "label": "mobile-app", "expiresInDays": 365 }
| Campo | Tipo | Obbligatorio | Note |
|---|---|---|---|
enrollmentId | stringa | uno dei due | L'ID di registrazione Live ID. |
applicantId | stringa | uno dei due | L'ID del richiedente KYC (risolto nella sua registrazione). |
label | stringa | no | Etichetta libera per Suo riferimento. |
expiresInDays | intero | no | Da 1 a 3650. Ometta per non impostare alcuna scadenza. |
Risposta 201
{
"id": "lik_…",
"token": "livid_…", // shown ONCE
"keyVersion": 1,
"label": "mobile-app",
"expiresAt": null,
"createdAt": "2026-06-18T12:00:00.000Z"
}
Endpoint complementari: GET /api/kyc/live-id/:orgSlug/keys (elenco, solo metadati), DELETE /api/kyc/live-id/:orgSlug/keys/:id (revoca), GET /api/kyc/live-id/:orgSlug/enrollments (elenco dei profili registrati).
Crei una sessione
POST /api/kyc/public/live-id/sessions Autenticazione: chiave di identificazione (nel corpo)
Chiami questo endpoint lato server. Verifica la chiave, applica il controllo di fatturazione e crea un token di sessione monouso.
Corpo della richiesta
{ "key": "livid_…", "deviceFingerprint": "optional", "captureMethod": "live_camera" }
Risposta 201
{
"sessionId": "lis_…",
"sessionToken": "…",
"expiresAt": "2026-06-18T12:02:00.000Z",
"captureUrl": "https://app.certivant.com/live-id/…",
"nonce": "…"
}
Consegni captureUrl al dispositivo. Viene restituito anche il sessionToken, così può interrogare lo stato lato server. nonce è il valore monouso della sessione — serve solo se costruisce una Sua interfaccia di acquisizione (vedi Invii un selfie).
La creazione viene rifiutata con 429 enrollment_locked mentre il profilo è bloccato dopo ripetute validazioni fallite (5 errori entro 15 minuti bloccano il profilo per 30 minuti e attivano live_id.enrollment.locked).
Apra la pagina di acquisizione
GET /live-id/:sessionToken Autenticazione: token di sessione (nel percorso)
La pagina di acquisizione ospitata, pensata per il mobile — la apra a livello principale: in un popup, tramite un reindirizzamento oppure in una WebView nativa. È servita con frame-ancestors 'none', quindi non è incorporabile in un iframe. Mostra l'interfaccia di fotocamera e selfie quando la sessione è attiva, e un avviso chiaro quando è scaduta, non valida o già completata.
Al caricamento, la pagina ospitata chiama POST /api/kyc/public/live-id/sessions/:sessionToken/open. Questo registra l'indirizzo IP del dispositivo e restituisce il valore monouso della sessione, che la pagina rimanda insieme al selfie. Da quel momento in poi, un selfie inviato senza il valore corretto viene rifiutato.
Apra un'acquisizione (solo con un'interfaccia di acquisizione propria)
POST /api/kyc/public/live-id/sessions/:sessionToken/open Autenticazione: token di sessione (nel percorso)
Lo chiami dal dispositivo quando si apre la Sua schermata di acquisizione. Risposta 200:
{ "nonce": "…", "expiresAt": "2026-06-18T12:02:00.000Z" }
Invii un selfie
POST /api/kyc/public/live-id/validate Autenticazione: token di sessione (nel corpo)
La pagina ospitata lo chiama per Lei. Lo documenti solo se costruisce una Sua interfaccia di acquisizione nativa al posto della pagina ospitata.
Corpo della richiesta
{ "sessionToken": "…", "selfieImage": "data:image/jpeg;base64,/9j/4AAQ…", "nonce": "…" }
selfieImage accetta una stringa base64 oppure un URL data:. Minimo circa 1 KB, massimo 8 MB.
nonce è il valore monouso della sessione (dalla risposta della creazione oppure da /open):
- Un valore errato viene sempre rifiutato (
reason: "nonce_mismatch",matched: false). - Un valore mancante viene rifiutato solo quando l'acquisizione è stata aperta con
/open(la pagina ospitata lo fa sempre). Le integrazioni server-to-server che non chiamano mai/opencontinuano a funzionare anche senza di esso, ma è consigliato inviarlo.
Lo stesso selfie non può mai essere usato due volte: una copia esatta della foto di riferimento registrata o del selfie di una sessione precedente viene rifiutata (reason: "replayed_image"). Le copie quasi identiche vengono segnalate nel campo riskSignals del webhook.
Risposta 200
{
"matched": true,
"faceMatchScore": 0.94,
"livenessScore": 0.98,
"livePassed": true,
"reason": "matched",
"sessionId": "lis_…"
}
reason è uno tra matched, face_below_threshold, liveness_failed, face_and_liveness_failed, no_reference_image, nonce_mismatch, replayed_image, near_duplicate_image.
Interroghi una sessione
GET /api/kyc/public/live-id/sessions/:sessionToken Autenticazione: token di sessione (nel percorso)
Risposta 200
{
"sessionId": "lis_…",
"status": "completed",
"matched": true,
"faceMatchScore": 0.94,
"livenessScore": 0.98,
"reason": "matched",
"expiresAt": "2026-06-18T12:02:00.000Z"
}
status: pending → processing → completed (oppure expired). Quando è completed, matched è il verdetto. Interroghi circa ogni 2 secondi; si fermi a completed o expired.
Webhook — live_id.validation.completed
Si attiva una volta per ogni validazione completata verso l'URL webhook del Suo tenant, firmato esattamente come ogni altro webhook di Certivant (X-Certivant-Signature-V2: t=…,v1=…; il vecchio X-KYC-Signature: sha256=… viene ancora inviato).
{
"event": "live_id.validation.completed",
"organizationId": "org_…",
"validationId": "liv_…",
"sessionId": "lis_…",
"enrollmentId": "lie_…",
"applicantId": "app_…",
"matched": true,
"faceMatchScore": 0.94,
"livenessScore": 0.98,
"decisionReason": "matched",
"riskSignals": {
"nearDuplicateImage": false,
"nearestImageDistance": 0.21,
"nearestImageSource": "previous_session",
"nonceVerified": true,
"deviceIpChanged": false
},
"timestamp": "2026-06-18T12:02:00.000Z"
}
riskSignals servono alla Sua decisione sul rischio — non modificano mai da soli matched. nonceVerified è true quando il selfie conteneva il valore monouso della sessione; deviceIpChanged è true quando l'IP del dispositivo è cambiato tra /open e il selfie (null quando non può essere confrontato).
Webhook — live_id.enrollment.locked
Si attiva quando un profilo viene bloccato dopo ripetute validazioni fallite.
{
"event": "live_id.enrollment.locked",
"organizationId": "org_…",
"enrollmentId": "lie_…",
"applicantId": "app_…",
"failures": 5,
"lockedUntil": "2026-06-18T12:32:00.000Z",
"timestamp": "2026-06-18T12:02:00.000Z"
}
Vedi Webhook → Verifica della firma.
Errori
| Stato | Codice | Significato |
|---|---|---|
401 | invalid_key / unknown_key / key_mismatch | La chiave di identificazione è alterata, non riconosciuta, oppure i suoi dati non corrispondono. |
403 | key_revoked / key_expired | La chiave è stata revocata oppure è scaduta. |
403 | live_id_disabled | Live ID non è attivo per il tenant. |
402 | verification_unavailable | Quota superata e il wallet non copre l'addebito a consumo (continuazione senza credito disattivata). Il corpo contiene anche error.organization (name, logoUrl); il messaggio non menziona mai la fatturazione, quindi può essere mostrato al Suo utente. |
409 | enrollment_inactive | Il profilo non è registrato (o non lo è più). |
429 | enrollment_locked | Troppe validazioni fallite — riprovi dopo la scadenza del blocco. |
404 | unknown_session | Nessuna sessione per quel token. |
409 | session_consumed | La sessione è già stata usata / è in corso. |
410 | session_expired | Il token di sessione è scaduto prima dell'arrivo del selfie. |
503 | biometric_unconfigured | Il fornitore biometrico del tenant non è configurato. |
Live ID Validation
Aggiunga l'accesso biometrico alla Sua app — confermi un utente di ritorno confrontando un selfie dal vivo con il volto della sua verifica KYC già approvata, e subordini l'accesso a un semplice esito matched true/false.
Onboarding mobile
Incorpori la pagina di acquisizione ospitata di Live ID in un'app nativa — configurazione della WebView e permessi della fotocamera per iOS, Android e .NET MAUI, con app di esempio pronte all'uso.