Introducción

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. Para registrar consumos, además
envía el token de tu socio de consumo en el header X-Api-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, listar/filtrar las reservas de su
    establecimiento y crear reservas nuevas.
  • Consultar un hotel por su número de documento y las reservas activas de un
    huésped, y registrar consumos externos (ej. restaurante/bar) sobre esa reserva,
    para integraciones de punto de venta.
  • Registrar y actualizar los socios de consumo (ej. un restaurante o bar)
    autorizados a cargar consumos a las reservas de un hotel.
  • Recibir eventos de reserva desde channel managers/OTAs y notificaciones de
    facturación electrónica (integraciones entrantes).

Glosario del dominio

TérminoDefinición
HotelEstablecimiento hotelero, unidad sobre la que operan las reservas.
ReservaEstadía de un huésped en un hotel, con fecha de check-in/check-out.
StageEtapa operacional de una reserva: confirm_registered (confirmada, sin check-in), checkin_registered (huésped hospedado), checkout_registered (estadía finalizada).
Pre-reserva / Post-reservaFiltros sobre si el check-in de la reserva ya pasó o está por venir.
HabitaciónUnidad física del hotel asignada a una reserva.
Tipo de habitaciónCategoría de habitación del hotel (ej. Doble). Al crear una reserva se pide por room_type_id y el PMS asigna la habitación.
HuéspedPersona hospedada, identificada por su número de documento.
Documento del hotelNúmero de documento (ej. NIT) de la persona natural o jurídica dueña del hotel. Se usa para resolver el hotel_id.
Consumo externoCargo (ej. restaurante/bar) que un sistema externo registra sobre la reserva activa de un huésped.
Cuenta por cobrarEstado (pending) en el que queda un consumo externo registrado hasta que recepción lo cobra manualmente al huésped.
Socio de consumoProveedor externo (ej. restaurante o bar) autorizado a registrar consumos para las reservas de un hotel. Su Token se envía en el header X-Api-Token al registrar un consumo. Solo los socios activos pueden registrar consumos; la activación se gestiona desde el PMS.

Autenticación

Dos mecanismos, según quién consume la API:

  • Bearer token (OTP) — operadores de hotel.
  • API Key (X-Api-Key) — integraciones externas (Consumos Externos y Socios
    de Consumo).
    • Al registrar un consumo (POST /api/v1/external_consumptions) se envía además
      el header X-Api-Token con el Token del socio de consumo, que retorna el
      registro del socio.

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

EntornoURLDescripción
Producciónhttps://aos.ayenda.coEntorno real.
Staginghttp://staging-aos.ayenda.coEntorno 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
HeaderTipoDescripción
Current-PageintegerNúmero de la página actual.
Page-LimitintegerCantidad máxima de elementos por página.
Total-CountintegerTotal de registros disponibles.
Total-PagesintegerTotal 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."
  }
}
CampoTipoObligatorioDescripción
codestringSíIdentificador del error.
titlestringSíDescripción legible del error.
detailsstringNoInformación adicional para diagnosticar el problema.

Catálogo de códigos

CódigoEstadoSignificado
200OKLa solicitud fue exitosa y la respuesta contiene datos.
201CreatedEl recurso fue creado exitosamente.
204No ContentLa solicitud fue exitosa pero no hay datos que retornar.
400Bad RequestFalta un parámetro requerido o la solicitud está mal formada.
401UnauthorizedEl token/API Key es inválido, el teléfono está bloqueado, o el X-Api-Token falta, no existe o pertenece a un socio inactivo.
404Not FoundEl recurso solicitado no existe.
422Unprocessable EntityLos parámetros enviados son inválidos o están mal formados.
429Too Many RequestsSe superó el límite de intentos de inicio de sesión (5 por hora).
500Internal Server ErrorError inesperado durante el procesamiento.
503Service UnavailableEl proveedor de OTP (SMS/WhatsApp) falló.

Versionado y changelog

La API está en v1, estable. Cualquier cambio que rompa compatibilidad se
comunicará con anticipación antes de aplicarse y queda marcado como
incompatible en el changelog.

Changelog:

FechaCambio
2026-09-28Nuevo módulo Socios de Consumo: registrar (POST /api/v1/hotel_consumption_partners) y actualizar (PATCH /api/v1/hotel_consumption_partners/{id}) socios de consumo.
2026-09-28Incompatible: POST /api/v1/external_consumptions ahora exige el header X-Api-Token (token del socio de consumo), además de X-Api-Key.
2026-08-26Nuevo endpoint Crear una reserva de hotel (POST /api/v1/hotels/{hotel_id}/reservations) en Reservas.
2026-08-10Nuevo endpoint Consultar hotel por número de documento (GET /api/v1/hotels/find_by) en Consumos Externos.
2026-08-03GET /api/v1/reservations/find_by ahora busca solo por hotel_id + identification_number (ya no requiere room_name) y retorna todas las reservas activas del huésped.
2026-07-24Documento inicial para integradores externos.

Referencia de API (consumible)

MóduloEndpointDescripciónAutenticación
Autenticación y SesionesPOST /api/v1/sessions/send_otpEnviar OTP por SMS y WhatsAppNinguna
POST /api/v1/sessionsIniciar sesión con OTPNinguna
DELETE /api/v1/sessionsCerrar sesiónBearer token
ReservasGET /api/v1/hotels/reservationsListar y filtrar reservas del hotelBearer token
POST /api/v1/hotels/{hotel_id}/reservationsCrear una reserva de hotelBearer token
Consumos ExternosGET /api/v1/hotels/find_byConsultar hotel por número de documentoAPI Key
GET /api/v1/reservations/find_byConsultar reservas activas del huésped por documentoAPI Key
POST /api/v1/external_consumptionsRegistrar consumo del huéspedAPI Key + X-Api-Token
Socios de ConsumoPOST /api/v1/hotel_consumption_partnersRegistrar un socio de consumoAPI Key
PATCH /api/v1/hotel_consumption_partners/{id}Actualizar un socio de consumoAPI 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óduloDescripción
Connectivity ChecksHealth check y diagnóstico de conectividad