Prompt
I hate when Stripe keeps retrying webhooks after I already processed them
Latest observation
Oct 5, 2026
OpenAI APIWeb search: off
Yeah — that’s annoying, but it’s expected behavior from Stripe.
Stripe retries webhooks when it doesn’t get a fast 2xx response, or if delivery is otherwise considered failed. The important part is: your webhook handler should be idempotent.
What to do:
- Store event IDs you’ve already processed
- Check before processing whether the event was handled
- Return 200 quickly after accepting the event
- If you need heavier work, enqueue a job and ack the webhook immediately
Typical pattern:
- Receive webhook
- Verify signature
- Look up
event.id - If already processed, return 200
- Otherwise process it
- Mark it processed
- Return 200
If you want, I can show you:
- a Node/Express
- Python/FastAPI
- or Rails example for deduplicating Stripe webhooks.