Replay
Send a settled delivery again, or recover every dead delivery of an endpoint after an outage.
A replay sends a delivery again under the same webhook-id, so your receiver recognises it as a
repeat of a delivery it may already have processed, not as a new event. Every replayed request
carries the header tanitar-replay: true.
Replays are started from the dashboard's delivery log by an administrator of your organization
(org:admin). The dashboard calls the routes below with the administrator's session; they do not
accept an API key. See Webhooks in the dashboard.
Replay one delivery
POST /dashboard/v1/webhooks/deliveries/:deliveryId/replay reopens one delivery. It is accepted
when:
- the delivery is settled:
deliveredordead. Apendingdelivery is refused with409 WEBHOOK_DELIVERY_IN_FLIGHT; - the delivery has been replayed fewer than 10 times. The eleventh replay is refused with
409 WEBHOOK_REPLAY_LIMIT; - its endpoint is
active. Otherwise409 WEBHOOK_ENDPOINT_INACTIVE.
The response has responseType ACCEPTED and data { deliveryId, cycle, status: "pending" }.
Replay every dead delivery of an endpoint
POST /dashboard/v1/webhooks/endpoints/:endpointId/replay-dead reopens the endpoint's dead
deliveries, oldest first, in one request:
{ "limit": 200 }limit is optional, from 1 to 500, and defaults to 500. At most that many dead deliveries are
considered; any that already reached the limit of 10 replays is skipped but still counts toward
limit. The endpoint must be
active (409 WEBHOOK_ENDPOINT_INACTIVE otherwise). The response has responseType ACCEPTED and
data { endpointId, accepted }, where accepted lists the delivery ids that were reopened. Repeat
the request until accepted is empty to drain a larger backlog.
What a replay does
- The delivery goes back to
pendingin a new cycle, and its replay count increases by one. - The first attempt of the new cycle is sent immediately, with
tanitar-delivery-attempt: 1andtanitar-replay: true. - If it fails, the new cycle walks the full retry ladder again, and every
retry in that cycle also carries
tanitar-replay: true. - The body is the original envelope, unchanged. The signature is computed with the endpoint's current secrets, so a delivery that failed before a rotation verifies with the new secret.
Earlier attempts stay in the delivery's history; the log shows each attempt as initial, retry or
replay. Every replay is recorded in your organization's audit log with the administrator who
started it.
Recovering from an outage
- Fix your receiver and confirm it answers
2xx, for example with a test delivery. - If you disabled the endpoint during the outage, enable it again.
- Replay the endpoint's dead deliveries in batches until none is accepted.
- Deduplicate on
webhook-id: some of the replayed deliveries may already have reached you before the outage was noticed.