Skip to main content
Emitted when the user runs out of retries for a check that’s blocking confirmation, or when a hard-kill code (such as an anti-cloning attestation failure) terminates the session immediately. The payload carries the terminal failure_code plus the per-check retry counters so you can see which budget exhausted.

When it fires

This event fires once per session, at the moment the session reaches the failed status. Intermediate per-check failures while retries remain are not delivered as webhooks — they appear in the per-org audit log as session.check.failed and stay between the user and the Kayle app. Retry budgets: document_anti_cloning_attestation_failed is a hard-kill code: it terminalizes the session immediately on the first failure regardless of retry counters.

Payload

Fields

string
Always verification.session.failed.
number
The share-contract version the session was created against.
string
Unique event ID. Idempotency-key candidate — the same event reuses this ID on retries and replays.
string
The session that terminalized.
string
Reason Kayle could not confirm the session. One of:
  • document_authenticity_failed
  • document_active_authentication_failed
  • document_chip_authentication_failed
  • document_anti_cloning_attestation_failed
  • document_data_invalid
  • liveness_failed
  • selfie_face_mismatch
Failed-session payloads do not include claims, biometrics, or risk scores.
number
How many NFC chip-read retries (0..3) the session consumed before terminalizing.
number
How many liveness retries (0..3) the session consumed before terminalizing.

Handler outline