A successful test-mode checkout proves that one request worked once. It does not prove that billing, provisioning, and entitlement state will remain correct when delivery gets slow, repeated, reordered, or interrupted.
Stripe's webhook guidance says to expect automatic retries, duplicate events, and delivery that is not ordered. It also recommends signature verification and asynchronous handling.
1. Duplicate delivery
Deliver the same event ID twice, including two requests at the same time.
Invariant: one event produces one irreversible side effect. A duplicate must not create another credit, email, shipment, or entitlement change.
2. Out-of-order delivery
Deliver a later subscription event before an earlier lifecycle event.
Invariant: local state converges to Stripe's current state instead of blindly trusting arrival order.
3. Handler timeout
Hold a dependency open until the request exceeds the normal response window.
Invariant: the event remains recoverable. A timeout must not leave a completed side effect without a durable receipt, or an acknowledgement without queued work.
4. Retried 5xx
Return a controlled server error, then allow the retry to succeed.
Invariant: retry completes missing work once and does not repeat work already committed during the failed attempt.
5. Manual replay
Replay a previously accepted event after the normal processing window.
Invariant: replay is observable and idempotent, so operators can recover missed work without creating a second business transaction.
6. Invalid signature
Send a valid body with a bad signature, a stale timestamp, and a body modified after signing.
Invariant: every invalid request fails closed before business logic runs, without logging secrets or sensitive payloads.
7. Queue failure
Make enqueueing fail after receipt, and make a worker fail after dequeueing.
Invariant: acknowledgement matches durability. Failed jobs remain retryable or reach a monitored dead-letter path with enough context to recover them.
8. Missing-event reconciliation
Create a state change that the webhook consumer never receives.
Invariant: a scheduled or operator-triggered reconciliation detects drift and repairs it from Stripe's source of truth.
Keep evidence, not just a checkmark
For each case, record the business invariant, stimulus, HTTP and state evidence, and a pass, fail, or not-testable result with reproduction steps. The useful answer is whether paid customer state can become wrong and whether the team can detect and repair it.
SDNBros runs these cases as a fixed $950 Stripe Webhook Failure Drill for one integration and up to three handlers. Delivery is within 48 hours after accepted scope, deposit, access, and handler inventory. Review the fictional sample report before requesting a scope call.