ADR-047: HTTP API conventions
Estado
Accepted — 2026-08-23
Contexto
ADR-012 fija REST /api/v1 + OpenAPI. Faltan errores, paginación e idempotencia — IVPrior lo tenía en su ADR-014 largo.
Detalle de codes: docs/architecture/DOC-005-api-conventions.md.
Decisión
- JSON request/response. Fechas ISO-8601. UUID en path.
- Paginación:
page+pageSize(default 20, max 100) +total. Filtros query:status,customerId,agingBucket,q. - Errores:
{
"error": {
"code": "INVOICE_NOT_FOUND",
"message": "Human-readable en-US",
"details": [],
"requestId": "…"
}
}
- HTTP: 400 validación, 401 auth, 403 rol/tenant, 404, 409 conflicto, 429 rate limit, 500 inesperado.
- Idempotencia: header
Idempotency-Keyen POST de import CSV, send message, record promise. Reintento = misma respuesta. X-Request-Id/requestIden logs (ADR-028).- Listados siempre scoped por
organizationIddel token (ADR-018). - PATCH parcial; no PUT que pise relaciones enteras sin brief.
Consecuencias
- OpenAPI documenta
error.codedel DOC-005. - Tests de contrato cubren 403 cross-tenant.