Reference
Event catalog
Every Connect event type, when it fires, and what its payload carries.
This is the catalog of events a Connect endpoint (or Zapier trigger / n8n
trigger node) can subscribe to. The machine-readable version — including a
full static sample payload per event — is served by
GET /v3/automation/events/.
Subscriptions accept exact keys, trailing wildcards (session.*, case.*),
or ["*"] for everything. All payloads use the
Connect envelope; the tables below
describe data.
Info
These keys are distinct from the classic tenant webhook's
identity.kyc.session.* / identity.verification.* event names — the two
pipelines coexist. New integrations should prefer Connect endpoints; the
classic pipeline remains for backwards compatibility.
Session lifecycle
data.session carries the standard session envelope (id, status, workflow,
vendor_data, contacts, metadata, risk score/level, hosted url,
timestamps, and the full decision object once terminal).
| Event | Fires when |
|---|---|
session.created | A session is created — by API, console, or a hosted flow step. |
session.started | The applicant opens the flow and begins verifying. |
session.approved | Final APPROVED decision (automatic or via review). |
session.declined | Final DECLINED decision. |
session.completed | Any final outcome — fires alongside .approved/.declined so one subscription covers both; branch on data.session.status. |
session.in_review | The session routed to manual review (a case opens). |
session.reviewed | An operator resolved an in-review session; data.review carries the decision and reviewer. |
session.abandoned | Started but never finished; TTL elapsed mid-flow. |
session.expired | The link expired before the applicant started. |
session.resubmission_requested | An operator asked the applicant to redo part of the verification. |
Warning
session.in_review is not terminal — expect a later session.approved or
session.declined (and session.completed) once an operator decides.
Modules
The granular heart of Connect: one event per module outcome, before the session finishes.
| Event | Fires when |
|---|---|
module.completed | Any single module produced its result. data.module = {feature, node_id, status, score, warnings, data} — e.g. the OCR'd document fields for ID_VERIFICATION, the screening summary for AML_SCREENING. |
Use the endpoint's features filter to scope this to specific modules:
{ "events": ["module.completed"], "features": ["ID_VERIFICATION", "AML_SCREENING"] }Module keys: ID_VERIFICATION, NFC_VERIFICATION, LIVENESS, FACE_MATCH,
AML_SCREENING, IP_ANALYSIS, AGE_ESTIMATION, EMAIL_VERIFICATION,
PHONE_VERIFICATION, INFORMATION, CONFIRM_DETAILS, QUESTIONNAIRE,
DOCUMENT_AI, PROOF_OF_ADDRESS, BUSINESS_DOCUMENT, DATABASE_VALIDATION,
BRANCH_VISIT, VIDEO_CALL, PRODUCT_SELECTION.
Risk & compliance
| Event | Fires when |
|---|---|
aml.hit | AML screening confirmed one or more watchlist matches. data.aml = {risk_level, matches, possible_matches, matched_entities[], lists_checked}. |
blocklist.hit | The applicant matched a tenant block list entry. data.detail.kind is "value" or "face". |
risk.scored | Risk rules produced a score + level for the session. |
duplicate.detected | The same face/identity was seen on a different profile. |
Review cases
data.case carries {id, status, case_type, priority, recommendation, resolution, resolution_reason, assigned_to, due_at, created_at}, alongside
data.session.
| Event | Fires when |
|---|---|
case.created | A manual-review case opens for a session. |
case.approved | A reviewer approved the case (final). |
case.declined | A reviewer declined the case (final). |
case.sent_back | A checker returned the case to the maker stage. |
case.overdue | The case blew past its SLA and was escalated. |
Applicant progress
| Event | Fires when |
|---|---|
contact.verified | The applicant proved ownership of an email or phone (OTP). |
document.uploaded | The applicant submitted an identity document image. |
Account
Session-less events (no data.session); never filtered out by
workflow_ids.
| Event | Fires when |
|---|---|
credits.added | Credits were added; data.credits = {delta, balance, reason}. |
credits.low | Balance crossed below the low-water threshold. |
credits.exhausted | Balance reached zero — verifications will be blocked. |
Getting a sample payload
Three ways, most-real first:
GET /v3/automation/samples/<event>/— up to three recent real payloads delivered to your endpoints, falling back to the static sample.- The console Connect page's test-fire button — sends the sample through the real signed pipeline to your endpoint.
GET /v3/automation/events/— the static sample inline in the catalog.