Event catalog
| Event | When it fires |
|---|---|
transaction.created | A new transaction was created and initial evaluation completed. |
transaction.status.updated | The transaction’s status changed — from asynchronous rule completion, analyst review, remediation session resolution, or provider callbacks. |
user.status.updated, business.status.updated) can also fire as a consequence of transaction activity — see entity webhooks.
Envelope
Payload shapes
transaction.created
Fires synchronously after every POST /v3/transactions/ call.
transaction.status.updated
Fires on every status change after creation.
reason values:
| Reason | Meaning |
|---|---|
rule_async_completed | An async rule (e.g. external AML provider) finished and updated the score. |
analyst_approved / analyst_declined / analyst_cleared | Analyst action in the console. |
remediation_completed | User completed the linked remediation session. |
remediation_failed | User failed the linked remediation session. |
provider_update | A downstream provider returned a new result that flipped status. |
api_patched | Status was patched via console/API. |
Example status journeys
Simple approval
Review-then-approve
Review-then-decline-with-SAR
User remediation
Signature verification
Every webhook is HMAC-SHA256 signed with the destination’s shared secret, sent in theX-Didit-Signature header.
Retries and delivery guarantees
- Non-2xx responses retry with exponential backoff (1s → 2s → 4s → … up to 5 retries).
- Total delivery window ~24 hours.
- Every delivery carries a unique
X-Didit-Deliveryheader but the sameevent_id— de-dupe on your side. - Repeated destination failures auto-disable the destination with an operator alert.
Idempotency
Process each webhook exactly once by storingevent_id in your own dedupe store. Re-delivery of the same event is possible when your endpoint ACKs slowly or disconnects mid-request.
Subscribing
Next steps
Webhooks reference
Destinations, signing, retries.
Statuses
Full state machine.
Integration guide
Handling webhooks in production.