Headers (every delivery)
| Header | Description |
|---|---|
X-UIP-Event | Event name (e.g. step.completed) |
X-UIP-Timestamp | Unix seconds when signed |
X-UIP-Signature | HMAC-SHA256(webhook_secret, "{timestamp}.{raw_body}"), hex |
X-UIP-Delivery-Id | Stable per-event id — dedupe on this |
{ "event": "...", "data": { ... } }, and data always echoes
session_id, plus your client_reference_id and metadata when set.
step.completed
Fires once per step, in order, the moment it verifies. The result fields depend on
the step’s primitive.
Zero-based index of the completed step.
The step’s primitive.
Id of this step’s audit record — fetch the proof via
GET /v1/audits/{id}.identify only — the disclosed blocks.age_verify only — the threshold result. The birth date is never included.age_verify only — the threshold that was checked.sign/light_sign only — the device signature.sign/light_sign only — the hash that was signed.session.completed
All steps verified.
session.stopped
You ended the session at a gate via stop.
session.failed
A step failed verification, funds ran out, or an internal error occurred.
e.g. a verification error message,
insufficient_funds, or internal_error.