Webhooks
Receive real-time notifications when events happen in your app. Signed with HMAC-SHA256.Setup
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | HTTPS endpoint |
event_types | string[] | no | Events to subscribe to. Default: all |
retry_limit | int | no | Retry attempts (0-10). Default: 3 |
description | string | no | Label |
metadata | object | no | Custom metadata |
enabled | bool | no | Default: true |
Payload
Signature verification
TheX-Webhook-Signature header contains a timestamp and HMAC:
Events
Verification events
Pattern:verification.{channel}.{outcome} — channel is email or sms.
| Event | When |
|---|---|
verification.*.requested | Verification sent |
verification.*.verified | Contact confirmed (magic link click, OTP code, or consent approval) |
verification.*.expired | Timed out. Fires even if the link was never opened |
verification.*.failed | OTP max attempts exceeded |
verification.*.denied | Contact denied the action (consent mode) |
verification.*.delivery_failed | SMS/email failed to send (bad number, provider error) |
was_opened: true/false. Consent events add consent_decision and denial_reason. Delivery failures add error and channel.
Auth events
| Event | When |
|---|---|
auth.login.failed | Login attempt failed |
challenge.created | Challenge created (any type) |
challenge.completed | Challenge verified |
challenge.failed | Challenge failed |
User events
| Event | When |
|---|---|
user.created | New user registered |
user.updated | User profile updated |
user.identifier_changed | Email or phone changed |
System events
| Event | When |
|---|---|
webhook.test | Test ping from dashboard |
Managing endpoints
| Action | Method |
|---|---|
| List | GET /v1/apps/{app_id}/webhooks |
| Get | GET /v1/apps/{app_id}/webhooks/{id} |
| Update | PATCH /v1/apps/{app_id}/webhooks/{id} |
| Delete | DELETE /v1/apps/{app_id}/webhooks/{id} |
| Test | POST /v1/apps/{app_id}/webhooks/{id}/test |
| Deliveries | GET /v1/apps/{app_id}/webhooks/{id}/deliveries |
Delivery status
| Status | Meaning |
|---|---|
pending | Queued |
processing | In flight |
delivered | 2xx response |
failed | Will retry if retryable |
Limits
- 10-second timeout per delivery
- Max 10 retries with exponential backoff
- Respond with 2xx within 5 seconds
- 4xx = won’t retry. 5xx = will retry.