Webhooks as an idempotent ledger
Payment events are durable state transitions, not disposable callbacks.
Every webhook lands in an events table keyed by a content hash of the raw body, so duplicate deliveries become no-ops instead of double-charges. Processing runs off the request path, with an inline fallback and replay sweeps.
ResultRedelivery, retries, and outages could not corrupt payment state.







