Skip to main content
This is the fast-path guide to getting webhooks working end-to-end. Reference docs: webhooks overview, event catalog, signature verification.

1. Set up a route

In Node/Express:
Use a raw-body parser on the webhook route. If your framework auto-parses JSON, re-serialization breaks the signature. See local testing for framework-specific setup.

2. Create a subscription

3. Verify signatures

See signature verification for manual implementations in Python, Go, Ruby.

4. Dedupe with event_id

Deliveries can repeat (at-least-once semantics). Always check:
Any fast key-value store works (Redis, Postgres with an index).

5. Ack fast, process async

Respond in < 1 second:
Sly’s delivery timeout is 15s but a slow endpoint triggers exponential backoff and, eventually, auto-pause.

6. Handle specific events

7. Test locally

Two options: Tunnel to localhost with ngrok or Cloudflare Tunnel:
Fire a test delivery from Sly:
See local testing for more.

8. Monitor delivery health

Or check the webhook detail page in the dashboard — it shows the last 100 deliveries with status and response bodies.

9. Recovery after downtime

If you had an outage and missed events, replay them:
See replay.

Checklist before production

  • Webhook URL is HTTPS, not HTTP
  • Route uses a raw-body parser
  • Signatures are verified with timingSafeEqual
  • Event IDs are deduplicated
  • Handler acks in < 1 second, processes async
  • Failures are alerted (monitor webhook.failing event)
  • Webhook secret stored in a secrets manager, not source
  • Rotation procedure documented
  • Replay procedure tested in sandbox