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 terminalDocumentation Index
Fetch the complete documentation index at: https://docs.kayle.id/llms.txt
Use this file to discover all available pages before exploring further.
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 thefailed 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:
| Check | Budget |
|---|---|
| MRZ scan | Unlimited (client-side; failures never reach the server) |
| NFC chip read | 3 retries |
| Liveness capture | 3 retries |
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
Always
verification.session.failed.The share-contract version the session was created against.
Unique event ID. Idempotency-key candidate — the same event reuses this ID on retries and replays.
The session that terminalized.
Reason Kayle could not confirm the session. One of:
document_authenticity_faileddocument_active_authentication_faileddocument_chip_authentication_faileddocument_anti_cloning_attestation_faileddocument_data_invalidliveness_failedselfie_face_mismatch
How many NFC chip-read retries (0..3) the session consumed before terminalizing.
How many liveness retries (0..3) the session consumed before terminalizing.