Stripe webhook not working: how to diagnose it
When Stripe webhooks stop working the cause is usually a 500, a timeout, a signature failure, or the wrong events selected. Work through them in order.
Works with Stripe webhook events. When Stripe webhooks “stop working,” it is almost always one of a handful of causes. Stripe’s dashboard records each delivery attempt and the response your endpoint returned (Developers → Webhooks → your endpoint) — start there, then work down this list.
Checklist
- Endpoint returns
500— your handler threw. Read the response body Stripe recorded for the failed event. See webhook 500 errors. - Timeout — Stripe expects a fast
2xx; if the handler does too much inline, Stripe gives up and retries. Acknowledge first, process asynchronously. - Signature failure
400— the payload failed verification, almost always the raw-body problem. See Stripe signature verification. - Wrong events — the event type you expect is not enabled on the endpoint. Check the “Events to send” list in the Stripe dashboard.
- Disabled endpoint / wrong URL — Stripe disables endpoints after repeated failures. Confirm the URL and that the endpoint is still enabled.
Confirm it in HookWatch
Point the Stripe endpoint URL at your HookWatch endpoint and each delivery — payment_intent.succeeded, invoice.payment_failed, checkout.session.completed — is captured with its request, response, and
attempt history. You can see exactly which events failed and why, instead of guessing from a summary.
Applied end to end on the Stripe webhooks page.
Start debugging your webhooks.
Point one endpoint at HookWatch, capture a failure, and replay it once it’s fixed. Free during beta.