Debug and replay Stripe webhooks
Works with Stripe webhook events. When invoice.payment_failed or checkout.session.completed hits a broken handler, HookWatch shows the exact delivery and lets you replay once it is fixed.
Works with Stripe webhook events. Stripe drives your billing state through webhooks — payment.succeeded, invoice.payment_failed,
and checkout.session.completed are how your app learns that money moved.
If your endpoint is broken when one arrives, the subscription state in your app quietly drifts from
what Stripe believes is true — and the customer notices before you do.
How Stripe deliveries fail
- Target 500 errors. Your handler throws on
invoice.payment_failedand returns500. Stripe marks the event failed and retries on its own schedule. - Timeouts. The handler does too much inline (provisioning, emails) and does
not return
200before Stripe’s timeout. - Signature mismatch. The
Stripe-Signaturecheck fails — usually the raw body was parsed before verification, the wrong signing secret is set, or clocks are skewed — and the handler rejects it with400.
The HookWatch flow
Point your Stripe webhook URL at your HookWatch endpoint, and each event is:
- Captured — the full event body and headers, including the signature header.
- Inspected — read the failed response and the exact payload that triggered it.
- Fixed — reproduce locally from the captured body, patch the handler, deploy.
- Replayed — re-send the captured event so the invoice or subscription change is recorded.
This is webhook debugging applied to Stripe. For the failure modes in depth, see webhook 500 errors and webhook replay. HookWatch works with Stripe events; it is not an official Stripe integration or partnership.
Keep reading
Start debugging your webhooks.
Point one endpoint at HookWatch, capture a failure, and replay it once it’s fixed. Free during beta.