Borrador
Convenciones
Formatos, idempotencia, paginación, errores y límites de uso.
Lo básico
- URL base
https://api.wagend.app/v1. Los cambios incompatibles salen como una nueva versión. - JSON de entrada y de salida (
Content-Type: application/json). - Fechas en ISO 8601 con offset (
2026-10-15T09:45:00-03:00). Se guardan en UTC. - Montos en centavos enteros más
currency(BRL,ARS,PYG,USD). - Los IDs son strings opacos con prefijo (
bkg_,svc_,res_,grp_,cus_).
Idempotencia
POST /holds, POST /holds/{id}/confirm, POST /bookings y POST /bookings/{id}/reschedule exigen el header Idempotency-Key (por ejemplo un UUID). Repetir un request con la misma clave dentro de 24 horas devuelve la respuesta original. Reusar la clave con otro body devuelve 422.
Paginación
Los endpoints de listado usan cursores:
curl "https://api.wagend.app/v1/bookings?limit=50" -H "Authorization: Bearer $WAGEND_KEY"
# → { "data": [...], "next_cursor": "eyJpZCI6..." }
curl "https://api.wagend.app/v1/bookings?limit=50&cursor=eyJpZCI6..." -H "Authorization: Bearer $WAGEND_KEY"
Errores
Los errores siguen la RFC 9457 (application/problem+json):
{
"type": "https://wagend.app/docs/api/conventions#errors",
"title": "Slot no longer available",
"status": 409,
"code": "slot_taken",
"alternatives": [{ "start": "2026-10-15T10:15:00-03:00", "end": "2026-10-15T10:45:00-03:00" }]
}
code | Estado | Cuándo |
|---|---|---|
invalid_request | 400 / 422 | Falló la validación |
unauthorized | 401 | Clave ausente, inválida o revocada |
insufficient_scope | 403 | La clave no tiene el scope |
not_found | 404 | Id desconocido (o de otro workspace) |
slot_taken | 409 | Otra persona tomó el horario |
invalid_transition | 409 | Por ejemplo confirmar una reserva cancelada |
hold_expired | 410 | La pre-reserva venció antes de confirmar |
idempotency_mismatch | 422 | Misma clave, distinto body |
rate_limited | 429 | Demasiados requests |
Límites de uso
Los límites aplican por clave y por workspace. Cada respuesta trae RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset. Ante un 429, esperá Retry-After segundos.