# Dispatch overview

Send webhooks to your own customers, with signing, retries, fan-out and a delivery history.

Gateway receives webhooks other services send to you. **Dispatch is the other direction:** your application sends webhooks to your customers, the way Stripe or Shopify do. You post one event to Ensue. Ensue works out which customer endpoints want it, signs it, delivers it, retries it, and shows you the history.

```text
your app ──POST /v1/dispatch/events──▶ Ensue ──┬─▶ endpoint A (customer 1)
                                               ├─▶ endpoint B (customer 1)
                                               └─▶ endpoint C (customer 2)
```

Building webhook delivery yourself means queues, retries with backoff, signing, secret rotation, an event catalog, per-customer endpoints and a way to debug "I didn't get your webhook". Dispatch is all of that, behind one API call.

## Core concepts

| Concept | What it is |
|---|---|
| **[Event type](/dispatch/event-types/)** | An entry in your catalog, such as `order.shipped`, with a description and versioned JSON Schemas. |
| **[Customer](/dispatch/customers/)** | One of your customers (a tenant). You identify them with your own ID, so you never store ours. |
| **[Endpoint](/dispatch/endpoints/)** | A URL a customer receives webhooks on. It subscribes to event types and has its own signing secret. |
| **Message** | One event you sent: its type, data, customer and optional idempotency key. |
| **Delivery** | A message going to one endpoint, with its own status and attempt history. |

One message produces one delivery per matching endpoint. Each delivery succeeds, retries and fails on its own, so one customer's broken server never delays another's.

## What Dispatch handles

- **Fan-out.** One call reaches every endpoint subscribed to the event type, for one customer or for all of them.
- **Validation.** Payloads are checked against the event type's JSON Schema before anything is sent.
- **Signing.** Every delivery is signed with the [Standard Webhooks](https://www.standardwebhooks.com) scheme, so your customers can verify with any open-source library. See [Verify signatures](/dispatch/verify-signatures/).
- **Retries.** Failed deliveries retry with backoff and `Retry-After`, with a [circuit breaker](/gateway/circuit-breaker/) for endpoints that stay down. See [Retries and recovery](/dispatch/retries-and-recovery/).
- **Idempotency.** An idempotency key makes your own retries safe.
- **History.** Every message, delivery and attempt is searchable. See [Monitor deliveries](/dispatch/monitor-deliveries/).

Dispatch uses the same delivery engine as Gateway, so retries, backoff, rate limits, quotas and the Events page behave the same way for both.

## How it fits together

| Gateway | Dispatch |
|---|---|
| Source | The send API (`POST /v1/dispatch/events`) |
| Flow | An endpoint's event type subscription |
| Destination | An endpoint (a customer's URL) |
| `x-ensue-signature` | Standard Webhooks headers |

## Next steps

1. Follow the [Quickstart](/dispatch/quickstart/): create an event type, a customer and an endpoint, and send your first message.
2. Read [Send events](/dispatch/send-events/) for targeting and idempotency.
3. Tell your customers how to [verify signatures](/dispatch/verify-signatures/).