Dev.to
6/20/2026

The Postgres error code that makes Stripe webhooks idempotent: 23505
Short summary
Stripe's at-least-once webhook delivery creates idempotency problems: duplicate events cause double-charged subscriptions or duplicate emails. Insert each event_id into a Postgres table with a unique constraint, then catch error code 23505 (unique violation) for atomic duplicate detection—no SELECT-then-INSERT races or locks. Return 200 on duplicates to stop Stripe retries.
- •Stripe webhook at-least-once delivery risks duplicate processing without explicit deduplication
- •Use Postgres unique constraint on event_id and catch error 23505 for atomic duplicate detection
- •Return 200 on duplicates to halt Stripe retries—simpler than queues, locks, or Redis
Generated with AI, which can make mistakes.
Is this a good recommendation for you?



