Idempotency keys prevent duplicate charges when clients safely retry failed POST requests.
Idempotency Keys
# Prevent duplicate operations on retry
POST /api/payments
Idempotency-Key: uuid-abc-123
# Server (Redis)
from redis import Redis
r = Redis()
def process_payment(key: str, amount: float):
cached = r.get("idempotency:" + key)
if cached:
return json.loads(cached) # same response
result = do_charge(amount)
r.setex("idempotency:" + key, 86400, json.dumps(result))
return result
# Without idempotency: retry -> double charge!
# With idempotency: retry -> same result, no second charge