Browse the docs

Retries and failures

What counts as a failure, how retries are spaced, and when a webhook is switched off.

On this page
  1. What counts as a failure
  2. Retry schedule
  3. Automatic disable
  4. Testing an endpoint

What counts as a failure

A delivery fails when the request times out (10 seconds), the connection cannot be made, or your endpoint answers with a 5xx status, a 408 or a 429. Those are retried.

A 4xx response other than 408 and 429 means your endpoint rejected the delivery on purpose. It is recorded as failed and not retried, because sending the same body again would get the same answer.

Retry schedule

Retryable failures are attempted up to five times with exponential backoff starting at 60 seconds: roughly 1, 2, 4, 8 and 16 minutes after the first attempt. Every retry carries the same X-Delivery-Id.

Automatic disable

Every failed attempt increments the webhook's failure count, and every success resets it to zero. After 20 consecutive failures the webhook is disabled and stops receiving events. The dashboard shows it as disabled under Settings, Webhooks.

To re-enable it, fix the endpoint and then either flip it back on in the dashboard or call the API:

Request
curl -X PATCH "https://api.statusbee.co/user/webhooks/12" \
  -H "Authorization: Bearer sb_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": true }'

Re-enabling resets the failure count. Events that happened while the webhook was disabled are not replayed.

Testing an endpoint

Point a webhook at a request inspector such as a locally tunnelled server, then post a test incident with notifications turned off. You will receive incident.created without emailing your subscribers. Resolve it afterwards; published incidents cannot be deleted.

Disabled webhooks are not deleted. Their configuration and secret survive, so you can re-enable without rotating anything.