Cambios de la API (changelog)
Cada cambio del contrato público, con fecha. Los cambios compatibles no exigen nada; los de ruptura llegan como versión nueva.
23 de septiembre de 2026 · el contrato dice lo que hace el servidor
Revisión del contrato contra el código. Nada de lo que ya devolvía la API cambia de forma; se documenta lo que faltaba y se corrigen cuatro comportamientos de entrada que no cumplían lo escrito.
| Área | Qué cambia |
|---|---|
| Reservas | pricing tiene dos formas según role: la completa cuando eres originadora y solo { currency, net_executor } cuando ejecutas una reserva de otra empresa (bolsa). Ya era así; ahora está en openapi.yaml (PricingOriginator · PricingExecutor) y en Bookings. |
| Webhooks | Se documenta la cabecera X-WAT-Attempt (número de intento, desde 1), que ya se enviaba. X-WAT-Delivery es el mismo en todos los reintentos de una entrega (antes se decía lo contrario). El patrón de X-WAT-Signature admite las dos firmas de una rotación con solape. |
| Webhooks | GET /webhooks/{id}/deliveries: limit se valida como en el resto de listas (400 si no es un entero ≥ 1; más de 100 se recorta). Antes un valor inválido se convertía en 25 sin avisar. |
| Catálogo | ?active= en clientes, conductores y vehículos solo admite true o false; otro valor es 400 validation_error (antes se ignoraba y devolvía todos). |
| Convenciones | Un cuerpo sin Content-Type también es 415. Una petición rechazada por scope (403 insufficient_scope) cuenta contra el límite y lleva X-RateLimit-*, como cualquier otra respuesta con clave válida. |
| Errores | forbidden, method_not_allowed y not_implemented siguen en la enumeración pero quedan marcados como reservados: hoy ningún endpoint los devuelve con el sobre JSON. Ver Errores. |
21 de septiembre de 2026 · rotación del secreto con solape
| Área | Qué hay |
|---|---|
| Webhooks | Nuevo POST /webhooks/{id}/rotate-secret con overlap_minutes (obligatorio, 0–1440). Devuelve el secreto nuevo una sola vez y, durante la ventana, cada entrega lleva dos firmas en X-WAT-Signature (v1=nueva,v1=anterior). Ver Firmas. |
| Webhooks | Una entrega que se queda a medias (el proceso muere antes de escribir el resultado) vuelve sola a la cola pasado el plazo; puede llegarte duplicada con el mismo X-WAT-Event-Id. Ver Reintentos. |
v1.0 · 18 de septiembre de 2026
Primera versión pública de la WAT API.
| Área | Qué hay |
|---|---|
| Autenticación | Claves wat_live_ en Authorization: Bearer. Scopes por clave ⊆ integración. GET /integrations/me. El prefijo wat_test_ está previsto en el formato, pero no hay servidor de pruebas: ver Entornos. |
| Reservas | GET /bookings con filtros de estado, cliente, fechas y external_id; GET /bookings/{id} por UUID o número de reserva. passenger y pricing por scope. |
| Catálogo | GET /customers, /drivers, /vehicles (lista y detalle). |
| Eventos | GET /events con filtro por tipo y recurso. |
| Webhooks | CRUD, prueba y entregas. Ocho eventos de reserva. Firma HMAC-SHA256 v1=. Reintentos 30 s → 32 min, 8 intentos; desactivación a los 100 fallos. |
| Identificadores externos | GET/PUT/DELETE /bookings/{id}/external-id. |
| Convenciones | Errores { error: { code, message, request_id } }, cursor firmado, X-WAT-Request-Id, Idempotency-Key, límites 600/1200/300 por minuto. |
| Contrato | openapi.yaml (OpenAPI 3.1) con x-scopes por operación. |
Previsto (sin fecha)
- Escritura de reservas (
bookings:create,bookings:write,bookings:cancel). - Facturas y cobros (
invoices:read,payments:read,billing:read). - Posición del vehículo en un servicio (
tracking:read). - Identificadores externos para clientes, conductores y vehículos.
- Reenvío manual de una entrega de webhook.