ADR-069 — Idempotency store

Architecture decision record — status: Accepted.

Source: docs/adr/ADR-069-idempotency-store.md

ADR-069: Idempotency store

Estado

Accepted — 2026-08-23

Decisión

Header Idempotency-Key (ADR-047) se persiste en Postgres:

idempotency_keys: organizationId, userId, key, method, path, requestHash, responseStatus, responseBody, createdAt, expiresAt.

  • TTL: 24 h.
  • Misma key + mismo hash → replay 200.
  • Misma key + hash distinto → 409 CONFLICT.
  • Key scoped por Organization + User.

No solo Redis (se pierde). Redis puede cachear el lookup.