Vai al contenuto principale
Transaction Monitoring invia tre eventi webhook che coprono l’intero ciclo di vita della transazione, più un quarto facoltativo che segnala nuovi suggerimenti di regole. Tutti viaggiano sull’infrastruttura webhook standard di Didit con firma HMAC-SHA256. Consulta il riferimento webhook per destinazioni, firma e test.

Catalogo degli eventi

Gli eventi a livello di entità (user.status.updated, business.status.updated) possono anche essere inviati come conseguenza dell’attività sulle transazioni: vedi webhook delle entità.
Le applicazioni sandbox non inviano webhook transaction.created o transaction.status.updated. Per testare questi eventi, usa un’applicazione di produzione oppure API & Webhooks → Try Webhook nella console. Gli scambi Travel Rule in sandbox inviano webhook travel_rule.status.updated con environment: sandbox; usa il Didit Test VASP per testare uno scambio prima di andare in produzione.

Busta

I webhook di Didit usano un corpo piatto: i campi dell’evento si trovano al primo livello, accanto ai campi della busta, e non esiste un oggetto data annidato. Ogni consegna contiene:

Strutture del payload

transaction.created e transaction.status.updated

Entrambi gli eventi condividono un unico payload: un riepilogo sintetico più il blocco action_required (oppure null):
Il payload è volutamente essenziale: alla ricezione, recupera il record completo con GET /v3/transactions/{transaction_id}/. La risposta contiene il dettaglio completo (parti, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), incluso il motivo della variazione di stato.

transaction_rule_suggestions.created

Questo evento riguarda il tuo insieme di regole, non una singola transazione, quindi non contiene un ID di transazione. Non contiene mai dati personali: solo ID dei suggerimenti, tipi, titoli e conteggi.
I consueti campi della busta (event_id, timestamp, application_id, environment) vengono aggiunti al corpo.

travel_rule.status.updated

Viene inviato a ogni transizione, compresa quella verso FINISHED, CANCELLED o EXPIRED; una volta che un trasferimento raggiunge uno di questi stati, non vengono più inviati eventi Travel Rule per esso. Un evento può ripetere lo stato del precedente, ad esempio quando un nuovo invio non trova di nuovo alcun canale e il trasferimento resta in COUNTERPARTY_VASP_NOT_FOUND. rail può essere INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (un trasferimento in sandbox a cui ha risposto il Didit Test VASP, che riporta anche test_vasp: true e test_vasp_scenario), oppure "" finché non è selezionato alcun canale (sempre "" nelle registrazioni sunrise). Alla creazione di una transazione, di una registrazione sunrise, di una richiesta TRP in entrata o della componente in entrata sul canale INTERNAL, Didit invia prima transaction.created e, dopo, gli eventi travel_rule.status.updated della transazione. Una regola che modifica lo stato della transazione durante questo passaggio può anche inviare transaction.status.updated prima di transaction.created. Una registrazione sunrise che si collega a una transazione di deposito già creata da te non invia alcun transaction.created. Ogni webhook viene consegnato e riprovato in modo indipendente, quindi un evento riprovato può arrivare dopo uno successivo: usa transaction_id come chiave nel tuo gestore e rileggi la transazione quando ti serve lo stato attuale.

Esempi di percorsi di stato

Approvazione semplice

Revisione e poi approvazione

Verifica rafforzata (con passaggio aggiuntivo)

Trasferimento Travel Rule

I primi due eventi provengono dalla stessa richiesta, e transaction.created viene messo in coda per primo; ogni webhook viene consegnato in modo indipendente, quindi non fare affidamento sull’ordine di arrivo. Un trasferimento inviato tramite TRUST non riceve mai un evento COMPLETED, perché TRUST non restituisce nulla che Didit possa leggere: il trasferimento resta in AWAITING_COUNTERPARTY fino alla scadenza per la conferma e poi termina in EXPIRED. Con GTR, VerifyVASP e Sygna Bridge, Didit legge la risposta della controparte dalla rete e l’evento segue quella risposta.

Verifica della firma

Ogni consegna è firmata con HMAC-SHA256 usando il segreto condiviso della destinazione e include tre intestazioni di firma più un timestamp:
Consulta il riferimento webhook per il codice di verifica completo, incluso il controllo della validità temporale del timestamp.

Nuovi tentativi e garanzie di consegna

  • In caso di 5xx, 404, timeout o errore di connessione, Didit ritenta fino a 2 volte: circa 1 minuto dopo il primo errore, poi altri 4 minuti circa dopo.
  • Le consegne ritentate riutilizzano lo stesso event_id: usalo per deduplicare nel tuo gestore.
  • Dopo l’ultimo errore, la consegna di quell’evento si interrompe e la tua organizzazione viene notificata; le destinazioni non vengono mai disattivate in silenzio.
  • Restituisci un 2xx rapidamente (accoda, poi elabora): ACK lenti rischiano timeout e consegne duplicate.

Idempotenza

Elabora ogni webhook esattamente una volta memorizzando event_id nel tuo archivio di deduplica. La riconsegna dello stesso evento è possibile quando il tuo endpoint invia l’ACK lentamente o si disconnette a metà di una richiesta.

Sottoscrizione

Passaggi successivi

Riferimento webhook

Destinazioni webhook, firma, nuovi tentativi.

Stati

Macchina a stati completa.

Guida all'integrazione

Gestione dei webhook in produzione.
Ultima modifica il 7 novembre 2026