SFHooks Docs

Delivery, retries & DLQ

At-least-once delivery, backoff, endpoint health, and the dead-letter queue.

At-least-once delivery

SFHooks delivers each event at least once. A delivery succeeds when your endpoint returns a 2xx response. Any other response (or a timeout) is treated as a failure and retried. Because retries can re-send an event, your endpoint should be idempotent — de-duplicate using the event's id.

Retries & backoff

Retry backoff — jittered, capped at ~3h
  1. Attempt 1
    delivered, or fails immediately
  2. Attempt 2
    after a short delay
  3. Attempt 3
    the delay grows each time…
  4. Up to 31 attempts
    then moved to the DLQ

Failed deliveries are retried automatically with jittered exponential backoff: each attempt waits longer than the last, up to a cap of about three hours between attempts, for up to 31 attempts. Transient endpoint outages recover on their own without any action from you.

Event statuses

  • Received — ingested, but no active webhook matched it.
  • Pending — queued or mid-retry, not yet delivered.
  • Delivered — your endpoint returned 2xx.
  • Failed — retries were exhausted; moved to the dead-letter queue.
  • Throttled — dropped because the org was over its monthly event limit (see Plans & billing).

Endpoint health

Endpoint health escalates during a sustained outage

SFHooks tracks each webhook's recent delivery success and escalates an endpoint through health states during a sustained outage:

  • HealthyDegradedFailingPaused.
  • A paused endpoint stops receiving new deliveries; in-flight events are sent to the dead-letter queue so they aren't lost.

Fix your endpoint, then re-enable the webhook from the Webhooks page to resume.

Dead-letter queue & replay Scale

Events that exhaust their retries land in the dead-letter queue (DLQ). On the Scale plan you can inspect failed events and replay them once the endpoint is healthy again — either a single event or a bulk replay of everything that failed. Replayed events are re-delivered through the normal signing and retry path.

A short window to recover

Terminally-failed events are retained in the DLQ for about 14 days, giving you time to fix the receiver and replay before they age out.

Log retention

Delivered and failed event records are kept for your plan's retention window (Starter / Pro / Scale retain progressively longer) and pruned automatically once a day. Older events drop off the Logs page after that window.