Guides

Automatic retry policy

The delivered retry ladder, jitter, timeouts, terminal responses, and the 24-hour ceiling.

On this page

DeadHook retries eligible failures with bounded attempts and a hard age ceiling.

Default policy

  • Maximum attempts: 8
  • Maximum retry age: 24 hours from the Delivery
  • Delays after failed attempts: 15 s, 60 s, 300 s, 900 s, 3600 s, 14400 s, 43200 s
  • Jitter: approximately ±20%

The delays are the base schedule. A Destination's Retry-After header can extend or shorten a wait within policy limits; it cannot make the ladder infinite.

After the eighth failed attempt, after the 24-hour ceiling, or on a terminal policy failure, the Delivery enters dead_letter.

Which failures retry

Retryable:

  • timeout;
  • connection or network failure;
  • TLS transport failure (not certificate validation);
  • HTTP 408, 409, 425, 429, 500–599.

Terminal:

  • other 4xx;
  • 3xx (redirects are not followed);
  • blocked or private Destination policy;
  • invalid TLS certificate;
  • expired or purged payload;
  • missing signing secret.

What a retry is

A retry creates a fresh outbound request. It reuses the Delivery and the stable webhook-id, but generates a new webhook-timestamp and signature. A Destination can therefore see the same Event body more than once. Deduplicate by webhook-id and your business key.

Retries are at least once, never exactly once. A timeout does not prove the Destination did not process the request.

Retry and Destination state

If a Destination is disabled while a retry is waiting, DeadHook re-checks its state and does not bypass the Delivery deadline. Re-enabling a Destination does not reset the attempt count or age.