Skip to Content
DevelopersWebhooksRetry policy

Webhook retry policy

If your webhook endpoint doesn’t respond with a 2xx status code, Active Reach retries with exponential backoff.

Retry schedule

AttemptDelay after failureCumulative time
1st retry30 seconds30s
2nd retry2 minutes2.5 min
3rd retry10 minutes12.5 min
4th retry1 hour1h 12min
5th retry6 hours7h 12min
6th retry (final)24 hours31h 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 (except 410 Gone) and 5xx
  • 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 the Retry-After header if present, otherwise uses standard backoff
  • 200-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