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).

EventFires when
session.createdA session is created — by API, console, or a hosted flow step.
session.startedThe applicant opens the flow and begins verifying.
session.approvedFinal APPROVED decision (automatic or via review).
session.declinedFinal DECLINED decision.
session.completedAny final outcome — fires alongside .approved/.declined so one subscription covers both; branch on data.session.status.
session.in_reviewThe session routed to manual review (a case opens).
session.reviewedAn operator resolved an in-review session; data.review carries the decision and reviewer.
session.abandonedStarted but never finished; TTL elapsed mid-flow.
session.expiredThe link expired before the applicant started.
session.resubmission_requestedAn 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.

EventFires when
module.completedAny 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

EventFires when
aml.hitAML screening confirmed one or more watchlist matches. data.aml = {risk_level, matches, possible_matches, matched_entities[], lists_checked}.
blocklist.hitThe applicant matched a tenant block list entry. data.detail.kind is "value" or "face".
risk.scoredRisk rules produced a score + level for the session.
duplicate.detectedThe 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.

EventFires when
case.createdA manual-review case opens for a session.
case.approvedA reviewer approved the case (final).
case.declinedA reviewer declined the case (final).
case.sent_backA checker returned the case to the maker stage.
case.overdueThe case blew past its SLA and was escalated.

Applicant progress

EventFires when
contact.verifiedThe applicant proved ownership of an email or phone (OTP).
document.uploadedThe applicant submitted an identity document image.

Account

Session-less events (no data.session); never filtered out by workflow_ids.

EventFires when
credits.addedCredits were added; data.credits = {delta, balance, reason}.
credits.lowBalance crossed below the low-water threshold.
credits.exhaustedBalance reached zero — verifications will be blocked.

Getting a sample payload

Three ways, most-real first:

  1. GET /v3/automation/samples/<event>/ — up to three recent real payloads delivered to your endpoints, falling back to the static sample.
  2. The console Connect page's test-fire button — sends the sample through the real signed pipeline to your endpoint.
  3. GET /v3/automation/events/ — the static sample inline in the catalog.