Dead Letter Queue (DLQ)
Failed deliveries shouldn't vanish. The DLQ preserves them so you can understand what went wrong and fix it.
The Problem
After all retries are exhausted, what happens to the event? In most webhook systems, it's silently dropped. You never know it failed, and the data is lost forever.
This is especially painful for critical events like payments or order updates β losing them means lost revenue or unhappy customers.
How the DLQ Works
When a delivery exhausts all retry attempts, HookSniff moves it to the Dead Letter Queue instead of dropping it. The DLQ preserves everything:
- Original payload β The full event data
- All attempt details β Status codes, response bodies, timestamps for every retry
- Timing β When each attempt was made and how long it took
- Error context β Why each attempt failed
You can inspect DLQ entries via the API or dashboard, and replay them with one click after fixing the issue.
When Do Webhooks Go to the DLQ?
A delivery is moved to the DLQ when:
- All retry attempts have been exhausted (default: 5 attempts, configurable per endpoint)
- The endpoint is disabled
- The delivery has been pending for too long (stale delivery timeout)
Common failure reasons:
- Endpoint returning 5xx errors consistently
- Endpoint unreachable (DNS failure, connection timeout)
- TLS certificate issues
- Endpoint returning 429 rate limits that don't clear
Inspecting DLQ Entries
Query failed deliveries via the API:
curl "https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks?status=failed" \
-H "Authorization: Bearer hr_live_YOUR_KEY"Response includes full delivery details:
{
"id": "wh_xyz789",
"endpoint_id": "ep_abc123",
"event": "order.created",
"status": "failed",
"attempt_count": 3,
"attempts": [
{ "attempt": 1, "status": 500, "error": "Internal Server Error", "timestamp": "2026-01-15T10:30:00Z" },
{ "attempt": 2, "status": 500, "error": "Internal Server Error", "timestamp": "2026-01-15T10:30:01Z" },
{ "attempt": 3, "status": 500, "error": "Internal Server Error", "timestamp": "2026-01-15T10:30:03Z" }
],
"payload": { "order_id": "12345", "total": 99.99 },
"created_at": "2026-01-15T10:30:00Z"
}Replaying Failed Deliveries
Once you've fixed the issue, replay the delivery. This resets the attempt counter and re-queues with a fresh retry schedule:
curl -X POST https://hooksniff-api-1046140057667.europe-west1.run.app/v1/webhooks/wh_xyz789/replay \
-H "Authorization: Bearer hr_live_YOUR_KEY"You can also replay from the dashboard with one click. Batch replay is available for multiple failed deliveries.
DLQ Retention
DLQ entries are retained based on your plan:
| Plan | Retention | Max DLQ Entries |
|---|---|---|
| Developer ($0) | 7 gΓΌn | 100 |
| Startup ($24/ay) | 14 gΓΌn | 30.000 |
| Pro ($49/ay) | 180 gΓΌn | 100.000 |
| Enterprise ($149/ay) | Γzel | SΔ±nΔ±rsΔ±z |
After retention expires, DLQ entries are permanently deleted. Export important data before it expires.