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
- En el panel, entrá a Configuración → API y webhooks y creá una clave. Se muestra una sola vez: guardala en un lugar seguro.
- Mandala en cada pedido, en el encabezado Authorization como Bearer.
- 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
| Ruta | Qué devuelve |
|---|---|
GET/alojamientos | Los alojamientos del negocio. |
GET/reservas | Reservas 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/conversaciones | Conversaciones con huéspedes de los portales. Parámetros: actualizadas_desde, limite, pagina. |
GET/conversaciones/{id} | Una conversación. |
GET/conversaciones/{id}/mensajes | Los 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.creada | Entró una reserva nueva, de cualquier canal. |
reserva.modificada | Cambiaron fechas, huéspedes, importe o estado de pago. |
reserva.cancelada | Se canceló una reserva. Si desapareció del origen, viene con motivo "eliminada". |
mensaje.recibido | Un 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.
Calculadora
¿Cuánto le pagás por año a los portales?
Estimación orientativa con comisiones de referencia del 15%. Abrir la calculadora completa, donde ajustás el mix de canales y el porcentaje de cada portal.
Precios
Un precio por alojamiento. Todo incluido.
US$ 10 por alojamiento por mes, y hasta un 40 % menos cuantos más administrás. Sin comisión por reserva, sin permanencia, sin funciones que se desbloquean después.
- 1 a 9US$ 10precio base
- 10 a 19US$ 820 % menos
- 20 a 49US$ 7,5025 % menos
- 50 a 99US$ 730 % menos
- 100 a 199US$ 6,5035 % menos
- 200 o másUS$ 640 % menos
- 0 % de comisión por reserva
- Sin permanencia
- Todas las funciones desde el día 1
- El precio se ajusta solo
30 días gratis, sin tarjeta. En dólares por Stripe o el equivalente en tu moneda por Mercado Pago.