Architettura
Autenticazione
Intestazione standardx-api-key. Le stesse chiavi sono usate per sessioni ed entità. Vedi autenticazione API.
Invio di una transazione
Endpoint unico:POST /v3/transactions/. Vedi invio delle transazioni per lo schema completo.
Payload minimo:
txnId, txnDate, type, info, applicant, props, travelRule, includeCryptoScreening): il formato wire dell’SDK e il formato snake_case vengono interpretati allo stesso modo.
Modellazione delle parti
Ogni transazione ha unsubject obbligatorio (il tuo cliente, cioè la parte che monitori) e un counterparty facoltativo (l’altra parte). Ciascuno ha il proprio payment_method e un contesto device facoltativo.
Nella risposta, le parti arrivano nell’array parties con i ruoli APPLICANT e COUNTERPARTY; una parte senza vendor_data viene memorizzata come snapshot esterno (kind: EXTERNAL), senza entità collegata.
Vedi payload delle transazioni per i campi delle parti.
Idempotenza
txn_id (il transaction_id che invii) è univoco per applicazione.
Reinviare un transaction_id già esistente restituisce 400 con A transaction with this transaction_id already exists. nel campo transaction_id; quando due richieste identiche arrivano in concorrenza, la seconda riceve 409.
Nessuna delle due risposte restituisce la transazione esistente.
In caso di 400 o 409 per un transaction_id duplicato, cerca la transazione esistente invece di reinviarla: leggila con GET /v3/transactions/{uuid}/ usando l’uuid della prima risposta, oppure usa il transaction_id (l’uuid Didit) che il webhook transaction.created riporta accanto al tuo txn_id.
Genera sempre txn_id dal tuo lato prima dell’invio; non fare affidamento su un ID generato da Didit per l’idempotenza. Usa l’ID del tuo database, un UUID o un hash dei campi della transazione.
Tempo reale vs batch
- Tempo reale: consigliato per la maggior parte dei casi d’uso. Invia la transazione nel momento in cui avviene nel tuo sistema. Le regole vengono valutate in modo sincrono e restituiscono la decisione.
- Batch / backfill: per l’importazione dello storico, passa
txn_datenel passato. Le regole vengono comunque eseguite e possono attivare webhook. Per evitare che le regole si attivino durante il backfill, usa l’importazione CSV della console con il flag “dry ingest”.
Importazione dello storico
Quando stai migrando da un altro sistema di monitoraggio delle transazioni:- Esporta le transazioni storiche in un CSV.
- Usa Transactions → Import history nella console (oppure invia tramite API in un ciclo) con
txn_datenel passato. - Attiva le regole solo dopo il termine dell’importazione, oppure usa dry ingest per saltare la valutazione delle regole.
Webhook
Iscriviti a:transaction.created: ogni transazione inviata.transaction.status.updated: cambi di stato (ad esempio l’analista passa daIN_REVIEWadAPPROVED, oppure un controllo AML asincrono aggiorna il punteggio).
Gestione degli stati
Vedi stati TM.
Collegamento delle transazioni alle entità
Passavendor_data su ogni parte. Vantaggi:
- Ogni transazione confluisce nel profilo Utente o Azienda.
- Le regole di frequenza e quelle comportamentali hanno a disposizione la cronologia completa su cui basare la valutazione.
- Il blocco di un’entità si propaga automaticamente alle transazioni future.
vendor_data non è un errore bloccante: la transazione viene memorizzata come snapshot esterno, ma perdi l’aggregazione a livello di entità.
Sessioni di rimedio
Quando un’azione di una regola sposta una transazione inAWAITING_USER, Didit crea automaticamente una sessione di rimedio, ovvero una normale sessione di verifica ospitata per lo stesso vendor_data.
Le regole personalizzate indicano sempre il workflow direttamente nell’azione; per le regole della libreria integrata, viene utilizzato il workflow di rimedio nelle impostazioni delle transazioni, poi il workflow di Autenticazione biometrica della tua applicazione (quando il soggetto ha un volto di riferimento memorizzato), e infine il workflow predefinito della tua applicazione.
Le transazioni Travel Rule sono escluse da questo ricorso automatico: la loro azione in sospeso è la prova di titolarità del wallet.
La transazione (la risposta, ogni lettura successiva e ogni webhook) riporta la sessione nel blocco canonico action_required:
remediation è mantenuto per compatibilità con le versioni precedenti; action_required è il blocco canonico (include anche le azioni wallet_ownership per i trasferimenti Travel Rule).
Un’azione wallet_ownership non modifica da sola lo stato della transazione: la transazione mantiene lo stato assegnato dalle tue regole, spesso APPROVED, quindi controlla action_required in ogni risposta, non solo quando lo stato è AWAITING_USER.
L’utente completa la verifica: per un workflow di Autenticazione biometrica, un selfie con controllo di vitalità confrontato con il volto acquisito durante l’onboarding KYC originale, il livello di autenticazione rafforzata più elevato per le transazioni di alto valore.
Quando la sessione raggiunge una decisione, la transazione la segue automaticamente: APPROVED (decision_reason_code: user_action_approved), DECLINED (user_action_declined) o IN_REVIEW (user_action_in_review), e viene inviato un webhook transaction.status.updated.
È possibile selezionare qualsiasi tipo di workflow tranne KYB.
I workflow di Autenticazione biometrica (e i workflow in cui il confronto facciale viene eseguito prima della verifica del documento d’identità) richiedono che il soggetto abbia già un volto di riferimento memorizzato da una verifica approvata; gli utenti che non ne hanno uno vengono indirizzati al workflow predefinito della tua applicazione, con una nota sulla transazione che registra la sostituzione.
Best practice
Limiti di frequenza
Vedi limitazione della frequenza. La creazione di transazioni è uno degli endpoint con il più alto throughput; i limiti tipici si attestano nell’ordine delle centinaia di richieste al secondo. Gestisci con cautela i picchi di richieste.Prossimi passi
Transazioni
Riferimento completo del payload.
Regole
Come vengono valutate le regole.
Webhook
Catalogo degli eventi.
Risoluzione dei problemi
Problemi comuni di integrazione.