Saltar al contingut principal
Transaction Monitoring emet tres esdeveniments de webhook que, junts, cobreixen tot el cicle de vida de la transacció, i un quart opcional que anuncia nous suggeriments de regles. Tots fan servir la infraestructura estàndard de webhooks de Didit amb signatura HMAC-SHA256: consulta la referència de webhooks per a destinacions, signatura i proves.

Catàleg d’esdeveniments

Els esdeveniments a nivell d’entitat (user.status.updated, business.status.updated) també poden activar-se com a conseqüència de l’activitat de transaccions; consulta webhooks d’entitats.
Les aplicacions sandbox no emeten webhooks transaction.created ni transaction.status.updated. Per provar aquests esdeveniments, utilitza una aplicació de producció o API & Webhooks → Try Webhook a la consola. Els intercanvis sandbox de la Travel Rule sí que emeten webhooks travel_rule.status.updated amb environment: sandbox; utilitza el Didit Test VASP per provar un intercanvi abans de passar a producció.

Embolcall

Els webhooks de Didit fan servir un cos pla: els camps de l’esdeveniment es troben al nivell superior, al costat dels camps de l’embolcall, i no hi ha cap objecte data imbricat. Cada lliurament inclou:

Estructures del payload

transaction.created i transaction.status.updated

Tots dos esdeveniments comparteixen un únic payload: un resum compacte més el bloc action_required (o null):
El payload és intencionadament reduït: en rebre’l, obtén el registre complet amb GET /v3/transactions/{transaction_id}/. Retorna el detall complet (parts, rule_runs, provider_results, travel_rule, cost_breakdown, decision_reason_code), inclosa la raó del canvi d’estat.

transaction_rule_suggestions.created

Aquest esdeveniment fa referència al teu conjunt de regles, no a una transacció concreta, així que no porta cap ID de transacció. Mai no conté dades personals: només IDs de suggeriments, tipus, títols i recomptes.
Els camps habituals de l’embolcall (event_id, timestamp, application_id, environment) s’afegeixen al cos.

travel_rule.status.updated

S’activa en cada transició, inclosa la transició a FINISHED, CANCELLED o EXPIRED. Quan una transferència arriba a un d’aquests estats, no s’envia cap més esdeveniment de la Travel Rule per a ella. Un esdeveniment pot repetir l’estat de l’anterior, per exemple quan un reenviament torna a no trobar cap xarxa i la transferència es queda a COUNTERPARTY_VASP_NOT_FOUND. rail és INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP (una transferència sandbox a la qual ha respost el Didit Test VASP, que també porta test_vasp: true i test_vasp_scenario), o "" mentre no s’ha seleccionat cap xarxa (sempre "" en els registres sunrise). Quan es crea una transacció, en un registre sunrise, en una consulta TRP entrant o en el tram entrant de la xarxa INTERNAL, Didit envia primer transaction.created i després els esdeveniments travel_rule.status.updated de la transacció. Una regla que canvia l’estat de la transacció durant aquest pas també pot enviar transaction.status.updated abans de transaction.created. Un registre sunrise que s’adjunta a una transacció de dipòsit que ja has creat no envia cap transaction.created. Cada webhook es lliura i es reintenta de manera independent, així que un esdeveniment reintentat pot arribar després d’un de posterior: fes que el teu gestor es basi en transaction_id i torna a llegir la transacció quan necessitis el seu estat actual.

Exemples de trajectòries d’estat

Aprovació simple

Revisió i aprovació posterior

Verificació reforçada

Transferència de la Travel Rule

Els dos primers esdeveniments provenen de la mateixa sol·licitud, i transaction.created es posa primer a la cua; cada webhook es lliura de manera independent, així que no confiïs en l’ordre d’arribada. Una transferència enviada per TRUST mai no rep un esdeveniment COMPLETED, perquè TRUST no retorna res que Didit pugui llegir: es queda a AWAITING_COUNTERPARTY fins al termini de confirmació i després acaba a EXPIRED. Amb GTR, VerifyVASP i Sygna Bridge, Didit llegeix la resposta de la contrapart des de la xarxa, i l’esdeveniment la segueix.

Verificació de la signatura

Cada lliurament se signa amb HMAC-SHA256 mitjançant el secret compartit de la destinació i inclou tres capçaleres de signatura més una marca de temps:
Consulta la referència de webhooks per al codi de verificació complet, inclosa la comprovació de vigència de la marca de temps.

Reintents i garanties de lliurament

  • Davant d’un 5xx, 404, temps d’espera o error de connexió, Didit reintenta fins a 2 vegades: aproximadament 1 minut després del primer error i, després, aproximadament 4 minuts més.
  • Els lliuraments reintentats reutilitzen el mateix event_id: fes la deduplicació amb aquest camp al teu gestor.
  • Després del darrer error, el lliurament d’aquest esdeveniment s’atura i la teva organització rep una notificació; les destinacions mai no es desactiven en silenci.
  • Respon amb un 2xx de manera ràpida (posa a la cua i després processa): els ACK lents comporten el risc de temps d’espera i de lliuraments duplicats.

Idempotència

Processa cada webhook exactament una vegada desant event_id al teu propi magatzem de deduplicació. Pot passar que el mateix esdeveniment es torni a lliurar si el teu endpoint confirma lentament o es desconnecta a mitja sol·licitud.

Subscripció

Següents passos

Referència de webhooks

Destinacions, signatura, reintents.

Estats

Màquina d’estats completa.

Guia d'integració

Gestió de webhooks en producció.
Darrera modificació el 7 de novembre del 2026