# Островок — ETG API (RateHawk): Найти отели и цены в городе

Сценарий из mcp-everything. Актуально на 2026-10-24.

Поиск отелей на даты поездки: от строки «Сочи» до списка отелей с ценами и всех тарифов выбранного отеля.

1. Найди регион по названию: POST /api/b2b/v3/search/multicomplete/ с query (часть названия) и language. В ответе — до 5 регионов и отелей; возьми id нужного региона.
2. Запроси цены по региону: POST /api/b2b/v3/search/serp/region/ с region_id, checkin, checkout, guests (adults и возраст детей по каждому номеру), residency (гражданство гостей), currency и language. Фильтры — filter.star_rating, filter.meal_type, filter.price_from / filter.price_to, размер выдачи — hotels_limit.
3. Не давай пользователю выбирать тариф прямо из выдачи по региону: совпадение с тарифами страницы отеля не гарантируется.
4. Когда пользователь выбрал отель, запроси все его тарифы: POST /api/b2b/v3/search/hp/ с hid (числовой ID отеля), теми же датами, гостями и residency. Тариф живёт около 30 минут — по истечении повтори запрос.
5. Авторизация — HTTP Basic: KEY_ID как имя пользователя, API_KEY как пароль. Отлаживай на песочнице api-sandbox.ratehawk.com.

```bash
AUTH='<KEY_ID>:<API_KEY>'
API=https://api.ratehawk.com/api/b2b/v3

curl --user "$AUTH" "$API/search/multicomplete/" -H 'Content-Type: application/json' \
  -d '{"query": "Сочи", "language": "ru"}'

curl --user "$AUTH" "$API/search/serp/region/" -H 'Content-Type: application/json' \
  -d '{"checkin": "2026-11-20", "checkout": "2026-11-23", "residency": "ru", "language": "ru",
       "guests": [{"adults": 2, "children": []}], "region_id": <region_id>, "currency": "RUB",
       "hotels_limit": 50, "filter": {"star_rating": [4, 5]}}'

curl --user "$AUTH" "$API/search/hp/" -H 'Content-Type: application/json' \
  -d '{"hid": <hid>, "checkin": "2026-11-20", "checkout": "2026-11-23", "residency": "ru",
       "language": "ru", "guests": [{"adults": 2, "children": []}], "currency": "RUB"}'
```

## Базовые URL

- Боевой и тестовый: `https://api.ratehawk.com`
- Песочница: `https://api-sandbox.ratehawk.com`
- Старые хосты  и  устарели.: `api.worldota.net`

## Авторизация

Тип: Basic Auth

HTTP Basic Authentication ключом API вида `<KEY_ID>:<API_KEY>`: `KEY_ID` — имя пользователя, `API_KEY` — пароль. Ключи бывают трёх типов: sandbox, test (только тестовый отель `hid = 8473727`, брони реальные) и production. Ключи видны в разделе API настроек договора (доступ — у Master-аккаунта).

```
curl --user '<KEY_ID>:<KEY>' --data '{"id":"city_hotel_berlin_east","language":"en"}' "https://api.ratehawk.com/api/b2b/v3/hotel/info/"
```

## Методы сценария

### POST /api/b2b/v3/search/multicomplete/ — Подсказки отелей и регионов

Автодополнение по части названия; до 5 результатов в каждой категории.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `query` | body | string | да | Часть названия отеля или региона |
| `language` | body | string | нет | Язык, например ru, en |

### POST /api/b2b/v3/search/serp/region/ — Поиск цен по региону

Не рекомендуется давать пользователю выбирать тарифы из этого ответа: точного совпадения с `search/hp` не гарантируется.

Также есть поиск по ID отелей (`/api/b2b/v3/search/serp/hotels/`) и по координатам.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `checkin` | body | string | да | Дата заезда, не позже 730 дней от текущей |
| `checkout` | body | string | да | Дата выезда, не позже 30 дней от заезда |
| `region_id` | body | integer | да | ID региона |
| `residency` | body | string | нет | Гражданство гостей, ISO 3166-1 alpha-2 |
| `guests` | body | array | нет | Гости по номерам |
| `guests[].adults` | body | integer | да | Число взрослых в номере |
| `guests[].children` | body | array | нет | Возраст детей |
| `currency` | body | string | нет | Валюта цен |
| `language` | body | string | нет | Язык данных отеля |
| `hotels_limit` | body | integer | нет | Максимум отелей в ответе |
| `timeout` | body | number | нет | Максимальное время поиска, секунд |
| `filter.star_rating` | body | array | нет | Звёздность 1–5 |
| `filter.kind` | body | array | нет | Тип отеля |
| `filter.meal_type` | body | string | нет | Тип питания, например all-inclusive |
| `filter.price_from` | body | integer | нет | Минимальная цена |
| `filter.price_to` | body | integer | нет | Максимальная цена |

Пример запроса:

```
curl --user '<KEY_ID>:<API_KEY>' 'https://api.ratehawk.com/api/b2b/v3/search/serp/region/' \
--header 'Content-Type: application/json' \
--data '{
 "checkin": "2026-10-22",
 "checkout": "2026-10-25",
 "residency": "gb",
 "language": "en",
 "guests": [
 {
 "adults": 2,
 "children": []
 }
 ],
 "region_id": 6053839,
 "currency": "EUR",
 "filter": {
 "star_rating": [],
 "kind": [],
 "meal_type": [
 "all-inclusive"
 ]
 }
}'
```

### POST /api/b2b/v3/search/hp/ — Страница отеля (все тарифы)

Вызывается, когда пользователь выбрал отель; рекомендуемое время жизни тарифа — 30 минут.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `hid` | body | integer | да | ID отеля (числовой); старое поле id устарело |
| `checkin` | body | string | да | Дата заезда |
| `checkout` | body | string | да | Дата выезда |
| `residency` | body | string | нет | Гражданство гостей |
| `guests[].adults` | body | integer | да | Число взрослых в номере |
| `guests[].children` | body | array | нет | Возраст детей |
| `currency` | body | string | нет | Валюта |
| `language` | body | string | нет | Язык |
| `timeout` | body | number | нет | Время поиска, секунд |
| `filter` | body | object | нет | Фильтры: star_rating, kind, meal_type, price_from, price_to |

## Нюансы

- GET — для получения данных (параметры в `data` строки запроса), POST — для создания, изменения и удаления; тело — JSON-объект.
- Рекомендуемый поток: поиск → `search/hp` → `hotel/prebook` → `booking/form` → `booking/finish` → `booking/finish/status` (или вебхук).
- `partner_order_id` уникален в рамках договора и используется во всех вызовах после создания брони.
- Брони тестового отеля `hid = 8473727` реальные — их нужно отменять.
- В песочнице язык всегда `en`, валюта обычно USD/EUR, число тарифов ограничено 5, 3D Secure не поддерживается.
- Лимиты и доступные эндпоинты ключа — метод Retrieve endpoints; лимиты повышают только после сертификации.

## Другие сценарии

- [Забронировать номер](https://mcp-everything.ru/integrations/ostrovok-etg/scenarios/zabronirovat-nomer.md)
- [Отменить бронирование](https://mcp-everything.ru/integrations/ostrovok-etg/scenarios/otmenit-bronirovanie.md)
- [Загрузить описание и фото отеля](https://mcp-everything.ru/integrations/ostrovok-etg/scenarios/zagruzit-opisanie-i-foto-otelya.md)

---

Если этого недостаточно — официальная документация: https://docs.emergingtravel.com/docs/overview/
Вся интеграция одним документом: https://mcp-everything.ru/integrations/ostrovok-etg.md
