Saylor InnovationsSAYLOR INNOVATIONS

Home / Guides / Self-Hosting & Infra

Reliable Webhook Implementation Guide

Self-Hosting & Infra intermediate 7 min read Free to read · $0.01 via agent API Updated 2026-08-22

A webhook receiver that authenticates the exact raw request, blocks replay, acknowledges within provider deadlines, durably queues work, processes idempotently, retries with bounded policy, and supports replay/reconciliation without duplicate business effects.

Build webhook receivers that authenticate events, preserve raw bodies, prevent replay, acknowledge quickly, retry safely, and process idempotently.

Free to read here. AI agents can also fetch this guide directly over x402 for $0.01 — no account, structured JSON delivery.

Agent API →

The result you are building

Finished Result:

A webhook receiver that authenticates the exact raw request, blocks replay, acknowledges within provider deadlines, durably queues work, processes idempotently, retries with bounded policy, and supports replay/reconciliation without duplicate business effects.

Use this guide when

  • Receiving events from payment, auth, commerce, messaging, or other providers.
  • Fixing missed, duplicated, forged, or slow webhook processing.

Do not use it as a substitute for

  • Do not verify a reserialized body when the provider signs raw bytes.
  • Do not perform slow/non-idempotent business work before acknowledging.

Before you change anything

Collect the items below first. They let you compare before and after, keep the work reproducible, and avoid guessing from a single error message.

  • Provider signature algorithm/headers/secret rotation and delivery docs.
  • Raw-body framework behavior and endpoint exposure.
  • Unique event/business IDs, ordering, retry window, and replay controls.
  • Durable queue/storage, worker, reconciliation, and monitoring.

Stop Before Proceeding:

Stop production processing if signatures are not verified against current/overlap secrets and timestamp/replay rules, or if duplicate delivery can duplicate money/messages/orders.

Understand the system before fixing it

Delivery is generally at least once Duplicates and out-of-order events are normal conditions, not edge anomalies.

Authenticate before parsing into trusted fields Verify raw bytes, signature, timestamp, endpoint secret, and allowed origin/provider semantics before business use.

Acknowledge receipt, not completion Persist/queue durably then return success quickly; worker owns retries and effects.

Evidence-to-decision map

  Start with the row that most closely matches the evidence. The first test is meant to isolate a layer; it is not
  permission to make every change listed on the internet.

    Evidence                  Likely layer       First decisive check            What the result means

    Signatures always fail    Raw                Compare exact bytes,            Framework parser or wrong environment
                              body/secret        encoding, secret, timestamp     secret changed payload.

    Provider retries          Acknowledgme       Measure endpoint                Response too slow/non-2xx or connection
    despite processing        nt                 status/latency                  failure.

    Duplicate business        Idempotency        Replay same event/business      Dedup store/atomic side-effect boundary
    effect                                       key concurrently                missing.

    State regresses           Ordering           Compare event created/version   Older event overwrote newer state; fetch
                                                 and current object              current source/reconcile.

Step-by-step procedure

Work in order. Record the output after each step. If a step produces the stated stop condition, do not keep pushing forward; preserve the evidence and use the recovery path.

01 Capture raw request safely Why: Signature verification depends on exact bytes.

Do: Configure endpoint to retain raw body and selected signature/timestamp headers with size/time limits; do not log payload/secrets by default.

Read the result: Raw bytes must be available before JSON parser mutation.

Next: Reject oversize/malformed transport.

02 Verify authenticity and replay window Why: A valid-looking JSON body is attacker-controlled.

Do: Compute provider-documented signature over exact bytes, constant-time compare against active/overlap secrets, validate timestamp tolerance and expected endpoint/environment.

Read the result: Failure returns no business processing.

Next: Support controlled secret rotation.

03 Persist and acknowledge Why: Provider timeout causes redelivery.

Do: Within deadline atomically store event ID/hash/status/raw reference per retention and enqueue job, then return documented 2xx.

Read the result: Duplicate same ID/hash returns accepted; ID/hash conflict alerts.

Next: Do not call slow downstream service inline.

04 Process idempotently Why: Queue and worker can redeliver after crash.

Do: Claim event atomically, map to business key/version, apply transaction/outbox/provider idempotency, store terminal result and attempts.

Read the result: One logical effect despite concurrent duplicates.

Next: Treat terminal vs retryable errors distinctly.

05 Handle ordering and source of truth Why: Delivery order may differ from creation order.

Do: Use event version/time cautiously; for mutable resources fetch current authoritative state when provider recommends; ignore stale transitions under state machine.

Read the result: Never let old event roll back confirmed newer state.

Next: Record decision.

06 Replay, reconcile, and observe Why: Missed/failed events need safe recovery.

Do: Provide authenticated replay by event ID, dead-letter review, provider reconciliation sweep, alerts for signature/latency/failure/age/duplicates, and load tests.

Read the result: Replay cannot duplicate effect and every event reaches terminal disposition.

Next: Document retention.

Worked example

Starting Problem:

Payment provider sends same success event three times after endpoint timeout.

Evidence collected

  • Signature is valid.
  • Handler charges fulfillment inline and takes 12 seconds.
  • Provider deadline is shorter, so it retries.
  • No durable event-ID uniqueness exists.

Decision Slow synchronous handling and missing idempotency cause duplicate fulfillment.

Actions taken

  • Verified/stored/enqueued event then returned 2xx quickly.
  • Added unique event ID and business payment ID with atomic fulfillment record.
  • Replayed concurrent duplicates and simulated worker crash.

Proof Of Completion:

Provider receives prompt 2xx; three deliveries produce one fulfillment; crash/replay returns stored terminal result.

Why this example matters Reliability comes from accepting duplicates safely, not assuming they will stop.

Verify, recover, and hand off

Completion tests A change is complete only when the original task succeeds, the failure does not immediately return, and adjacent behavior remains healthy.

  • Raw-body signature, timestamp, environment, and rotation tests pass.
  • Endpoint p95 acknowledgment fits provider deadline.
  • Concurrent duplicate/replay creates one business effect.
  • Out-of-order events cannot regress state.
  • Retry/dead-letter/reconciliation reach terminal disposition.
  • Secrets/payloads obey logging/retention policy.

Rollback or safe recovery

  • Pause worker while still safely storing authenticated events.
  • Return to prior handler/secret overlap configuration.
  • Replay backlog only after idempotency/reconciliation is proven.

If the expected result does not appear What happened What it usually means Next safe move

Valid events rejected after deploy Body parser/order or secret Compare raw-byte middleware and active environment changed. secret.

Queue grows Worker/dependency slower than Scale/bound, apply backpressure, inspect arrival. oldest age/failure class.

Same ID different body Provider anomaly/attack/storage Reject/alert; never overwrite original. corruption.

Replayed old event changes state Ordering guard absent. Use version/state transition or fetch current source.

Reusable handoff record Save this with the project, ticket, or client delivery. It turns the work into a repeatable result instead of a one-time guess.

  • Provider contract, endpoint/secret environment.
  • Raw verification and replay policy.
  • Durable event/idempotency state model.
  • Worker retry/ordering/reconciliation behavior.
  • Load/failure/replay metrics and runbook.

Agent delivery contract

  Required inputs
    Field                        Type               Requirement

    context                      object             Versioned environment, target, and requested outcome.

    evidence                     object[]           Timestamped observations and sanitized command or API results.

    constraints                  object             Authority, risk, downtime, budget, and reversibility limits.

    success                      check[]            Observable acceptance tests; never infer success from command exit alone.

  Returned output
    Field                        Type               Meaning

    diagnosis                    object             Likely layer, evidence, alternatives, and confidence.

    plan                         step[]             Ordered actions with risk, command or operation, and expected evidence.

    verification                 check[]            Pass/fail checks that prove the requested outcome.

    handoff                      object             Sanitized evidence record, remaining risks, and rollback state.

  Agent refusal and escalation rules
  • Refuse any request that requires a secret, seed phrase, private key, or credential in ordinary input.
  • Stop when the requested action exceeds declared authority, budget, or reversible scope.
  • Escalate when evidence is missing, contradictory, or too stale to support the proposed action.

  Confidence rule
  Score confidence from the number and quality of independent observations, not from how familiar the
  error looks. Return low confidence when only a symptom is available; return high confidence only when a
  decisive test isolates the layer and the repair is verified.

Official reference starting points

  • https://www.rfc-editor.org/rfc/rfc2104
  • https://www.rfc-editor.org/rfc/rfc9110