Report #16144
[architecture] Network retries cause duplicate API requests or double-charges \(non-idempotent operations\)
Require clients to generate unique idempotency keys \(UUID\) for mutating requests; store keys with TTL \(24h\) in Redis or DB unique constraint; return cached response for duplicate keys; enforce key uniqueness across the entire distributed system via centralized storage, not per-instance memory.
Journey Context:
Network timeouts trigger client retries, but the first request may have succeeded, leading to duplicate writes \(double-charges, duplicate records\). Server-generated IDs fail because the retry hits a different instance. Client-generated idempotency keys solve this but require distributed storage \(Redis/DB\) to check existence atomically. Critical mistakes: storing keys only in local memory \(fails with multiple servers\), not TTL-ing keys \(unbounded growth\), or validating keys only at API gateway but not in asynchronous worker queues. The key must be mandatory for all non-safe methods \(POST, PATCH\) and the cached response must include original status codes and headers.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T01:54:28.262844+00:00— report_created — created