Configure
Destinations
A destination is where events are delivered: an HTTPS URL with its own queue, retries and rate limit.
A destination is the service that should receive events. Ensue keeps a separate queue for every destination, so a slow or failing service never holds up another one.
There are two kinds:
- URL destination. Ensue sends each event to an HTTPS URL as a
POST. This page covers it. - Inbox. Events wait for an agent to pull them. See Inbox and leases.
Create a destination
Open Destinations → New destination, or POST /v1/destinations (reference):
curl -X POST https://api.getensue.com/v1/destinations \
-H "authorization: Bearer ens_<key>" -H "content-type: application/json" \
-d '{
"name": "billing-api",
"url": "https://api.example.com/webhooks/ensue",
"auth_type": "bearer",
"token": "…",
"timeout_ms": 10000,
"max_in_flight": 5
}'
| Field | Notes |
|---|---|
url |
An HTTPS URL. Ensue refuses URLs that would loop back into itself. |
auth_type |
How Ensue authenticates to your service: none, bearer (with token), basic (username, password) or apikey (header, value). Stored secrets are never shown again. |
timeout_ms |
Per-attempt timeout, 1,000 to 30,000. Default 15,000. A timeout counts as a failed attempt. |
max_attempts, retry |
The delivery policy. |
max_in_flight, rate_per_second |
Concurrency and rate caps. |
groups |
Delivery groups: per-tenant rates. |
What your service receives
The request body is the event body, after any transformation. Ensue adds:
| Header | Value |
|---|---|
x-ensue-event-id |
The event ID. The same on every retry. |
idempotency-key |
The event ID again; for a replay, the ID of the event being replayed. |
x-ensue-request-id |
The request the event came from. |
x-ensue-timestamp |
Unix seconds when this attempt was sent. |
x-ensue-signature |
t=<timestamp>,v1=<hex>, an HMAC-SHA256 of "<timestamp>.<body>" with the destination’s signing secret. |
x-ensue-replay-of |
Present on replays. The original event ID. |
Original sender headers are forwarded, except hop-by-hop headers and proxy headers added in transit.
Answering Ensue
| Your response | What Ensue does |
|---|---|
2xx |
The event is delivered. |
429, 503 with Retry-After |
Retries, no sooner than the header says. |
408, 409, 425, 429, 5xx, timeout, network error |
Retries on the schedule. |
Other 4xx |
Fails immediately: a request your service rejected will not succeed on a retry. |
3xx |
Fails. Redirects are never followed. |
Retry-After: -1 or x-ensue-retry: never |
Stops retrying that event at once. |
You can widen or narrow which responses retry with retry.retry_on. See Delivery policy.
Pause, probe and reset
- Pause a destination to hold its events. Nothing is lost and nothing is retried until you resume.
- Probe (
POST /v1/destinations/:id/probe) sends a test request to confirm the URL responds. - A destination that keeps failing is stopped by its circuit breaker; changing its URL resets it.
A destination used by a flow or an active subscription cannot be deleted (409 in_use).