Every change to a User or Business entity emits a webhook so your system can react in real time. Use entity webhooks to sync profile data, propagate blocks to other systems, or trigger downstream compliance flows.Documentation Index
Fetch the complete documentation index at: https://docs.didit.me/llms.txt
Use this file to discover all available pages before exploring further.
Event catalog
| Event | Trigger |
|---|---|
user.status.updated | A User entity’s status changes (ACTIVE ↔ FLAGGED ↔ BLOCKED) |
user.data.updated | A User entity’s profile fields change (name, DOB, portrait, aggregate counters, metadata) |
business.status.updated | A Business entity’s status changes |
business.data.updated | A Business entity’s profile fields change (legal name, registration number, country, counters) |
activity.created | A new activity is logged against an entity (manual action, automated check, note) |
- KYB webhooks — business session events
- Transaction Monitoring webhooks — transaction events
- Webhooks reference — signature verification, retries, destinations
Payload shapes
All entity webhooks share a common envelope:user.status.updated / business.status.updated
Fires on every status change. The reason field tells you why the change happened:
| Reason | Description |
|---|---|
manual | An analyst changed the status from the console |
api | The status was changed via PATCH /v3/users/{vendor_data}/update-status/ |
session_declined | Linked session was declined and auto-block is enabled |
blocklist_match | Entity matched a blocklist entry (face, document, email, phone) |
transaction_rule | A transaction rule action moved the entity to FLAGGED or BLOCKED |
ongoing_monitoring | Periodic AML rescan surfaced a new hit |
user.data.updated / business.data.updated
Fires when profile fields change. The payload includes the full updated entity:
changed_fields to efficiently sync only the fields that changed.
activity.created
Fires whenever an activity record is created about a User or Business entity. Activities form the entity’s timeline — the backend writes one for every material event, across five source categories:
| Source | Examples |
|---|---|
CUSTOMER | End-user actions (profile edits, Key People submissions) |
SYSTEM | Backend automation (status transitions, ongoing-monitoring rescans, threshold triggers) |
VERIFICATION | KYC / KYB session lifecycle (session created, feature finished, decision rendered) |
TRANSACTION | Transaction monitoring events (rule triggers, severity shifts, case openings) |
REVIEW | Console reviewer actions (notes, tag changes, status overrides) |
subject_kind—USER,BUSINESS, orEXTERNAL(a counterparty not registered as one of your entities).subject_vendor_data— the entity’svendor_datawhen applicable.source— one of the five categories above.activity_type— machine-readable type tag (e.g.note_added,status_changed,session_completed,rule_triggered).title/description— human-readable summary; safe to render in your timeline UI.session_id,business_session_id,transaction_id— FK identifiers when the activity is tied to a specific session or transaction.
activity.created to mirror the Didit timeline into your own audit / compliance log, trigger follow-up workflows on specific activity types, or power a customer-facing timeline view.
Delivery, retries, and signing
All entity webhooks follow the standard delivery contract:- Signed with HMAC-SHA256 via the
X-Didit-Signatureheader (secret shared key on your destination). - Retried with exponential backoff on non-2xx responses (1s → 2s → 4s → … up to 5 retries over ~24 hours).
- Idempotent — every webhook has a unique
event_idin the payload; de-dupe on your side.
Subscribing
Subscribe to entity events on a webhook destination via the Management API or Business Console:Next steps
Webhooks reference
Destinations, signatures, retries, and verification.
Create destination
Register a new webhook endpoint.
User operations
Changes that trigger user webhooks.