Webhook events
The event catalogue, and which ones you actually need to subscribe to
Subscribe only to what you act on. Most integrations need exactly one event, and adding the rest mainly adds traffic you then have to filter.
Verification lifecycle
| Event | When it fires |
|---|---|
verification.created | A verification was created. |
verification.pending | The session is waiting on the user. |
verification.awaiting_service | Submissions are in and the checks are queued. |
verification.completed | The verification reached a terminal state. Fires for every outcome. |
verification.approved | The verdict is approve. |
verification.rejected | The verdict is reject. |
verification.review | The verdict is review and a human needs to look at it. |
verification.expired | The user never completed the session in time. |
verification.completed fires alongside the verdict-specific event, so a single subscription to it
covers all three outcomes and you branch on data.status yourself. Subscribing to both
verification.completed and verification.approved means you receive two events for the same
approval, which is fine as long as your handler is idempotent.
The one-event integration
If you only want to subscribe to a single event, choose verification.completed and switch on
data.status.
Checks
| Event | When it fires |
|---|---|
check.completed | An individual check inside a verification finished. |
Useful for progress indicators and for internal analytics on which step people fail. Do not build your access decision on it, because an individual check result is not the verdict.
Screening
| Event | When it fires |
|---|---|
aml.case.created | A screening check opened a case that needs attention. |
aml.case.updated | An existing case changed. |
Fraud network
| Event | When it fires |
|---|---|
fraud_network.created | A cross-merchant fraud signal was raised. |
fraud_network.modified | An existing signal changed. |
These payloads deliberately carry no personal data. They tell you that a signal exists against a verification you own, not who else was involved.
Review actions
| Event | When it fires |
|---|---|
action.reviewed | A reviewer reached a decision. |
action.on_hold | A case was put on hold. |
action.pending | A case is waiting on a reviewer. |
These use the fast retry ladder because a person is waiting on the outcome.
Payload shape
Every event has the same envelope: an event id, the event name, a createdAt timestamp and a
data object whose contents depend on the event. See Webhooks for the envelope
and signature verification.
Adding events
The catalogue is additive. New event types can appear, and new fields can appear inside data, so
ignore events you do not recognise instead of failing on them, and do not use a strict object mapper
that throws on unknown properties.