Autenticación
El acceso se concede mediante una cuenta de partner definida por HMS. Una cuenta de partner recibe un apiKey y un apiSecret, y HMS autoriza a qué hoteles puede acceder. El endpoint de inicio de sesión canjea estas credenciales por un token vinculado al hotel.
Inicio de sesión y token#
POST /external/public/login HTTP/1.1
Host: test.hms.gen.tr
Content-Type: application/x-www-form-urlencoded
apiKey=5y94tLmALIKDyUVdEPlAAjg5xWGQNgQtnALlV4%2BAm7Q%3D&apiSecret=a143d640…&hotelCode=1000{
"success": true,
"hotelCode": "1000",
"token": "eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…",
"hotelSeoUrl": "demo-otel"
}| Campo | Descripción |
|---|---|
apiKey | Clave de partner. Contiene caracteres base64, así que en un cuerpo de formulario debe ir codificada como URL (+ → %2B, = → %3D). Las bibliotecas HTTP lo hacen por ti. |
apiSecret | Clave secreta. Guárdala solo en el servidor; nunca la incluyas en un navegador ni en una app móvil. |
hotelCode | ID del hotel en HMS. Si el partner no está autorizado para el hotel, se devuelve hotel_permission_is_not_found. |
hotelSeoUrl | Slug SEO del hotel. Solo lo usa el propio motor de reservas de HMS, en lugar de hotelCode; las integraciones de terceros envían hotelCode. |
Encabezado Bearer#
Todos los endpoints, excepto el de inicio de sesión, esperan el token en el encabezado Authorization:
GET /external/currencies HTTP/1.1
Host: test.hms.gen.tr
Authorization: Bearer eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…Si el encabezado falta, tiene un formato incorrecto (sin el prefijo Bearer) o el token es desconocido, la API devuelve 401:
{
"success": false,
"error": "Authentication required"
}Vigencia y renovación del token#
- El token es válido durante 7 días. Renuévalo iniciando sesión de nuevo antes de que caduque; el inicio de sesión es una operación ligera y se puede repetir para el mismo hotel.
- No analices el token. Aunque es una estructura codificada en base64, su formato no está garantizado; guárdalo y reenvíalo como una cadena opaca.
- Si recibes un
401, vuelve a iniciar sesión una vez y reintenta la solicitud; un segundo401significa que el par de claves o la autorización del hotel han cambiado.
Contexto del hotel#
Un token está vinculado a un solo hotel. El parámetro hotelID de los endpoints debe coincidir con ese hotel; si pides datos de otro hotel, obtendrás un error de autorización o resultados vacíos. En integraciones con varios hoteles, obtén un token distinto para cada hotel y guárdalo en caché por hotel.
Errores de inicio de sesión#
| message | Significado |
|---|---|
partner_is_not_found | El par apiKey / apiSecret no coincide. Revisa las claves y la codificación URL. |
hotel_is_not_found | Ningún hotel coincide con hotelSeoUrl. |
hotel_permission_is_not_found | El partner no está autorizado para este hotel o la autorización está inactiva. Contacta con el soporte de HMS. |
Estos errores se devuelven como HTTP 200 con success: false y token: null.