Report #11213
[architecture] How do I prevent duplicate charges when a payment API request is retried due to a network timeout?
Require clients to generate a unique idempotency key \(UUID\) and send it in a dedicated header. The server must store this key and the response payload in a transactional table with a 24-hour TTL. If the same key arrives again, replay the stored response without re-executing the business logic.
Journey Context:
Network timeouts force clients to retry, causing duplicate side effects like double-charging. Server-generated IDs fail because the client doesn't know if the first request processed before the timeout. The idempotency key must be client-generated to span retries, and storage must be transactional with the business logic \(same DB transaction\) to avoid race conditions. A 24h TTL balances safety against storage bloat, as most retries happen within minutes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T12:47:16.733465+00:00— report_created — created