Hotelumo Hotel Rooms & Operations

Revise la disponibilidad del hotel, el estado de las habitaciones y la limpieza, los planes de tarifas, los extras y las operaciones agregadas de estadía a través de un servidor MCP de solo lectura con OAuth.

Servidor MCP alojado

npx add-mcp 'https://mcp.hotelumo.com/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Impulsa tu propiedad desde tu propio código o asistente de IA: una API REST con claves de alcance limitado, webhooks firmados y un MCP de solo lectura con ámbito de inquilino para operaciones hoteleras seguras.

Claves de API

Obtén una clave y autentícate

La API REST de Hotelumo permite que un channel manager, un motor de reservas, un CRM o tu propio back office hagan lo que hace el panel: leer y escribir reservas y huéspedes, mantener sincronizadas las habitaciones y los tipos de habitación, publicar planes de tarifas y precios por día, y consultar disponibilidad.

Crea una clave de API en el panel de Hotelumo. El secreto se muestra una sola vez, cuando se crea la clave, y nunca más: guárdalo en un lugar seguro. Una clave siempre pertenece a una organización; además, se puede vincular a un solo hotel, en cuyo caso cada solicitud que realice se limita a ese hotel y el hotel nunca tiene que enviarse.

Autentica cada solicitud con autenticación básica HTTP que lleve solo el secreto de la clave, codificado en base64, en el encabezado Authorization.

# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)

Cada endpoint se encuentra bajo https://api.hotelumo.com. Las solicitudes realizadas con una clave tienen límite de velocidad por clave; superar el límite devuelve 429.

Inicio rápido

Tus primeras tres llamadas

Lee las reservas de un hotel, verifica qué sigue siendo reservable durante las próximas dos semanas y luego envía precios de vuelta para un plan de tarifas.

# List the reservations of one of your hotels
curl "https://api.hotelumo.com/api/reservations?hotelId=HOTEL_ID&limit=20" \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# Read the next two weeks of availability for that hotel
curl https://api.hotelumo.com/api/hotels/HOTEL_ID/availability \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# Push prices back: a batch upsert keyed on (ratePlanId, date).
# price is in minor units of the rate plan's currency, so 12000 is 120.00.
curl -X POST https://api.hotelumo.com/api/dailyRates \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "values": [
      { "ratePlanId": "RATE_PLAN_ID", "date": "2026-08-01", "price": 12000 },
      { "ratePlanId": "RATE_PLAN_ID", "date": "2026-08-02", "price": 13500 }
    ]
  }'

Explora la referencia completa de la API: cada endpoint con sus parámetros, cuerpo de solicitud, respuestas y alcance requerido.

CLI

Interfaz de línea de comandos

Las mismas reservas, huéspedes, habitaciones, planes de tarifas y disponibilidad están disponibles desde tu terminal a través del CLI de hotelumo. Instálalo globalmente con npm, o ejecútalo ad hoc con npx.

La autenticación es un solo comando: hotelumo login abre tu navegador para iniciar sesión en tu cuenta de Hotelumo y guarda una sesión para comandos posteriores, sin necesidad de pegar una clave de API. Para uso desatendido, exporta HOTELUMO_API_KEY en su lugar y omite el paso de inicio de sesión por completo.

# Install once, globally
npm install -g hotelumo
# or run it ad hoc without installing
npx hotelumo --help

# Log in — opens your browser to sign in and stores a session
hotelumo login

# Who is arriving this month?
hotelumo reservations list --stayDateFrom 2026-08-01 --stayDateTo 2026-08-31

# What is still bookable for a two-night stay?
hotelumo availability check HOTEL_ID --checkInDate 2026-08-10 \
  --checkOutDate 2026-08-12

# Publish prices for a date range. price is in minor units, so 12000 is 120.00
hotelumo daily-rates set --hotelId HOTEL_ID --ratePlanId RATE_PLAN_ID \
  --dateFrom 2026-08-01 --dateTo 2026-08-31 --price 12000 --availability 4

Cada subcomando acepta --json para salida analizable, y hotelumo schema imprime todo el árbol de comandos como JSON, por lo que un script nunca tiene que extraer texto de ayuda.

El CLI es de código abierto en github.com/hotelumo/cli y se publica como hotelumo en npm. Ejecuta cualquier comando con --help para ver sus opciones.

Alcances

Privilegio mínimo por defecto

Cada clave lleva una lista de alcances, por lo que una integración que solo necesita leer tus reservas nunca obtiene la capacidad de cambiar tus precios. Las nuevas claves comienzan como solo lectura; amplíalas explícitamente en el panel. Una solicitud cuya clave carece del alcance que requiere un endpoint se rechaza con 403.

  • reservations:readLista reservas y lee una sola con sus habitaciones.
  • reservations:writeCrea, actualiza y elimina reservas.
  • guests:readLista el directorio de huéspedes y lee un solo huésped.
  • guests:writeCrea, actualiza y elimina huéspedes.
  • rooms:readLista habitaciones y tipos de habitación.
  • rooms:writeCrea habitaciones y tipos de habitación.
  • rates:readLista planes de tarifas y tarifas diarias, y lee la disponibilidad de un hotel.
  • rates:writeCrea planes de tarifas y actualiza precios diarios en lotes.

Una reserva o huésped que pertenece a otra organización responde 404 en lugar de 403, por lo que no se puede sondear un id para verificar su existencia.

Asistentes de IA

Operaciones hoteleras a través de MCP

Conecta ChatGPT, Claude, Cursor u otro asistente compatible con MCP a Hotelumo con un solo endpoint alojado. Inicia sesión con OAuth de Hotelumo; el conector tiene ámbito de inquilino, es de solo lectura y requiere el alcance hotelumo:read. No hay secreto de API que pegar en el host.

{
  "mcpServers": {
    "hotelumo": {
      "type": "http",
      "url": "https://mcp.hotelumo.com/mcp"
    }
  }
}
  • list_hotels · get_hotelResuelve tus hoteles y lee metadatos seguros de la propiedad.
  • get_hotel_availabilityEncuentra ofertas reservables de tipos de habitación y planes de tarifas para una estadía de hasta 30 noches.
  • get_hotel_schedule_summaryRevisa conteos agregados de llegadas, salidas, estadías en casa y estados para hasta 31 días.
  • list_room_types · get_room_type · list_roomsInspecciona el catálogo seguro de habitaciones, capacidad y estado operativo de las habitaciones.
  • list_rate_plans · list_daily_rates · list_extrasRevisa planes vendibles, precios diarios limitados y el catálogo de extras.
  • show_hotel_overviewRenderiza una tarjeta limitada de operaciones hoteleras en hosts de IA compatibles.

El conector público omite deliberadamente identidades de huéspedes y datos de contacto, registros individuales de reservas y asignación de habitaciones, identificadores de ocupantes, notas, documentos, códigos de acceso, datos de pago, credenciales, configuración de integraciones y metadatos arbitrarios. Los resultados del cronograma son solo conteos agregados; el conector no puede crear reservas, cambiar tarifas, tomar pagos ni modificar registros de Hotelumo.

La disponibilidad y los precios del catálogo se devuelven en unidades monetarias menores: por ejemplo, 12000 es 120.00 cuando la moneda del hotel usa dos decimales. Los resultados limitados que terminan en un signo más son límites inferiores, no totales completos.

Usa el endpoint MCP de producción o conéctate a través del listado de Hotelumo en un host de IA compatible después de que su publicación en el directorio esté activa.

Habilidades de agente

Enseña a tu agente de codificación Hotelumo

Hotelumo incluye Agent Skills: guías que siguen el estándar agentskills.io que enseñan a los agentes de codificación cómo ejecutar operaciones hoteleras con el CLI de hotelumo y el conector MCP, en lugar de adivinar comandos y herramientas.

# Install the Hotelumo skills into your coding agent
npx skills add hotelumo/skills

Un solo comando instala las habilidades en Claude Code, Cursor, Codex, Gemini CLI y cualquier otro agente que siga el estándar de Skills. El CLI también incluye las mismas guías, con versiones coincidentes con los comandos que envía: hotelumo skills get <name> imprime una bajo demanda.

Las dos guías no son intercambiables. La guía del CLI cubre la API REST completa, incluidas las escrituras; la guía de operaciones hoteleras cubre el conector MCP de solo lectura y su límite de privacidad.

Las habilidades son de código abierto en github.com/hotelumo/skills. Los usuarios de Claude también pueden instalar el plugin de Claude de Hotelumo, que incluye el conector junto con la habilidad: github.com/hotelumo/claude-plugin.

Webhooks

Webhooks firmados

Agrega una suscripción de webhook a un hotel y Hotelumo envía por POST los eventos que elegiste a tu servidor a medida que ocurren. Cada escritor los emite: la API REST, el panel, la página pública de reservas y los channel managers conectados.

  • reservation.createdSe creó una reserva, a través de la API, el panel, la página pública de reservas o un channel manager conectado.
  • reservation.updatedUna reserva cambió, incluidos su estado y habitaciones.
  • reservation.deletedSe eliminó una reserva.
  • guest.createdSe agregó un huésped.
  • guest.updatedSe editó un registro de huésped.
  • guest.deletedSe eliminó un huésped.
POST https://your-server.com/hotelumo-webhook

{
  "event": "reservation.created",
  "timestamp": 1719000000,
  "data": { "...": "..." }
}

Verifica la firma

Cada entrega lleva un encabezado X-Hotelumo-Signature de la forma t=timestamp,v1=firma, donde la firma es un HMAC-SHA256 de timestamp.body con clave del secreto de suscripción que se te mostró una vez cuando se creó la suscripción. Vuelve a calcularlo sobre el cuerpo sin procesar y compara antes de confiar en el payload.

import crypto from 'node:crypto'

// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
  const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
  if (!t || !v1) return false

  const expected = crypto
    .createHmac('sha256', secret)
    .update(\`${t}.${body}\`)
    .digest('hex')

  // timingSafeEqual throws on a length mismatch, so a malformed signature
  // has to be rejected before the comparison rather than by it.
  if (v1.length !== expected.length) return false

  return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}

La entrega es un único intento de mejor esfuerzo con un tiempo de espera de cinco segundos y sin reintentos, por lo que responde 2xx rápidamente y haz el trabajo de forma asíncrona. Un endpoint que falla veinte veces seguidas se desactiva automáticamente y debe reactivarse en el panel.

Comienza a construir