Convenciones
Naming¶
- Endpoints: snake_case en URL (
/operations/visits,/billing/sii/documents). - JSON keys: snake_case (
clinic_id,total_amount,created_at). - Resources: plural en path (
/visits,/tutors), singular en payloadid. - Verbos HTTP:
GETlista o detallePOSTcreaPATCHactualiza parcial (preferido sobrePUT)DELETEborra (soft delete por defecto en entidades condeleted_at)
Headers obligatorios¶
| Header | Valor | Cuándo |
|---|---|---|
Authorization |
Bearer <jwt> |
Todos los /api/v1/* excepto /auth/login y /auth/register |
Content-Type |
application/json; charset=utf-8 |
POST/PATCH |
X-Request-ID |
UUID propio (opcional) | Para correlación logs cliente↔servidor |
Idempotency-Key |
UUID único | POST de creación de invoices/payments (Sprint 6) |
Headers de respuesta:
| Header | Significado |
|---|---|
X-Request-ID |
Echo del cliente o generado server-side |
X-RateLimit-Remaining |
Cuota restante per IP/key |
X-RateLimit-Reset |
Timestamp Unix de reset |
Paginación¶
Cursor-based (preferido) y offset-based (legacy).
Cursor:
Response:
Offset (legacy, soportado en endpoints simples):
Response:
Filtros¶
Query params snake_case:
Para listas multi-valor: comas → ?status=emitted,paid.
Timestamps¶
- Todo en UTC RFC3339:
2026-04-26T17:45:23Z. - Las fechas-only en
YYYY-MM-DD. - El frontend convierte a zona local del usuario al renderizar.
Money¶
- Montos en enteros (centavos para CLP, USD):
total_amount: 1234500=$12.345,00. - Currency code ISO 4217:
currency: "CLP". - Nunca floats para dinero (precisión).
Idempotencia¶
POSTs financieros (invoices, payments, refunds) aceptan Idempotency-Key:
- Mismo key + mismo body en <24h → mismo response (200) sin re-creación.
- Mismo key + body distinto → 409
IDEMPOTENCY_KEY_CONFLICT. - Sin key → POST procesado normal (no recomendado para llamadas no-idempotentes).