Events

Webhooks

Send deploy, scaling, and incident events to your own endpoints, signed and retried.

Deliveries
  1. 1→ deploy.succeeded
  2. 2 POST hooks.example.com/deploys
  3. 3 ← 200 OK in 84 ms
  4. 4→ service.scaled
  5. 5 POST hooks.example.com/scale
  6. 6 ← 200 OK in 61 ms

POST /v1/webhooks

Register an endpoint

Choose the events to send and get a signing secret back. The endpoint starts receiving events right away.

  • The URL must use HTTPS
  • Pass event names, or * for every event
  • The secret is shown once
curl https://api.example.com/v1/webhooks \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://hooks.example.com/deploys", "events": ["deploy.succeeded", "deploy.failed"]}'
Response201 Created
{
  "id": "wh_3c81d0",
  "object": "webhook",
  "url": "https://hooks.example.com/deploys",
  "events": ["deploy.succeeded", "deploy.failed"],
  "secret": "whsec_9f4e...",
  "status": "active",
  "created_at": "2026-10-11T09:24:13Z"
}

GET /v1/webhooks/:id/deliveries

List deliveries

See what was sent, what came back, and how long it took. Results are newest first.

  • Filter by status, such as failed
  • Paginate with limit and cursor
  • Kept for 30 days
curl "https://api.example.com/v1/webhooks/wh_3c81d0/deliveries?status=failed&limit=2" \
  -H "Authorization: Bearer $API_TOKEN"
Response200 OK
{
  "object": "list",
  "data": [
    {
      "id": "dlv_81a7",
      "event": "deploy.failed",
      "status": "failed",
      "response_code": 503,
      "attempts": 3,
      "next_retry_at": "2026-10-11T09:40:00Z"
    }
  ],
  "next_cursor": null
}

POST /v1/deliveries/:id/resend

Resend a delivery

Fixed the endpoint? Send the same payload again with a fresh signature.

  • Same event id, so handlers stay idempotent
  • Works on any delivery in the log
  • Returns once the request is queued
curl -X POST https://api.example.com/v1/deliveries/dlv_81a7/resend \
  -H "Authorization: Bearer $API_TOKEN"
Response202 Accepted
{
  "id": "dlv_81a7",
  "object": "delivery",
  "status": "queued",
  "attempts": 4
}

Events you can build on

Every change on the platform can reach your chat, your incident tool, or your own service.

  • Signed payloads

    Each request carries a signature header, so your endpoint can reject anything it did not expect.

  • Automatic retries

    Failed deliveries retry with backoff for 24 hours before the endpoint is paused.

  • Event filters

    Subscribe an endpoint to the events it needs and nothing else.

  • Delivery log

    Inspect every request and response, then resend any delivery in one call.

Event types

Events are named resource.action, so one endpoint can follow a whole area of the platform. The most used ones are deploy.succeeded, deploy.failed, service.scaled, and incident.opened. Each payload includes the workspace, the service, and a link back to the dashboard.

Verifying signatures

Every request includes a Webhook-Signature header: a timestamp and an HMAC of the raw body, made with the endpoint secret. Compare it with your own HMAC and reject requests older than five minutes to block replays.

Retries and ordering

A delivery succeeds when your endpoint answers with a 2xx status within ten seconds. Anything else is retried with backoff for 24 hours. Events can arrive out of order, so use the created_at field and the event id rather than arrival time.

Free tier · No credit card

Push code today. Be live before your coffee cools.

Connect a repository, pick a region, and get a production URL with HTTPS, logs, and autoscaling already switched on.

$ git push origin main

  1. Build34 s
  2. Deploy12 s
  3. Health checks3 s

your-app.example.com

Buy NowTheme Details