Аутентификация
Доступ предоставляется через аккаунт партнёра, который создаёт HMS. Аккаунт партнёра получает apiKey и apiSecret, а HMS определяет, к каким отелям у него есть доступ. Эндпоинт входа обменивает эти учётные данные на токен, привязанный к отелю.
Вход и токен#
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"
}| Поле | Описание |
|---|---|
apiKey | Ключ партнёра. Содержит символы base64, поэтому в теле формы его нужно кодировать для URL (+ → %2B, = → %3D). HTTP-библиотеки делают это сами. |
apiSecret | Секретный ключ. Храните его только на сервере и никогда не включайте в код браузерного или мобильного приложения. |
hotelCode | ID отеля в HMS. Если у партнёра нет доступа к отелю, возвращается hotel_permission_is_not_found. |
hotelSeoUrl | SEO-адрес отеля. Вместо hotelCode его использует только собственный модуль бронирования HMS; сторонние интеграции передают hotelCode. |
Заголовок Bearer#
Все эндпоинты, кроме входа, ожидают токен в заголовке Authorization:
GET /external/currencies HTTP/1.1
Host: test.hms.gen.tr
Authorization: Bearer eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…Если заголовок отсутствует, имеет неверный формат (нет префикса Bearer) или токен неизвестен, API возвращает 401:
{
"success": false,
"error": "Authentication required"
}Срок действия и обновление токена#
- Токен действует 7 дней. Обновляйте его, повторно выполняя вход до истечения срока: вход — дешёвая операция, и для одного и того же отеля его можно повторять.
- Не разбирайте токен. Хотя это структура в кодировке base64, её формат не гарантируется; храните и передавайте токен как непрозрачную строку.
- При ответе
401выполните вход ещё раз и повторите запрос; повторный401означает, что изменилась пара ключей или доступ к отелю.
Привязка к отелю#
Токен привязан к одному отелю. Параметр hotelID в эндпоинтах должен совпадать с этим отелем; запрос к другому отелю вернёт ошибку доступа или пустой результат. Если интеграция работает с несколькими отелями, получайте отдельный токен для каждого отеля и кешируйте их по отелям.
Ошибки входа#
| message | Значение |
|---|---|
partner_is_not_found | Пара apiKey / apiSecret не совпала. Проверьте ключи и их URL-кодирование. |
hotel_is_not_found | Не найден отель по hotelSeoUrl. |
hotel_permission_is_not_found | У партнёра нет доступа к этому отелю, или доступ неактивен. Обратитесь в поддержку HMS. |
Эти ошибки возвращаются с HTTP 200, success: false и token: null.