Report #7760
[architecture] Retrying failed API requests creates duplicate charges/orders
Require clients to generate unique idempotency keys \(UUIDs\) for mutation requests; server stores key→response mapping for 24h, returning cached response on replay without side effects
Journey Context:
Network failures make 'at-least-once' delivery inevitable. Without idempotency keys, retries create duplicate resources \(double charges, inventory errors\). The key must be generated by the client \(not server\) so retries use the same key. Storage can be Redis/Postgres with TTL. Stripe popularized this pattern: keys are HTTP headers \(Idempotency-Key\), responses cached including 409/500 errors.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T03:40:27.994818+00:00— report_created — created