DocsAPI para desarrolladores

API de reservas

Conecta las reservas de tu propia web a HotelBlinx.

¿Tienes tu propio sitio web y no usas el motor de reservas de HotelBlinx? Con la API de reservas puedes consultar disponibilidad y precios, y crear reservas directamente en tu PMS desde tu web. Las reservas entran a tu Recepción como pendientes para que las confirmes.

¿No eres programador? No sigas leyendo
Esta página es para quien va a escribir código. Si solo quieres un botón de reservas en tu web de WordPress, Wix, Squarespace o Shopify, la guía “Widget de reservas para tu web” lo resuelve pegando una sola línea, sin API y sin programar.

Autenticación

Cada llamada requiere tu API key en la cabecera x-api-key. Genérala en Back Office → Sitio web → “Widget y API (web propia)”. Trátala como una contraseña; si se filtra, regenérala (la anterior deja de funcionar al instante).

Desde dónde se llama (importante)

Llama a la API siempre desde tu servidor: PHP, Python, Node, el backend que uses. Nunca desde el JavaScript que corre en el navegador del visitante.

Si pones la clave en el navegador, la regalas
Todo lo que va en el JavaScript de una página se puede leer con clic derecho → Ver código fuente. Cualquiera podría copiar tu clave y crear reservas falsas en tu PMS. La API admite CORS por compatibilidad, pero eso no la vuelve segura de usar así.

¿Necesitas el buscador en el navegador? Tienes dos caminos correctos: usar el widget (lleva una clave pública que no da acceso a nada más), o crear en tu propio servidor un endpoint intermedio que reciba la petición de tu página, añada la clave y llame a HotelBlinx. Abajo hay un ejemplo de eso en PHP para WordPress.

Consultar disponibilidad

GET /api/v1/availability — devuelve los tipos de habitación con precio por noche, total de la estadía y cuántas hay disponibles. Parámetros: checkIn y checkOut (formato YYYY-MM-DD), adults y children.

curl "https://cloud.hotelblinx.com/api/v1/availability?checkIn=2026-07-01&checkOut=2026-07-04&adults=2" \
  -H "x-api-key: TU_API_KEY"
{
  "hotel": { "name": "Hotel Demo", "currency": "USD", "country": "CO" },
  "checkIn": "2026-07-01",
  "checkOut": "2026-07-04",
  "nights": 3,
  "roomTypes": [
    {
      "roomTypeId": "ckxxx...",
      "name": "Doble",
      "nightly": 70,
      "total": 210,
      "currency": "USD",
      "available": 4,
      "maxOccupancy": 2
    }
  ]
}

Crear una reserva

POST /api/v1/reservations — crea la reserva (queda PENDIENTE). El roomTypeId lo obtienes de la respuesta de /availability.

curl -X POST "https://cloud.hotelblinx.com/api/v1/reservations" \
  -H "x-api-key: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "roomTypeId": "ckxxx...",
    "checkIn": "2026-07-01",
    "checkOut": "2026-07-04",
    "adults": 2,
    "children": 0,
    "guest": { "fullName": "Juan Pérez", "email": "juan@email.com", "phone": "+57 300 1234567" }
  }'
{
  "ok": true,
  "code": "RES-001",
  "status": "PENDING",
  "total": 210,
  "nights": 3,
  "currency": "USD"
}

PHP

El lenguaje de la mayoría de las webs de hotel (WordPress, Joomla, PrestaShop y casi cualquier hosting compartido).

<?php
$API = 'https://cloud.hotelblinx.com';
$KEY = 'TU_API_KEY';

// 1) Disponibilidad
$url = $API . '/api/v1/availability?' . http_build_query([
  'checkIn'  => '2026-07-01',
  'checkOut' => '2026-07-04',
  'adults'   => 2,
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER     => ['x-api-key: ' . $KEY],
]);
$avail = json_decode(curl_exec($ch), true);
curl_close($ch);

// 2) Crear la reserva
$ch = curl_init($API . '/api/v1/reservations');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST           => true,
  CURLOPT_HTTPHEADER     => ['x-api-key: ' . $KEY, 'Content-Type: application/json'],
  CURLOPT_POSTFIELDS     => json_encode([
    'roomTypeId' => $avail['roomTypes'][0]['roomTypeId'],
    'checkIn'    => '2026-07-01',
    'checkOut'   => '2026-07-04',
    'adults'     => 2,
    'guest'      => [
      'fullName' => 'Juan Pérez',
      'email'    => 'juan@email.com',
      'phone'    => '+57 300 1234567',
    ],
  ]),
]);
$reserva = json_decode(curl_exec($ch), true);
curl_close($ch);

echo $reserva['code']; // RES-001

WordPress (PHP)

En WordPress no uses cURL directo: usa sus propias funciones, que ya manejan los tiempos de espera y los errores. Pega esto en el functions.php de tu tema hijo o en un plugin propio. Guarda la clave en wp-config.php, nunca en el código de la plantilla.

<?php
// En wp-config.php:  define('HOTELBLINX_KEY', 'TU_API_KEY');

function hotelblinx_disponibilidad($checkIn, $checkOut, $adults = 2) {
  $url = add_query_arg([
    'checkIn'  => $checkIn,
    'checkOut' => $checkOut,
    'adults'   => $adults,
  ], 'https://cloud.hotelblinx.com/api/v1/availability');

  $res = wp_remote_get($url, [
    'headers' => ['x-api-key' => HOTELBLINX_KEY],
    'timeout' => 15,
  ]);

  if (is_wp_error($res)) return null;
  return json_decode(wp_remote_retrieve_body($res), true);
}

function hotelblinx_reservar($datos) {
  $res = wp_remote_post('https://cloud.hotelblinx.com/api/v1/reservations', [
    'headers' => [
      'x-api-key'    => HOTELBLINX_KEY,
      'Content-Type' => 'application/json',
    ],
    'body'    => wp_json_encode($datos),
    'timeout' => 15,
  ]);

  if (is_wp_error($res)) return null;
  return json_decode(wp_remote_retrieve_body($res), true);
}

// Shortcode [hotelblinx_precios] para mostrar precios en cualquier página
add_shortcode('hotelblinx_precios', function () {
  $d = hotelblinx_disponibilidad('2026-07-01', '2026-07-04');
  if (!$d) return '<p>No se pudo consultar la disponibilidad.</p>';

  $html = '<ul>';
  foreach ($d['roomTypes'] as $rt) {
    $html .= sprintf(
      '<li>%s — %s %s por noche (%d disponibles)</li>',
      esc_html($rt['name']), esc_html($rt['nightly']),
      esc_html($rt['currency']), (int) $rt['available']
    );
  }
  return $html . '</ul>';
});
Antes de escribir todo esto
Si lo único que quieres es que la gente pueda reservar desde tu WordPress, el widget ya te lo da hecho con una línea y muestra tus habitaciones con foto. Este código es para quien quiere control total sobre el diseño del formulario.

Python

import requests

API = "https://cloud.hotelblinx.com"
KEY = "TU_API_KEY"
HEADERS = {"x-api-key": KEY}

# 1) Disponibilidad
avail = requests.get(
    f"{API}/api/v1/availability",
    params={"checkIn": "2026-07-01", "checkOut": "2026-07-04", "adults": 2},
    headers=HEADERS,
    timeout=15,
).json()

# 2) Crear la reserva
reserva = requests.post(
    f"{API}/api/v1/reservations",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "roomTypeId": avail["roomTypes"][0]["roomTypeId"],
        "checkIn": "2026-07-01",
        "checkOut": "2026-07-04",
        "adults": 2,
        "guest": {
            "fullName": "Juan Pérez",
            "email": "juan@email.com",
            "phone": "+57 300 1234567",
        },
    },
    timeout=15,
).json()

print(reserva["code"])  # RES-001

Node.js

Del lado del servidor (Express, Next.js, Astro…). No en el navegador.

const API = "https://cloud.hotelblinx.com";
const KEY = process.env.HOTELBLINX_KEY; // nunca escrita en el código

// 1) Disponibilidad
const avail = await fetch(
  `${API}/api/v1/availability?checkIn=2026-07-01&checkOut=2026-07-04&adults=2`,
  { headers: { "x-api-key": KEY } }
).then(r => r.json());

// 2) Crear la reserva
const reserva = await fetch(`${API}/api/v1/reservations`, {
  method: "POST",
  headers: { "x-api-key": KEY, "Content-Type": "application/json" },
  body: JSON.stringify({
    roomTypeId: avail.roomTypes[0].roomTypeId,
    checkIn: "2026-07-01",
    checkOut: "2026-07-04",
    adults: 2,
    guest: { fullName: "Juan Pérez", email: "juan@email.com", phone: "+57 300 1234567" },
  }),
}).then(r => r.json());

console.log(reserva.code); // RES-001

Notas y límites

  • La API respeta tus reglas del motor de reservas (noches mínimas/máximas y anticipación) y tus tarifas de temporada.
  • Evita el doble-cupo: valida disponibilidad al crear la reserva.
  • Las fechas van en formato YYYY-MM-DD. Los montos vienen en la moneda de tu hotel.
  • Códigos de error: 401 (API key inválida), 400 (datos inválidos), 409 (habitación no disponible).
¿Prefieres no programar?
No hace falta usar la API para vender desde tu propia web: el widget de reservas hace lo mismo pegando una sola línea, y muestra tu motor real con fotos y filtros. Mira la guía “Widget de reservas para tu web”.