Alojando / Desarrolladores

API y webhooksConectá Alojando con tu propio sistema

Una API de lectura para traer alojamientos, reservas de todos los canales (Airbnb, Booking, web propia, manuales…) y mensajes de huéspedes, y webhooks para enterarte en minutos cuando entra, cambia o se cancela una reserva. Incluida en todos los planes.

Cómo empezar

  1. En el panel, entrá a Configuración → API y webhooks y creá una clave. Se muestra una sola vez: guardala en un lugar seguro.
  2. Mandala en cada pedido, en el encabezado Authorization como Bearer.
  3. Probá con el pedido de abajo: te devuelve tus alojamientos.
curl https://alojando.app/api/v1/alojamientos \
  -H "Authorization: Bearer alj_live_…"

Qué se puede leer

RutaQué devuelve
GET/alojamientosLos alojamientos del negocio.
GET/reservasReservas de todos los canales que se superponen con el rango. Parámetros: desde, hasta (AAAA-MM-DD; por defecto hace 30 días y dentro de un año, máximo 800 días), alojamiento, estado (confirmada, pendiente, cancelada, finalizada; separados por coma), limite (hasta 500) y pagina.
GET/reservas/{id}Una reserva.
GET/conversacionesConversaciones con huéspedes de los portales. Parámetros: actualizadas_desde, limite, pagina.
GET/conversaciones/{id}Una conversación.
GET/conversaciones/{id}/mensajesLos mensajes de una conversación, del más viejo al más nuevo. Parámetros: desde, limite.

Así se ve una reserva

{
  "id": "ical_cmv0bqsl0004hhbeengd9zff4",
  "alojamiento": { "id": "cmf2…", "nombre": "Depto Palermo 3B" },
  "canal": "airbnb",
  "canal_nombre": "Airbnb",
  "estado": "confirmada",
  "check_in": "2026-11-20",
  "check_out": "2026-11-24",
  "noches": 4,
  "huespedes": 2,
  "huesped": { "nombre": "Ana Pérez", "email": null, "telefono": "+54 9 11 5555-0000" },
  "codigo_confirmacion": "HMXXXXXXXX",
  "importe": {
    "moneda": "USD", "total": 412, "alojamiento": 372, "limpieza": 40,
    "huesped_adicional": null, "ajuste": null, "comision_portal_pct": 15.5
  },
  "pago": { "estado": null },
  "creada_en": "2026-10-14T13:02:11.000Z",
  "cancelada_en": null
}

El check_out es el día de salida (esa noche no se cuenta). Un dato que no tenemos va en null: por ejemplo, un calendario externo por iCal no trae importes ni datos del huésped, y no los completamos con estimaciones.

Webhooks

En el mismo panel agregás la dirección de tu servidor y elegís los eventos. Los cambios se revisan cada 5 minutos y cada aviso llega como un POST con un cuerpo JSON:

{
  "id": "evt_5f0c…",
  "evento": "reserva.creada",
  "creado_en": "2026-10-14T13:05:00.000Z",
  "datos": { "reserva": { … } }
}
reserva.creadaEntró una reserva nueva, de cualquier canal.
reserva.modificadaCambiaron fechas, huéspedes, importe o estado de pago.
reserva.canceladaSe canceló una reserva. Si desapareció del origen, viene con motivo "eliminada".
mensaje.recibidoUn huésped escribió por Airbnb, Booking u otro portal.

Verificá la firma. Cada aviso trae el encabezado X-Alojando-Firma con la forma t=<unix>,v1=<hex>: un HMAC-SHA256 de "<t>.<cuerpo>" con el secreto del webhook (empieza con whsec_). Calculalo sobre el cuerpo tal como llegó, antes de parsearlo, y descartá los avisos con un t de más de 5 minutos.

import { createHmac, timingSafeEqual } from 'crypto'

// cuerpo: el cuerpo crudo (string), tal como llegó
function firmaValida(cuerpo, encabezado, secreto) {
  const partes = Object.fromEntries(encabezado.split(',').map((p) => p.split('=')))
  const t = Number(partes.t)
  if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false
  const esperada = createHmac('sha256', secreto).update(`${t}.${cuerpo}`).digest('hex')
  const a = Buffer.from(esperada)
  const b = Buffer.from(partes.v1 || '')
  return a.length === b.length && timingSafeEqual(a, b)
}

Reintentos. Respondé con un código 2xx en menos de 10 segundos. Si no, reintentamos al minuto, a los 5 y 30 minutos, a las 2, 6, 12 y 24 horas. El encabezado X-Alojando-Envio es el mismo en todos los reintentos: usalo para no procesar dos veces el mismo aviso. Un webhook que falla 50 veces seguidas se pausa y se reactiva desde el panel. Con "Mandar prueba" verificás la conexión en el acto.

Límites y reglas

  • Es solo lectura: desde la API no se crean ni se modifican reservas.
  • Hasta 120 pedidos por minuto por clave. Si te pasás, la respuesta es 429 con el encabezado Retry-After.
  • Las fechas van en AAAA-MM-DD y los momentos en ISO 8601 (UTC).
  • Los errores tienen siempre la misma forma: { "error": { "codigo", "mensaje" } }.
  • Cada clave lee los datos de UN negocio, incluidos nombre, mail y teléfono de los huéspedes. Tratala como una contraseña; si se filtra, revocala desde el panel.

Preguntas frecuentes

¿Tiene costo?

No. La API y los webhooks están incluidos en todos los planes.

¿Puedo crear o cambiar reservas por la API?

Por ahora no: la API es de lectura. Las reservas se cargan desde el panel o entran solas por los canales conectados.

Solo quiero ver mis reservas en Google Calendar. ¿Necesito la API?

No. En el calendario de cada alojamiento, "Vincular calendarios" → "Exportar calendario" te da un enlace que Google Calendar suscribe desde "Desde URL".

¿Qué tan rápido llegan los avisos?

Los cambios se revisan cada 5 minutos, así que un aviso llega, en general, dentro de esos 5 minutos.

Empezá hoy

Traé tus anuncios de Airbnb y en 15 minutos estás operando.

Importás tus alojamientos, conectás los portales y tu equipo recibe la primera tarea por WhatsApp. Sin tarjeta, sin permanencia, sin comisión por reserva.

Probar 30 días gratis Ver un día con AlojandoUS$ 10 por alojamiento por mes después de la prueba. Cancelás cuando quieras.