HookGet עברית Start free

Dead letters and recovery

What happens when the schedule is spent, and how to get the events back.

In short

  • A delivery whose schedule is spent is kept, not dropped.
  • A destination that fails 50 times in a row is disabled, and the fact is published as an event.
  • Recovery resumes the destination and replays what died while it was down, in one call.
  • If events were published but never attempted, gap repair re-queues them.
The dead-letter queue, and the way back out Delivery attempts follow the retry schedule. When the schedule is spent, the delivery lands in the dead-letter queue, where it is kept and listed. Replaying it creates a fresh attempt with the original event id, so an idempotent consumer processes it safely. Delivery attempts the retry schedule Schedule spent 8 attempts over ~21 hours Dead-letter queue kept · listed · yours replay — a fresh attempt, the original event id
The dead-letter queue is a shelf, not a grave. A replayed delivery carries the original event id, so a consumer that deduplicates — as the idempotency guide insists — processes it exactly once.

What lands in the dead-letter queue

Everything that ran out of attempts. The original event id is preserved, so a consumer that dedupes on webhook-id will not double-process anything you replay.

curl https://api.hookget.com/v1/dlq -H "authorization: Bearer $HOOKGET_KEY"

When a destination is disabled

Fifty consecutive failures, or one 410 Gone, takes a destination out of rotation. HookGet then publishes hookget.endpoint.disabled as an ordinary event, so you can subscribe to your own incidents.

That operational event reaches explicit subscribers only. A catch-all destination that is currently failing must not receive the news of its own failure — that is an amplifier, not a notification.

Getting the events back

SituationCallWhat it does
Destination fixedPOST /v1/endpoints/{id}/recoverClears the failure counter and replays that destination’s dead letters
Selected failuresPOST /v1/dlq/replayRe-queues dead letters, all or for one destination
One eventPOST /v1/events/{id}/replaySends a single event again
Suspected gapPOST /v1/events/replay-missingFinds events with no attempt at all and re-queues them; safe to run twice

Gap repair exists because the queue is derived from storage rather than the other way round. If the queue is lost, the events are still there and can be re-derived — which is the practical reason to care which of the two is the source of truth.

Start delivering webhooks today

Point your webhooks at HookGet and watch the first delivery arrive, signed, in under a minute.

Create a free account Try the free webhook tester

10,000 deliveries a month free, no credit card. The free tier blocks rather than bills, so trying it cannot produce an invoice.