Skip to main content

Request attempts

A request attempt is a single delivery try for a webhook. When an event matches a subscription, Hook0 creates a request attempt and tracks it until delivery succeeds or all retries are exhausted.

Key points​

  • Each event/subscription pair generates one or more request attempts
  • Hook0 retries failed deliveries automatically with increasing backoff
  • Request attempts move through distinct statuses
  • Full delivery history is kept for debugging

Delivery lifecycle​

Status states​

Request attempts go through these states (the API value of status.type is given in parentheses):

  • Pending (pending): queued, waiting to be picked up for delivery
  • Paused (paused): held back because most recent deliveries to the subscription's endpoint failed; released gradually (see Subscription health)
  • In progress (in_progress): currently being delivered to the endpoint
  • Waiting (waiting): delivery failed, waiting for retry (backoff delay)
  • Successful (successful): webhook delivered and endpoint returned 2xx
  • Failed (failed): all retry attempts exhausted or permanently failed

Retry behavior​

When a delivery fails, Hook0 schedules retries with increasing backoff delays:

RetryBase delay
13 seconds
210 seconds
33 minutes
430 minutes
51 hour
63 hours
75 hours
8+10 hours

A small random amount is added on top of each delay -- never subtracted, so a retry never fires earlier than its base delay -- so that deliveries that failed together do not retry together. See Why delays are not exact.

Retries are bounded by both MAX_RETRIES and MAX_RETRY_WINDOW (whichever limit is reached first) at the Output Worker level. After all retries are exhausted, the attempt is marked as permanently failed.

While a subscription is degraded or recovering, each retry waits at least 1 hour (see Subscription health).

Transient failures won't cause data loss, and struggling endpoints won't get hammered.

Failure scenarios​

Request attempts fail when:

  • Endpoint returns 4xx or 5xx status codes
  • Connection times out
  • DNS resolution fails
  • SSL/TLS handshake fails
  • Application is deleted (all pending attempts cancelled)

Debugging failed webhooks​

When webhooks fail, request attempts give you:

  • Timestamps for when each phase occurred
  • Retry count (how many attempts were made)
  • Response reference (link to the endpoint's response)

This helps you figure out whether the problem is endpoint availability, authentication, or payload processing.

What's next?​