PMS · Sistema de Gestión de Propiedades Hoteleras
API REST · V1 — OpenAPI 3.0 — Bearer Token (operadores de hotel) — API Key (integraciones externas)
Toda esta API vive bajo /api/v1, y expone dos formas de autenticación según quién
consume el endpoint. Si eres un operador de hotel, autentícate con OTP para obtener
un Bearer token. Si eres una integración externa, autentícate con una API Key en el
header X-Api-Key — no necesitas Bearer token. El detalle completo de ambos
mecanismos está en el documento de Autenticación y Sesiones.
Visión general
Hoy la API permite:
- Autenticarse como operador de hotel y listar/filtrar las reservas de su
establecimiento. - Registrar y consultar consumos externos (ej. restaurante/bar) asociados a la
reserva de un huésped, para integraciones de punto de venta. - Recibir eventos de reserva desde channel managers/OTAs y notificaciones de
facturación electrónica (integraciones entrantes).
Glosario del dominio
| Término | Definición |
|---|---|
| Hotel | Establecimiento hotelero, unidad sobre la que operan las reservas. |
| Reserva | Estadía de un huésped en un hotel, con fecha de check-in/check-out. |
| Stage | Etapa operacional de una reserva: confirm_registered (confirmada, sin check-in), checkin_registered (huésped hospedado), checkout_registered (estadía finalizada). |
| Pre-reserva / Post-reserva | Filtros sobre si el check-in de la reserva ya pasó o está por venir. |
| Habitación | Unidad física del hotel asignada a una reserva. |
| Huésped | Persona hospedada, identificada por su número de documento. |
| Consumo externo | Cargo (ej. restaurante/bar) que un sistema externo registra sobre la reserva activa de un huésped. |
| Cuenta por cobrar | Estado (pending) en el que queda un consumo externo registrado hasta que recepción lo cobra manualmente al huésped. |
Autenticación
Dos mecanismos, según quién consume la API:
- Bearer token (OTP) — operadores de hotel.
- API Key — integraciones externas (Consumos Externos).
El flujo completo, ejemplos de request/response y límites de cada uno están en el
documento Autenticación y Sesiones.
Entornos y URLs base
| Entorno | URL | Descripción |
|---|---|---|
| Producción | https://aos.ayenda.co | Entorno real. |
| Staging | http://staging-aos.ayenda.co | Entorno de pruebas. Sin TLS — usar solo HTTP. |
Convenciones
Estándar de respuestas Index (paginación)
Todos los endpoints de listado retornan la paginación en los headers de la
respuesta y los datos en el body bajo la llave data. Los filtros aplicados
se reflejan en filters.
Headers de respuesta:
Current-Page: 1
Page-Limit: 20
Total-Count: 150
Total-Pages: 8
| Header | Tipo | Descripción |
|---|---|---|
Current-Page | integer | Número de la página actual. |
Page-Limit | integer | Cantidad máxima de elementos por página. |
Total-Count | integer | Total de registros disponibles. |
Total-Pages | integer | Total de páginas disponibles. |
Body de respuesta:
{
"data": [
{ "id": 1001, "status": "active" }
],
"filters": {
"stage": "checkin_registered",
"pre_reservations": false,
"post_reservations": false
}
}Fechas
Formato YYYY-MM-DD para fechas, ISO 8601 (2024-03-15T14:30:00.000Z) para
timestamps.
Filtrado
Los parámetros de filtro se envían como query params planos (ej. stage,
pre_reservations) o anidados con la notación campo[subcampo] para rangos (ej.
search_all_date_fields[start_date]). Los filtros aplicados se reflejan de vuelta
en la llave filters de la respuesta — ver ejemplo de paginación arriba.
Moneda
Cada hotel tiene su propia moneda configurada (ej. COP, MXN, PEN — el PMS opera
hoteles en varios países). Los montos numéricos (ej. amount en Consumos
Externos) no incluyen un código de moneda en la respuesta ni en el request —
se asume la moneda configurada del hotel correspondiente, que hoy no se expone vía
API. Si integras con hoteles en más de un país, confirma la moneda de cada hotel
por fuera de la API con tu contacto de integración.
Manejo de errores
Los endpoints de error retornan un objeto errors con la misma estructura. El
campo details es opcional y solo aparece cuando hay información adicional
relevante.
Sin detalles adicionales:
{ "errors": { "code": "unauthorized", "title": "Phone is blocked" } }Con detalles adicionales:
{
"errors": {
"code": "too_many_requests",
"title": "Login attempt limit exceeded",
"details": "Maximum 5 attempts per hour. Try again later."
}
}| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
code | string | Sí | Identificador del error. |
title | string | Sí | Descripción legible del error. |
details | string | No | Información adicional para diagnosticar el problema. |
Catálogo de códigos
| Código | Estado | Significado |
|---|---|---|
200 | OK | La solicitud fue exitosa y la respuesta contiene datos. |
201 | Created | El recurso fue creado exitosamente. |
204 | No Content | La solicitud fue exitosa pero no hay datos que retornar. |
400 | Bad Request | Falta un parámetro requerido o la solicitud está mal formada. |
401 | Unauthorized | El token/API Key es inválido, o el teléfono está bloqueado. |
404 | Not Found | El recurso solicitado no existe. |
422 | Unprocessable Entity | Los parámetros enviados son inválidos o están mal formados. |
429 | Too Many Requests | Se superó el límite de intentos de inicio de sesión (5 por hora). |
500 | Internal Server Error | Error inesperado durante el procesamiento. |
503 | Service Unavailable | El proveedor de OTP (SMS/WhatsApp) falló. |
Versionado y changelog
La API está en v1, estable. No hay cambios incompatibles anunciados — cualquier
cambio que rompa compatibilidad se comunicará con anticipación antes de aplicarse.
Changelog:
| Fecha | Cambio |
|---|---|
| 2026-07-24 | Documento inicial para integradores externos. |
Referencia de API (consumible)
| Módulo | Descripción |
|---|---|
| Autenticación y Sesiones | Envío OTP, iniciar sesión y cerrar sesión (Bearer token) |
| Reservas | Listado y filtrado de reservas del hotel (Bearer token) |
| Consumos Externos | Consultar reserva activa por habitación y registrar consumo del huésped (API Key) |
Próximamente: Huéspedes, Habitaciones y Disponibilidad, Tarifas, Housekeeping.
Integraciones entrantes (webhooks)
Estos endpoints los invoca el sistema externo, no el integrador — la plataforma los
expone para recibir sus eventos.
| Módulo | Descripción |
|---|---|
| Connectivity Checks | Health check y diagnóstico de conectividad |