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.
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.
¿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-001WordPress (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>';
});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-001Node.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-001Notas 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).
