Register
signing_secret (whsec_…) exactly once. Store it like a password; every later view of the webhook is masked. Subscribe to one event or * for all. The current event catalog is in the Webhook events annexure and is also returned live by GET /v1/webhooks.
Every delivery is signed
Each POST carries:
Verify before you trust:
Sign-check the raw body bytes, before any JSON parsing or re-serialisation. A pretty-printer changes the bytes and the signature stops matching.
Retries and dead-letters
- Transient failures (network, 5xx, 429) retry with backoff up to the attempt cap.
- Permanent failures (any other 4xx) skip retries and dead-letter immediately.
- Exhausted retries dead-letter too.
GET /v1/webhooks/failures and push them again with POST /v1/webhooks/replay. Deliveries can arrive more than once; dedupe on X-ScripX-Delivery.
Receiver rules of thumb
- Return 2xx fast; do the work async. Slow receivers look like failures and get retried.
- Verify the signature, then dedupe on the delivery id.
- Treat the event as a hint and re-read the resource for authoritative state.
Related
- Webhook events, the catalog and payload conventions.
- Errors, API-side error semantics.