Request
Every delivery is an HTTPS POST with these headers:
Your endpoint must respond with a 2xx status within 15 seconds. Anything else, including
a timeout, counts as a failed attempt and is retried.
Body
The four original kinds (
deployment.healthy, deployment.updated, deployment.failed,
and deployment.torn_down) additionally carry the legacy top-level keys (event, ts,
organization, repository, deployment) exactly as the original payload documented them,
so receivers written before per-event selection keep parsing without changes. Treat those
keys as deprecated and read data instead.Verifying signatures
Set a signing secret on the channel and every delivery carries:.:
X-Slipway-Signature: sha256=<hex> header (HMAC-SHA256 over the raw body alone)
is still sent for backwards compatibility, so existing receivers keep working. New receivers
should verify the v1 scheme.
Retries
A failed attempt (non-2xx, timeout, or connection error) is retried on this schedule, with a little jitter:
The final attempt lands roughly 33 hours after the event. If all 8 attempts fail, the
delivery is marked exhausted and the channel is automatically disabled: nothing else
is delivered to it until someone re-enables it. When that happens, slipway notifies your
org’s admins in the in-app inbox and posts a notice to your remaining channels, with a link
to the channel’s settings page.
Because retries and redeliveries reuse the event id, design your receiver to be
idempotent: process each
X-Slipway-Webhook-Id at most once.