Webhook retry policy
If your webhook endpoint doesn’t respond with a 2xx status code, Active Reach retries with exponential backoff.
Retry schedule
| Attempt | Delay after failure | Cumulative time |
|---|---|---|
| 1st retry | 30 seconds | 30s |
| 2nd retry | 2 minutes | 2.5 min |
| 3rd retry | 10 minutes | 12.5 min |
| 4th retry | 1 hour | 1h 12min |
| 5th retry | 6 hours | 7h 12min |
| 6th retry (final) | 24 hours | 31h 12min |
After the 6th retry fails, the event is moved to the dead-letter queue (DLQ). Events in the DLQ are retained for 7 days before permanent deletion.
What counts as a failure
- HTTP status codes
4xx(except410 Gone) and5xx - Connection timeout (no response within 10 seconds)
- DNS resolution failure
- TLS handshake failure
Special cases
410 Gone— Active Reach permanently disables the webhook (assumes you intentionally decommissioned the endpoint)429 Too Many Requests— respects theRetry-Afterheader if present, otherwise uses standard backoff200-299— success, no retry
Deduplication
Each webhook event has a unique id field. If your endpoint receives the same id twice (possible during retries or network glitches), deduplicate on your side using the event ID.
Monitoring
Check webhook health in Settings → Developer → Webhooks:
- Success rate — percentage of deliveries that received
2xx - Recent failures — last 10 failed deliveries with status codes and error messages
- DLQ count — events waiting in the dead-letter queue
Dead-letter queue
Events that exhaust all retries land in the DLQ. From the webhook settings page:
- View DLQ entries — see the payload and failure reason
- Retry — manually refire an individual entry
- Retry all — refire all DLQ entries (e.g., after fixing your endpoint)
- Delete — remove entries you don’t need
DLQ entries are automatically purged after 7 days.
What’s next
- Testing webhooks — tools for local development
- Signature verification — make sure retries are authentic