Signs that something ran twice: a customer gets two welcome emails, two license keys, or a credit balance that doubled. A digital-download store sees two orders in its database for one payment. Nothing failed. Your webhook handler did what it was told, twice.
Stripe documents this behavior. This post covers why one payment can reach your fulfillment code more than once, what to key deduplication on, and a small pattern that holds up even when two calls arrive at the same moment. Every claim links to the doc it comes from (see Sources at the end).
Why the same payment arrives more than once
1. Stripe can redeliver an event. Stripe's webhook docs: "Webhook endpoints might occasionally receive the same event more than once. You can guard against duplicated event receipts by logging the event IDs you've processed, and then not processing already-logged events."
2. Retries are normal. If your endpoint doesn't return 2xx in time, Stripe retries.…