Kaza Living · Integración

API de disponibilidad y reservas

Documentación para el bot de WhatsApp de Lezat. Permite consultar disponibilidad y precios en tiempo real, y generar enlaces de reserva con los datos del huésped ya cargados.

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.

GET /disponibilidad

Parámetros

ParámetroTipoDescripción
checkin · fecha Día de entrada. Obligatorio.
checkout · fecha Día de salida. Obligatorio, y posterior a la entrada.
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",
  "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": 218403,
      "precio_total": 436806,
      "tiene_oferta": false,
      "foto": "https://.../calle100-suite-star.jpeg",
      "enlace_reserva": "https://reservas.kazalivingbog.com/?sede=calle-100&checkin=..."
    }
  ]
}
CampoSignificado
unidades_libresCuántas suites de ese tipo quedan disponibles.
disponiblefalse cuando está agotada. Las agotadas se devuelven igual, al final de la lista.
precio_noche_desdeLa noche más económica del rango. Puede variar entre noches si hay una oferta parcial.
precio_totalEl total de la estancia. Es el número que conviene decirle al cliente.
fotoURL pública de la imagen, entre 200 y 340 KB.
enlace_reservaEnlace que abre esa suite con las fechas puestas. Sirve cuando aún no tienen los datos del cliente.

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.

POST /pre-reserva

Cuerpo

CampoTipoDescripción
checkin ·fechaDía de entrada.
checkout ·fechaDía de salida.
huesped.nombre ·textoÚnico dato obligatorio del huésped.
suite_idtextoEl id que devolvió la consulta de disponibilidad. Si se envía, el enlace abre esa suite directamente.
sedetextocalle-100 o usaquen. Se deduce sola si mandan suite_id.
huespedesenteroNúmero de personas.
huesped.tipo_documentotextoCC, CE, PA o NIT.
huesped.documentotextoNúmero de documento.
huesped.emailtextoCorreo del huésped.
huesped.telefonotextoTeléfono del huésped.
huesped.nacionalidadtextoEj. 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 y sirve una sola vez. 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.

Después de las 2 horas, o si ya se usó, al abrirlo el cliente ve un aviso que le explica que sus datos no quedaron cargados y puede reservar igual llenando el formulario. No se queda sin entender qué pasó.

Lo que conviene que maneje el bot. Si el cliente vuelve después de un rato diciendo que el enlace no le funcionó, lo natural es volver a consultar disponibilidad y generarle uno nuevo. Es una sola llamada más y evita que se pierda la reserva.

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ódigoQué significa
400Falta un dato o llegó mal. El mensaje dice cuál.
401Falta la llave o no es válida.
403La llave es válida pero no tiene permiso para esa operación.
404La ruta no existe. Revisar la dirección.
500Error 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. Incluyen IVA cuando aplica: el alojamiento está exento para huéspedes extranjeros y para estadías de un mes o más.

Fotos

Cada suite trae una foto en foto. Hoy hay una por tipo de suite; si necesitan más para el chat, podemos agregarlas.

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.