Skip to content
cascadehook.

Outbound webhooks, without the upkeep.

Webhooks,taken care of.

Send events to your customers without building the delivery infrastructure. Signed requests, automatic retries and a record of every attempt are built in.

invoice.paid /webhooks/billingExample delivery
  1. Attempt 1503 Unavailable120 ms
  2. Attempt 2503 Unavailable98 ms
  3. Attempt 3200 OK84 ms

Delivered on attempt 3.

HMAC-signed requests · Every attempt recorded

Behind every delivery

A clear path from event to endpoint.

Queues, retries, signing and delivery logs add up. Cascadehook handles them together, so they stay off your team's to-do list.

  1. Temporary failures get another try.

    Timeouts and retryable errors are rescheduled automatically, and every outcome is recorded.

    1 · now2 · ~15s3 · ~1m later… up to 8

    Backoff includes jitter. Retry-After can extend the wait.

  2. A signature with every request.

    Each webhook is HMAC-signed, so receivers can verify it came from you.

    const key = decodeSecret(signingSecret);
    const id = verifyWebhook(rawBody, req.headers, key);
    // Verify before parsing the request body.
    Verify with the receiver guide
  3. Know what happened. Choose what comes next.

    Inspect each attempt's status and duration, then replay a delivery when the endpoint is ready.

    Explore delivery logs and replay

Your first event is one API call away.

Connect an endpoint.
Publish an event.

Once your endpoint is verified, send an event with your project API key. Cascadehook delivers it to every endpoint subscribed to that event type.

Follow the quickstart
curl -X POST https://YOUR_API_HOST/v1/events \
  -H "Authorization: Bearer YOUR_PROJECT_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: invoice-inv_1024-paid" \
  -d '{
    "type": "invoice.paid",
    "data": { "invoice_id": "inv_1024" }
  }'
202 AcceptedQueued for delivery

Replace the API host and project key with your own.

Make room for your next feature.

Create a project, connect an endpoint and send your first event.

Get started