Skip to main content
Webhooks let Sly push event notifications to your application — transfers completing, streams alerting, approvals being requested. Don’t poll; subscribe.

When to use webhooks vs. SSE

See persistent SSE for the agent-oriented alternative.

Create a subscription

Response:
Save the secret — you need it to verify signatures. It’s shown once.

Delivery shape

Every delivery is a POST with JSON body:
Headers include:
  • X-Sly-Signature: t=...,v1=... — HMAC signature (verify it)
  • X-Sly-Event-Id: evt_... — stable ID for idempotency
  • X-Sly-Delivery-Id: del_... — unique per delivery attempt
  • X-Sly-Webhook-Id: wh_... — which subscription

Expected response

  • 2xx — treated as success; no retry
  • Any other status or timeout → retry with exponential backoff
Respond fast. Sly’s timeout is 10 seconds; if your processing takes longer, ack immediately and process async:

Retries

Failed deliveries retry on this schedule:
Up to 5 attempts total. After the final attempt, the delivery moves to a dead-letter queue (DLQ). Subscribe to webhook.dlq to be alerted when deliveries land there, or use replay to retry from the DLQ manually. Each retry includes the same X-Sly-Event-Id — use it for idempotency.

Delivery states

Idempotency on your side

Webhook delivery is at-least-once. Always dedupe:
Keep a TTL index on processedEvents (24-48 hours is plenty).

Next steps

Event catalog

Full list of events you can subscribe to.

Signature verification

How to verify webhooks are actually from Sly.

Replay

Re-send past events during incident recovery.

Local testing

ngrok, webhook.sly.ai, tunnel setup.