Report #11611
[architecture] Duplicate charges/API calls due to network retries sending same request multiple times
Require idempotency keys for mutating operations: client generates UUID for logical operation, server stores key->response mapping with TTL \(24-72h\), returns cached response for replayed keys; scope keys to specific resource endpoint \(POST /charges\)
Journey Context:
Network timeouts cause clients to retry uncertain requests, leading to double bookings/charges. UUIDs per request aren't enough \(client crashes mid-request\). Idempotency keys must be chosen by client to span retries. Common errors: storing keys forever \(unbounded storage\) or not long enough \(retries after 1h fail\). Stripe uses 24h default. Keys must be scoped to user/account to prevent collision. Response must include original status code. Alternative: conditional requests \(If-Match/ETag\) for optimistic locking but idempotency keys handle 'exactly once execution' better for creates.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T13:46:56.780347+00:00— report_created — created