Stripe disabled your webhook endpoint

Payments succeed in Stripe, but your app never marks them paid. The endpoint in Stripe's dashboard says Disabled.

Why it happens

Stripe retries a failing endpoint for about three days, then turns it off. Anything that made the endpoint answer with something other than 2xx for that long ends here: a missing signing secret, a route that crashes, a domain that moved.

How to tell

  • Endpoint status Disabled under Stripe › Developers › Webhooks, with the failure history and the status code your app returned.
  • No webhook events reaching the app; the payments exist only in Stripe.
  • Very often a deploy or a domain change about three days earlier.

The fix

  1. Fix the cause first. The failure history says which status your app returned; the entries on this site for a missing secret and for signature failures cover the two usual ones.
  2. Re-enable the endpoint in Stripe.
  3. Replay the missed events from the endpoint's event log, so the orders from the gap are fulfilled.
  4. When you move domains, keep an endpoint on the old address for a week alongside the new one.

Where to look

The prompt for your builder

Paste this into Lovable, Bolt, Cursor, Claude Code or whatever built the app. Replace anything in capitals. It never asks you to paste a secret into a chat; keys go into your host’s environment, by you.

Prompt for your builder
My Stripe webhook endpoint was disabled after days of failed deliveries. Add a GET handler to my webhook route that returns 200 so I can check it is deployed, make the POST handler log the event type and the outcome of every delivery, and write a small script that replays Stripe events from a given date range through the handler so I can fulfil the orders that were missed.

How Keelnest catches it

Revenue Guard reads webhook endpoint state from Stripe on every check and names a disabled endpoint as evidence the moment it changes; a quiet hour against the baseline confirms what it cost.

Know the moment this happens.

Keelnest watches your production app every five minutes and tells you in plain English what broke — with the fix. Free for your first app.

Related