Subscribe
Subscriptions can be managed via the dashboard UI or programmatically
via the Webhook Management API.
Both paths use Supabase JWT authentication (not API keys) and require
the
webhooks:manage permission.- Dashboard → Developer → Webhooks
- Click New subscription
- Enter your HTTPS URL (HTTP is rejected at the DB layer)
- Pick event types from the catalog
- On save, copy the
signing_secret— shown once
call.ended to
your warehouse, another for campaign.paused to your on-call Slack.
Event envelope
Every delivery is a POST with:Expectations for your endpoint
| Requirement | |
|---|---|
| Protocol | HTTPS — http:// URLs are rejected at subscribe time |
| Timeout | Respond within 10s — we cancel the request after that |
| Success | Return 2xx to mark the delivery delivered |
| Temporary failure | Return 408, 429, or 5xx → we retry |
| Permanent failure | Return other 4xx → we dead-letter immediately (no retry) |
| Ordering | None guaranteed — key on event_id for idempotent processing |
Retries
Failed deliveries retry on this schedule (±10% jitter):| Attempt | Delay |
|---|---|
| 1 → 2 | +5s |
| 2 → 3 | +30s |
| 3 → 4 | +3m |
| 4 → 5 | +15m |
| 5 → 6 | +1h |
| 6 → 7 | +6h |
| 7 | DEAD — no more retries |
Troubleshooting
Your dashboard’s Webhooks → Delivery log shows every delivery attempt with HTTP status, response snippet, and duration. If signatures don’t verify on your side, 95% of the time it’s clock skew — see signature verification.Next
- Event catalog — every event + payload shape
- Signature verification — reference verifier implementations
- Troubleshooting — common failures

