Cómo empezar
Todas las llamadas van por HTTPS a esta dirección:
https://pbcxolfixmhkoxhxylnb.supabase.co/functions/v1/partner-api
Autenticación
Cada petición debe incluir la llave en el header X-API-Key.
La llave se les entrega por separado, no aparece en este documento.
X-API-Key: kz_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
La llave identifica a Lezat y define a qué puede acceder. Si en algún momento creen que se expuso, avísennos y la reemplazamos: revocar y emitir una nueva toma un minuto.
Formato
Las respuestas son JSON. Las fechas van como AAAA-MM-DD y los
precios en pesos colombianos, sin decimales.
Consultar disponibilidad
Devuelve las suites que se pueden vender en esas fechas, con su precio y un enlace de reserva listo para enviar. Consulta el estado real del sistema en el momento de la llamada.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
modalidad |
texto |
noche (por defecto), 3h, 6h o
12h. Con un paquete por horas se usan
fecha y hora_inicio en lugar de
checkin y checkout.
|
checkin · |
fecha | Día de entrada. Obligatorio por noche. |
checkout · |
fecha | Día de salida. Obligatorio por noche, y posterior a la entrada. |
fecha |
fecha | Día del paquete. Obligatorio cuando la modalidad es por horas. |
hora_inicio |
texto |
Hora de entrada en formato HH:MM de 24 horas.
Obligatorio cuando la modalidad es por horas. La salida se calcula
sola y puede caer al día siguiente.
|
sede |
texto |
calle-100 o usaquen. Si se omite, devuelve
las dos sedes.
|
huespedes |
entero | Número de personas. Si se envía, se excluyen las suites que no las admiten. |
Ejemplo
curl "https://pbcxolfixmhkoxhxylnb.supabase.co/functions/v1/partner-api/disponibilidad\
?checkin=2026-09-15&checkout=2026-09-17&sede=calle-100&huespedes=2" \
-H "X-API-Key: SU_LLAVE"
Respuesta
{
"consulta": {
"checkin": "2026-09-15",
"checkout": "2026-09-17",
"noches": 2,
"sede": "Calle 100",
"huespedes": 2
},
"moneda": "COP",
"impuestos": {
"iva_pct": 19,
"incluido_en_los_precios": true,
"nota": "Los precios de esta respuesta ya incluyen IVA del 19%..."
},
"suites": [
{
"id": "9d3e6dd5-7b4e-4bfa-b5fa-022b771123b1",
"nombre": "Suite Star",
"sede": "Calle 100",
"descripcion": "Ideal para negocios y familias...",
"capacidad_maxima": 4,
"unidades_libres": 3,
"disponible": true,
"precio_noche_desde": 259900,
"precio_total": 519800,
"precio": {
"subtotal": 436806,
"iva": 82994,
"total": 519800,
"iva_pct": 19
},
"tiene_oferta": false,
"foto": "https://.../calle100-suite-star.jpeg",
"enlace_reserva": "https://reservas.kazalivingbog.com/?sede=calle-100&checkin=..."
}
]
}
| Campo | Significado |
|---|---|
unidades_libres | Cuántas suites de ese tipo quedan disponibles. |
disponible | false cuando está agotada. Las agotadas se devuelven igual, al final de la lista. |
precio_noche_desde | La noche más económica del rango, con IVA. Puede variar entre noches si hay una oferta parcial. |
precio_total | El total de la estancia con IVA. Es el número que conviene decirle al cliente: es exactamente lo que va a cobrar la pasarela. |
precio | El desglose del total: subtotal (sin IVA), iva y total. subtotal + iva siempre da total, sin diferencias de redondeo. Cuando la consulta trae huespedes mayor a 2, incluye además huespedes_adicionales y recargo_huespedes, que ya vienen sumados en el subtotal. |
foto | URL pública de la foto principal, entre 200 y 340 KB. |
fotos | La galería completa, en el orden en que conviene mostrarla. Siempre es una lista, aunque la suite tenga una sola foto. |
enlace_reserva | Enlace que abre esa suite con las fechas puestas. Sirve cuando aún no tienen los datos del cliente. |
Paquetes por horas
Kaza vende paquetes de 3, 6 y 12 horas en Habitación Ejecutiva y
Suite Standard de Calle 100. Se consultan por la misma ruta,
con modalidad, fecha y hora_inicio. La
respuesta tiene la misma forma; el precio del paquete viene en
precio_total y precio_noche_desde llega en
null, porque no aplica.
GET /disponibilidad?modalidad=6h&fecha=2026-09-25&hora_inicio=14:00
{
"consulta": {
"modalidad": "6h",
"checkin": "2026-09-25",
"checkout": "2026-09-25",
"noches": null,
"hora_inicio": "14:00",
"hora_fin": "20:00",
"sede": null,
"huespedes": null
},
"moneda": "COP",
"suites": [ ... ]
}
Si el paquete cruza la medianoche, checkout es el día siguiente:
un paquete de 12 horas que empieza a las 20:00 termina a las 08:00 del otro día.
Las suites que no se venden por horas simplemente no aparecen en la respuesta.
Estadías largas
Esta ruta devuelve tarifa de lista, y Kaza no vende así las estadías largas: las negocia. De 14 noches en adelante el precio que acuerda un asesor suele quedar bastante por debajo del que ve aquí, así que cotizar con estos valores sería pedir más de lo que cobraría Kaza. Cuando la consulta entra en ese rango, la respuesta incluye:
{
"aviso_estadia_larga": {
"escalar_a_asesor": true,
"instruccion": "Kaza Living negocia las estadías de 14 noches o más...",
"sugerencia_para_el_huesped": "Para estadías de dos semanas o más manejamos
tarifas especiales, mejores que la publicada. Te comunico con un asesor..."
}
}
Los dos textos tienen destinatarios distintos.
instruccion está dirigido al bot y no conviene repetírselo al
huésped: está en imperativo y sonaría raro leído en voz alta.
sugerencia_para_el_huesped sí se puede usar tal cual, o adaptarlo
al tono de la conversación.
Cuando venga este aviso, lo recomendable es no cotizar ni generar enlace y pasar la conversación a un asesor.
Crear el enlace con los datos del huésped
Cuando ya tienen los datos del cliente, este endpoint los recibe y devuelve un enlace personalizado. El cliente solo tiene que revisar, confirmar y pagar.
Los datos personales no viajan en la URL. Un enlace queda en el historial del navegador y se reenvía por WhatsApp, así que poner la cédula o el teléfono ahí los expondría. En su lugar el enlace lleva un código que los representa, se canjea una sola vez y vence.
Cuerpo
| Campo | Tipo | Descripción |
|---|---|---|
modalidad | texto | noche (por defecto), 3h, 6h o 12h. |
checkin · | fecha | Día de entrada. Obligatorio por noche. |
checkout · | fecha | Día de salida. Obligatorio por noche. |
fecha | fecha | Día del paquete. Obligatorio cuando la modalidad es por horas. |
hora_inicio | texto | Hora de entrada HH:MM. Obligatorio cuando la modalidad es por horas. |
huesped.nombre · | texto | Único dato obligatorio del huésped. |
suite_id | texto | El id que devolvió la consulta de disponibilidad. Si se envía, el enlace abre esa suite directamente. |
sede | texto | calle-100 o usaquen. Se deduce sola si mandan suite_id. |
huespedes | entero | Número de personas. |
huesped.tipo_documento | texto | CC, CE, PA o NIT. |
huesped.documento | texto | Número de documento. |
huesped.email | texto | Correo del huésped. |
huesped.telefono | texto | Teléfono del huésped. |
huesped.nacionalidad | texto | Ej. Colombiana. |
Los campos marcados con · son obligatorios. Entre más datos envíen, menos tiene que llenar el cliente.
Ejemplo
curl -X POST "https://pbcxolfixmhkoxhxylnb.supabase.co/functions/v1/partner-api/pre-reserva" \
-H "X-API-Key: SU_LLAVE" \
-H "Content-Type: application/json" \
-d '{
"checkin": "2026-09-15",
"checkout": "2026-09-17",
"suite_id": "9d3e6dd5-7b4e-4bfa-b5fa-022b771123b1",
"huespedes": 3,
"huesped": {
"nombre": "María Restrepo",
"tipo_documento": "CC",
"documento": "1020304050",
"email": "maria@ejemplo.com",
"telefono": "3001234567",
"nacionalidad": "Colombiana"
}
}'
Respuesta
{
"codigo": "c77ea832ec9246879594f2c1141c91fc",
"enlace": "https://reservas.kazalivingbog.com/?pre=c77ea832...&suite=9d3e6dd5...",
"expira_at": "2026-09-01T15:30:00.000Z",
"vigencia_horas": 2,
"aviso": "El enlace vence en 2 horas..."
}
El campo enlace es lo que se le manda al cliente por el chat.
Cómo funciona el enlace
Al abrirlo, el cliente encuentra el formulario de reserva con todo puesto:
- Las fechas y el número de personas que cotizaron.
- La suite que eligieron, ya abierta, si enviaron
suite_id. - Sus datos personales, si los enviaron.
Solo le queda revisar y pagar. El pago se procesa con PayU dentro de nuestra plataforma, y al confirmarse la reserva entra automáticamente al sistema de Kaza Living y el huésped recibe su correo de confirmación.
Si no envían suite_id, el enlace muestra las suites disponibles
para esas fechas y el cliente escoge. Es útil cuando todavía está comparando.
Qué pasa si el enlace vence
El enlace tiene 2 horas de vigencia. No es una restricción arbitraria: entre que ustedes cotizan y el cliente paga pueden pasar horas, y en ese tiempo la suite puede venderse por otro canal.
Dentro de esas 2 horas el cliente puede abrirlo las veces que necesite y sus datos siguen precargados. Si empieza el pago y lo abandona, puede volver al mismo enlace y retomar donde iba. El enlace se cierra únicamente cuando el pago queda aprobado.
Pasadas las 2 horas, al abrirlo el cliente ve un aviso que le explica que sus datos no quedaron cargados y que puede reservar igual llenando el formulario. No se queda sin entender qué pasó.
Cómo regenerar un enlace vencido. No hace falta nada
especial: se vuelve a llamar POST /pre-reserva con los mismos
datos del huésped y se recibe un código nuevo con sus 2 horas. Conviene
consultar disponibilidad antes, por si la suite ya se vendió.
También vale la pena que el bot no prometa una suite como asegurada: hasta que no se paga, no está reservada. La disponibilidad se revalida en el momento del pago, así que si la suite se vendió antes, el sistema lo bloquea en vez de generar una sobreventa.
Errores
Los errores llegan con el código HTTP correspondiente y un cuerpo con el detalle:
{ "error": "Se requieren 'checkin' y 'checkout' en formato AAAA-MM-DD" }
| Código | Qué significa |
|---|---|
400 | Falta un dato o llegó mal. El mensaje dice cuál. |
401 | Falta la llave o no es válida. |
403 | La llave es válida pero no tiene permiso para esa operación. |
404 | La ruta no existe. Revisar la dirección. |
500 | Error de nuestro lado. Si se repite, avísennos con la hora aproximada: registramos cada petición y podemos rastrearla. |
Notas
Precios
Los valores que devuelve la API son los que ve el cliente en la plataforma.
Todos los precios de la respuesta incluyen IVA del 19%, y el desglose viene aparte en precio. El total es exactamente lo que cobra la pasarela al pagar.
La excepción: el alojamiento es exento de IVA para huéspedes extranjeros y para estadías mensuales. En esos casos el valor a pagar es el subtotal, no el total. Como la nacionalidad se captura al reservar y no al cotizar, lo recomendable es cotizar con el total y aclarar que si el huésped es extranjero el alojamiento queda exento.
Huéspedes adicionales
La tarifa cubre hasta 2 personas. A partir de la tercera se
cobra un recargo por persona: por cada noche en estadías por
noche, y una sola vez en los paquetes por horas.
No hay que calcularlo: si la consulta incluye huespedes, el
recargo ya viene sumado en precio_total y discriminado en
precio.recargo_huespedes. Es el mismo valor que cobra la página
de pago, así que lo que cotice el bot y lo que pague el huésped coinciden.
Si huespedes no se envía, el precio se calcula para 2 personas.
Las suites cuya capacidad sea menor al número consultado no aparecen en la
respuesta.
Fotos
Cada suite trae foto con la imagen principal y fotos
con la galería completa, en el orden en que conviene mostrarla: se entra, se
ve el espacio, después el detalle. fotos siempre es una
lista, aunque la suite tenga una sola imagen, para que no haya que
manejar dos casos distintos.
Son URLs públicas, sin autenticación, entre 200 y 340 KB cada una — tamaño
cómodo para enviarlas por WhatsApp. Salen directo del sistema, así que cuando
Kaza cambie o agregue fotos el bot las toma sin que haya que tocar nada.
Hoy tienen galería la Habitación Arena y la Suite
Tierra de Usaquén y la Suite Star de Calle 100. Las
demás traen su foto principal mientras se cargan las suyas.
Pruebas
Pueden probar directamente contra esta dirección. Consultar disponibilidad no modifica nada, y una pre-reserva solo guarda los datos para el enlace: no bloquea inventario ni crea una reserva. La reserva se crea únicamente cuando el cliente paga.
Dudas
Cualquier cosa que necesiten y no esté acá, escríbannos. Si el bot requiere un dato adicional en la respuesta, se puede agregar.