Webhook reliability

A safer webhook architecture: verify, capture, acknowledge, then process

Separate webhook verification and durable capture from asynchronous processing, retries, and reconciliation.

Updated Aug 27, 2026

A webhook request is an integration boundary, not a good place to perform every business operation synchronously. A safer architecture separates the short protocol exchange from the durable work that follows it.

A durable sequence

  1. Receive: accept the provider's HTTP request within a bounded request size and timeout.
  2. Verify: authenticate the provider request before treating it as an accepted Event.
  3. Capture: persist the Event body, identity, and routing intent durably.
  4. Acknowledge: return a protocol-level response once the handoff is safe to continue.
  5. Process and deliver: perform application work asynchronously.
  6. Retry and recover: retain responsibility when a downstream dependency is unavailable.
  7. Reconcile: find ambiguous or stale work after outages and make the next action explicit.

Why store first matters

If verification, persistence, and business processing all happen inside one request, a timeout can leave the provider uncertain and the application without a durable record. A store-first handoff gives the system an Event identity and an attempt history even when a worker, database dependency, or downstream application is temporarily unhealthy.

Build it or use a boundary service

Teams can build this layer themselves. That may be the right choice when the reliability boundary is tightly coupled to an existing platform and the team can operate its queues, recovery, security, and observability.

A service such as Webhook Handoff is another approach: keep provider ingress, durable capture, asynchronous delivery, and controlled replay in a focused boundary, while your application remains responsible for idempotent business processing. The trade-off is an additional operational dependency and a clear need to understand the service's delivery semantics.

What this architecture does not promise

At-least-once delivery means duplicates remain possible. A successful HTTP response does not prove that your business transaction completed. Recovery and reconciliation are still part of operating a reliable integration.

See what HTTP 200 actually proves, or compare this model with the Stripe reliability guides.