Event types
Four event types exist:
Each endpoint subscribes to a subset by listing event types when you create or update it. See Configuring endpoints.
Every verification session produces exactly one terminal webhook from the set above — provided at least one of your endpoints subscribes to that event type. If a user withdraws consent (privacy request) after a
succeeded or failed event was queued but before it delivered, the payload is scrubbed and a verification.session.cancelled event is emitted in its place. See verification.session.cancelled for the full reason enumeration.
Delivery semantics
- At-least-once. Kayle retries failed deliveries. Build idempotent handlers — key on
metadata.event_id(one ID per event, never reused) or onmetadata.verification_session_idcombined with the eventtype. - Per-endpoint. A single event triggers one delivery per subscribed endpoint. Disabling or deleting an endpoint does not affect other endpoints.
- Best-effort ordering. Within a session you’ll usually receive events in the order they happened, but a delivery that retries can land after later events. Don’t rely on order; rely on
metadataand the resource state you can fetch from the API. - Sub-minute latency for the first attempt. The first delivery is queued immediately when the event fires and processed by a scheduled job. See Deliveries for the retry schedule.
What you have to handle
Every endpoint must:- Register an encryption key before it can receive deliveries. Webhook payloads are always JWE-encrypted; an endpoint without an active key fails delivery before the body is sent.
- Verify the
X-Kayle-Signatureheader against the encrypted body before decrypting. See Verifying signatures. - Respond with a
2xxstatus code within a few seconds. Anything else is treated as a delivery failure and retried. - Be idempotent on
metadata.event_id(or onmetadata.verification_session_id+ eventtype).
2xx after the automatic retry schedule are marked failed. You can replay or retry them from the dashboard or via the API while the encrypted payload is still retained; see Deliveries.