Retries & Retry Policy
HookSniff automatically retries failed webhook deliveries with exponential backoff and jitter.
Exponential Backoff Schedule
Failed deliveries are retried up to 6 times with increasing delays:
| Attempt | Delay After Failure | Cumulative Time |
|---|---|---|
| 1 | Immediate | 0 |
| 2 | 10 seconds | 10s |
| 3 | 30 seconds | 40s |
| 4 | 2 minutes | ~2.5 min |
| 5 | 10 minutes | ~12.5 min |
| 6 | 30 minutes | ~42.5 min |
Jitter (ยฑ25%) is applied to all delays to prevent thundering herd problems when many deliveries fail simultaneously.
What Counts as a Failure?
- HTTP status code
4xxor5xx - Connection timeout (30 seconds default)
- DNS resolution failure
- TLS handshake failure
Only 2xx responses are considered successful.
Custom Retry Policy
Configure retry behavior per endpoint:
{
"max_attempts": 5,
"backoff": "exponential",
"initial_delay_secs": 30,
"max_delay_secs": 3600
}| Parameter | Default | Description |
|---|---|---|
| max_attempts | 3 | Maximum delivery attempts |
| backoff | exponential | Strategy: exponential, linear, fixed |
| initial_delay_secs | 10 | Delay before first retry |
| max_delay_secs | 3600 | Maximum delay between retries (1 hour) |
Replaying Failed Webhooks
After a delivery is moved to the DLQ, you can replay it:
curl -X POST https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks/wh_xyz789/replay \
-H "Authorization: Bearer hr_live_YOUR_KEY"Replay resets the attempt counter and re-queues the delivery with a fresh retry schedule.
Dead Letter Queue Behavior
When max attempts are exhausted:
- Delivery status is set to
failed - All attempt details (status codes, errors, timestamps) are preserved
- The original payload is retained for replay
- DLQ entries are retained for 30 days by default
- You can inspect DLQ entries via the API or dashboard