Dispatch For webhooks you send →

Reliable webhooks
for your customers.

Add signed, retried webhooks to your product with one API call.

Your appEnsueDestinations
Your apporder.shipped
Ensue
Webhookssigned HTTPS
AI agentsinbox · MCP
Amazon SQSqueue
Google Pub/Subtopic
How it works

One call reaches
every endpoint.

You describe your events once. Your customers subscribe their endpoints. Each event you send fans out to the right ones.

01 · Event types

A catalog of what you send

Name each event, give it a JSON Schema and an example, and version it as it changes.

order.shippedv2 · schema
02 · Customers

Endpoints per customer

Use your own customer IDs. Each endpoint picks the event types it wants and gets its own signing secret.

acme · https://acme.com/hooksorder.*
03 · Send

Post once, fan out

One call creates a delivery for every subscribed endpoint. Each one is signed, retried and logged on its own.

POST /v1/dispatch/events3 deliveries
Developers

Easy to send.
Easy to verify.

Plain HTTPS with a workspace key. Your customers verify with any Standard Webhooks or Svix library they already use.

01

Validated on the way in

If the payload doesn't match the event type's schema you get a 422 with the errors, and nothing is sent.

02

Safe to retry

Send the same idempotency key within 24 hours and you get the original message back, not a second one.

03

Stable IDs

webhook-id stays the same across retries, so receivers can drop repeats.

curl https://api.getensue.com/v1/dispatch/events \
  -H "Authorization: Bearer ens_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "order.shipped",
    "customer": "acme",
    "idempotency_key": "ship_8812",
    "data": { "order_id": "ord_8812", "carrier": "dhl" }
  }'
202{ "id": "msg_4c8d…", "deliveries": 3 }
Dispatch

Everything your
customers need.

Signing, retries and history from the first event you send.

An event catalog with schemas

Every event type has versions, a JSON Schema and an example payload. Deprecate old ones without breaking anyone, and see who subscribes to what.

order.created · v312 subscribers · 4,210 sent today
order.shipped · v29 subscribers · 1,877 sent today
invoice.paid · v1deprecated

Standard Webhooks signatures

Every delivery is signed over its ID, timestamp and body with a per-endpoint whsec_ secret.

webhook-id: msg_4c8d…
webhook-timestamp: 1793001600
webhook-signature: v1,K5oZ…

Secret rotation without downtime

Rotate an endpoint's secret and the old one keeps signing alongside it for 24 hours while the customer switches over.

whsec_…newsigning
whsec_…oldalso signing · 23h left

Targeted fan-out

Send to every subscriber, to one customer's endpoints, or to a single endpoint.

customer: acme2 endpoints
no customerall 9

Retries that listen

The same delivery engine as Gateway: backoff, Retry-After and a circuit breaker per endpoint.

attempt 1 · 500retry
attempt 2 · 200delivered

Recover after an outage

A customer was down all weekend? Resend everything that failed to their endpoint since Friday.

recover since Fri 18:00212 resent

Your customer IDs, not ours

Create or update a customer with a single PUT on your own ID, at sign-up or on first send. You never store an Ensue ID.

PUT /v1/dispatch/customers/acme201

One history for you and them

Every delivery, attempt and response sits next to your Gateway traffic, filtered by customer or event type. Retry one, or replay a message to every endpoint.

acme · order.shipped · 3 attemptsdelivered
globex · order.shipped · 1 attemptdelivered

A portal for your customers Soon

Send a customer a signed link, or embed it in your settings page. They add endpoints, pick event types, read the catalog, see their deliveries, retry, rotate secrets and send test events, under your logo and on your domain.

EndpointsSubscriptionsCatalog with examplesDelivery logRetryRotate secretTest eventsYour brandingYour domain

Start sending webhooks.

Receiving webhooks from Stripe or GitHub? See Gateway.