POST /v3/transactions/ e GET /v3/transactions/{transaction_id}/. Entrambi gli endpoint restituiscono lo stesso oggetto TransactionDetail; il riferimento API riporta lo schema campo per campo, mentre questa pagina ne illustra la struttura.
Struttura di primo livello
uuid è l’identificatore stabile di Didit e va indicato nel percorso di GET /v3/transactions/{transaction_id}/; txn_id è il transaction_id che hai fornito al momento della creazione. transaction_number è il numero sequenziale, valido nell’ambito dell’applicazione, che la console mostra.
Il soggetto e la controparte che hai inviato non compaiono come chiavi di primo livello. Sono le voci dell’array parties, distinte dal campo role, mentre vendor_data di primo livello è una copia di comodo del vendor_data dell’utente.
Campi principali
Campi finanziari
amount/currency: importo della transazione così come inviato.amountè una stringa decimale senza zeri finali ("1500","0.5"), con fino a 18 cifre decimali.currency_type:fiatocrypto, come inviato incurrency_kind;nullse omesso.amount_in_default_currency/default_currency_code: l’importo già convertito che hai fornito nella richiesta, restituito così com’è;nullse non lo hai inviato.preferred_currency_amount/preferred_currency_code:amountconvertito nella valuta preferita della tua applicazione.nullquando non è disponibile un tasso di cambio percurrencye non hai inviatoamount_in_default_currency.payment_details/payment_txn_id: il riferimento di pagamento in testo libero e il riferimento esterno del pagamento (ad esempio un hash di transazione blockchain) presenti nella richiesta.
Campi di stato
status:APPROVED,IN_REVIEW,DECLINED,AWAITING_USER. Le transazioni vengono create comeAPPROVED; le regole possono cambiarle in modo sincrono.score: punteggio di rischio intero accumulato dalle regole. Un valore più alto indica un rischio maggiore.severity:UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL, oppurenullfinché una regola o un provider non lo imposta.decision_reason_code/decision_reason_label: motivo strutturato e motivo leggibile dello stato attuale.environment:liveosandbox, in base all’applicazione a cui appartiene la transazione. Una transazionesandboxviene memorizzata ma non viene mai valutata, quindi il suorule_runsvuoto significa “non valutata” e non “nessuna corrispondenza”. Vedi Monitoraggio delle transazioni in sandbox.source:LIVEper le transazioni inviate tramite API o SDK,IMPORTEDper le transazioni caricate tramite importazione CSV dalla console.
Parti
Ogni parte della transazione è una voce diparties. L’endpoint di creazione registra il soggetto come APPLICANT e la controparte facoltativa come COUNTERPARTY; l’enum role include anche REMITTER e BENEFICIARY. Tutte le voci hanno la stessa struttura.
role:APPLICANT,COUNTERPARTY,REMITTER,BENEFICIARY. Filtra su questo campo per trovare il soggetto.entity_type:individual,company,external,unhostedWallet, come inviato.kind:USERoBUSINESSquando la parte è collegata a un utente o a un’azienda di Didit tramitevendor_data;EXTERNALin caso contrario.country_code/dob: dal campoaddress.countrye dadate_of_birthinviati.address/institution_info: gli oggetti così come inviati;{}se omessi.external_party_snapshot: copia congelata dei dati della parte per le partiEXTERNAL;nullfinché la parte è collegata a un utente o a un’azienda di Didit.
device
device è il device_context che hai inviato per quella parte, normalizzato in snake_case, con l’arricchimento IP lato server. È {} quando la richiesta non conteneva alcun contesto del dispositivo, quindi tratta sempre ogni chiave come facoltativa.
Non esiste un oggetto di arricchimento separato. Quando la parte include un
network_context.ip_address pubblico, Didit lo risolve direttamente e scrive i campi arricchiti nello stesso oggetto network_context, compilando solo le chiavi che non hai fornito. Le chiavi per cui il resolver ha restituito valori vuoti vengono omesse, quindi un network_context completamente arricchito contiene le quattro chiavi inviate (ip_address, ip_country_code, latitude, longitude) più quelle tra ip_country, ip_state, ip_city, isp, organization, is_vpn_or_tor, is_data_center, time_zone, time_zone_offset, asn_number, asn_organization, connection_type, carrier e proxy_type che sono state risolte. is_vpn_or_tor e is_data_center sono sempre presenti dopo una risoluzione riuscita.
L’arricchimento viene saltato e network_context viene restituito esattamente come inviato quando l’IP manca o non è instradabile, quando l’applicazione è in sandbox o quando la risoluzione non è riuscita. ip_country_code è un codice ISO 3166-1 alpha-2 quando Didit lo ha risolto, altrimenti è il valore che hai inviato; le condizioni delle regole normalizzano entrambe le forme prima del confronto.
Metodi di pagamento
role:SOURCE,DESTINATION,FUNDING,BENEFICIARY. L’endpoint di creazione assegnaSOURCE/DESTINATIONin base adirection: in una transazione in uscita il metodo del soggetto èSOURCEe quello della controparte èDESTINATION; in una transazione in entrata è l’inverso.payment_method_type:bank_card,bank_account,e_wallet,crypto_wallet,unhosted_wallet,other.fingerprint: SHA-256 calcolato sutype:account_id:issuing_country, stabile tra le transazioni, così puoi correlare il riutilizzo dello stesso strumento.nullquando non è stato inviato alcunaccount_id.owner_kind/vendor_data/owner_name: chi è il proprietario dello strumento, con la stessa convenzioneUSER/BUSINESS/EXTERNALusata per le parti.details: l’oggettopayment_methodgrezzo così come inviato.
Esecuzioni delle regole
rule: UUID della regola eseguita;rule_title,rule_description,rule_categoryvengono copiati da essa.matched: un’esecuzione viene registrata solo quando le condizioni della regola sono soddisfatte, quindi le valutazioni live riportano semprematched: true. Le regole valutate senza corrispondenza non lasciano alcuna voce. I dati di esempio possono includere righe conmatched: false.is_test/mode:trueeTESTquando la regola è stata eseguita in modalità test; un’esecuzione di test viene registrata ma non ha effetti sustatus,scoreoseverity.score_delta/status_target/severity: il contributo di questa esecuzione.status_targetviene impostato quando è stata eseguita un’azionechange_statusoppure quando il punteggio aggiunto ha superato una soglia.action_summary: riepilogo testuale delle azioni eseguite dalla regola, unite con;(score +30,change_status:IN_REVIEW,add_tag:<name>,add_note,add_to_list,open_case);nullquando la regola non ha eseguito alcuna azione.metadata: il dettaglio della valutazione:scope_match, piùconditions[]eaggregations[]. Le due liste usano chiavi di valore diverse:conditions[]: una voce per condizione, confield,operator,expected_value, ilcurrent_valueletto dalla transazione,matched,group_indexegroup_logic.field_sourceè semprenullnelle esecuzioni delle regole sulle transazioni; viene classificato solo per gli eventi di monitoraggio.aggregations[]: una voce per ogni aggregazione di frequenza, conteggio o somma, conmetric,field,operator,expected_value, ilcomputed_valuerisultante dalla valutazione dell’aggregazione,window,filters,matchedesample_references. Le aggregazioni che possono essere calcolate solo in modo asincrono riportanocomputed_value: nulledeferred: true.
Alert
alerts è oggi sempre un array vuoto.
Un alert aperto corrisponde a una transazione trattenuta, quindi leggi invece status (IN_REVIEW o AWAITING_USER). Vedi Alert.
Attività
Il registro delle attività della transazione: creazione, note, revisioni manuali e modifiche di stato.TRANSACTION_NOTE_ADDED; non esiste un array notes separato.
Documenti
File allegati alla transazione dalla console.[] se non ce ne sono.
file_url è un URL firmato a breve scadenza; recuperalo quando ti serve invece di memorizzarlo.
Risultati dei provider
Output di provider esterni (screening dell’hash della transazione, screening dei wallet, monitoraggio fiat, screening delle sanzioni).result_type: FIAT_MONITORING, WALLET_SCREENING, TRANSACTION_SCREENING, TRAVEL_RULE, NETWORK_GRAPH, CUSTOM.
payload.risk_factors è la spiegazione ordinata di score: indica cosa ha prodotto il verdetto, prima i fattori ad alto rischio e poi in base al valore trasferito. Un score alto senza alcuna voce is_high_risk significa che il provider ha valutato l’entità con il proprio modello di esposizione senza segnalare una corrispondenza con sanzioni o con un’entità attribuita; summary lo dichiara esplicitamente. Riferimento campo per campo: Fattori di rischio. I risultati sottoposti a screening prima dell’introduzione di questo campo non includono la chiave.
Per lo screening crittografico dell’hash delle transazioni, transaction_flows è popolato quando è disponibile l’arricchimento on-chain. Normalizza l’attività della catena in modo che la console possa mostrare sia la panoramica della transazione sia il grafo di visualizzazione a partire dallo stesso payload di risposta.
Fonti di arricchimento supportate:
- Le catene EVM usano Blockscout per normalizzare la transazione principale, le chiamate interne e i trasferimenti di token.
- Bitcoin usa mempool.space per normalizzare input e output della transazione.
- Solana usa Helius per normalizzare i trasferimenti nativi di SOL, i trasferimenti di token SPL e il contesto disponibile per gli eventi NFT.
transaction_flows[] include campi normalizzati stabili (flow_type, from_address, to_address, amount, amount_usd, currency, token_name, token_address, transaction_hash, block_timestamp, index, success) più metadata specifici del provider.
Esempi comuni di metadata:
metadata può contenere campi aggiuntivi e varia in base al provider. Non costruire integrazioni critiche che richiedano la presenza di ogni chiave per ogni catena.
Travel Rule
null quando la transazione non ha alcun trasferimento o controllo Travel Rule. Viene popolato quando invii travel_rule_details, e anche quando Travel Rule è abilitata per l’applicazione e la transazione è stata creata con transaction_category: "travelRule": in tal caso Didit avvia lo scambio autonomamente, con o senza travel_rule_details, e ne riporta qui lo status. Leggi questo campo invece della richiesta che hai inviato.
Su un trasferimento in entrata, i dati originator_data e beneficiary_data della controparte restano mascherati (data_masked: true) finché non viene confermata la proprietà del wallet (vedi Dati della controparte mascherati).
direction, rail, counterparty_vasp, delivery, discovery, reason e next_actions hanno la stessa struttura dell’endpoint dei trasferimenti.
reason e next_actions indicano perché un trasferimento con COUNTERPARTY_VASP_NOT_FOUND o COUNTERPARTY_VASP_NOT_REACHABLE è bloccato e cosa lo fa proseguire; valgono "" e [] per qualsiasi altro stato: vedi Perché un trasferimento è bloccato.
Ogni riga di GET /v3/transactions/ contiene lo stesso blocco.
Vedi Travel Rule.
Snapshot della rete
Il grafo memorizzato stesso, non un riferimento ad esso. Proviene da una delle due fonti:- un
network_snapshotche hai inviato con la transazione, oppure - il grafo che Didit costruisce quando lo Screening AML dei wallet va a buon fine per una transazione crypto, anche se la richiesta non conteneva alcun
network_snapshot. Un grafo costruito dallo screening sostituisce quello inviato, e un nuovo screening asincrono lo aggiorna.
null quando non esiste nessuno dei due:
Tag, metadata, props
tags[]: tag associati (tramite un’azione di una regola o da un analista):{ "uuid", "name", "color", "description", "source" }, dovesourceèdiditper un tag predefinito ecustomper uno dei tuoi.metadata: uno snapshot dei payloadsubjectecounterpartyesattamente come li hai inviati al momento della creazione, sotto queste due chiavi.props: icustom_propertiesforniti al momento della creazione. Ogni chiave è indirizzabile nelle condizioni delle regole comecustom_values.<key>.
Rimedio
Quando una regola attivaAWAITING_USER, Didit crea la sessione di verifica collegata e la restituisce in due campi:
remediation: la sessione collegata:{ "session_id", "session_token", "url", "status" }. Resta popolato per tutta la durata della transazione, così puoi sempre vedere come si è conclusa l’azione dell’utente.action_required: l’azione che l’utente deve compiere ora, oppurenullquando non c’è nulla in sospeso:{ "type": "verification_session", "url", "session_id", "session_token", "status" }. Reindirizza l’utente aurl, oppure passasession_tokena un SDK di Didit. Le azioni relative all’assetto proprietario del wallet della Travel Rule usano{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }e hanno la precedenza quando potrebbero applicarsi entrambe. Quando un’azione relativa all’assetto proprietario del wallet è in sospeso e la controparte del trasferimento non è stata trovata, lo stesso blocco contiene anchereasonenext_actions(vedi individuazione della controparte).
transaction.created e transaction.status.updated (action_required): vedi webhook.
Dettaglio dei costi
null finché non viene eseguita una funzionalità fatturabile per la transazione. Altrimenti { "total_price", "items": [ { "usage_type", "price", "details" } ] }, con un elemento per ogni funzionalità a consumo (screening, arricchimento e così via).
Conversione di valuta
preferred_currency_amount è amount convertito nella valuta preferita della tua applicazione, ai tassi di cambio medi di mercato, a meno che tu non abbia fornito amount_in_default_currency; in tal caso viene usato così com’è quel valore già convertito. Le condizioni delle regole su amount confrontano l’importo nella valuta originale; usa preferred_currency_amount nelle condizioni quando ti serve un’unica soglia valida per valute diverse.
Prossimi passi
Invia transazioni
Schema completo della richiesta.
Stati
Il significato di ciascuno stato.
Punteggio di rischio
Come viene calcolato il punteggio.