Предложение#
Типы для описания предложений (номеров) отеля.
OfferBase#
Базовое предложение, используемое в результатах поиска.
| Поле | Тип | Обязательно | Описание |
|---|
supplier | string | Нет | Поставщик предложения. Поставщики отельного домена: ostrovok, acase, avito, ariadna, hotelbook — полный список значений см. в Supplier. В рамках одного отеля предложения могут приходить от разных поставщиков. |
contractId | string | Нет | Идентификатор контракта (офиса) поставщика, по которому пришло предложение |
searchPresetId | string | Нет | Идентификатор пресета поиска, который был применён при формировании предложения. Пресеты настраиваются в личном кабинете платформы. |
searchPresetName | string | Нет | Название применённого пресета поиска |
pricingPresetId | string | Нет | Идентификатор пресета ценообразования, который был применён при расчёте цены. Пресеты настраиваются в личном кабинете платформы. |
pricingPresetName | string | Нет | Название применённого пресета ценообразования |
amountExchange | object | Нет | Курс обмена валюты на момент создания предложения |
roomId | string | Да | Идентификатор номера |
roomName | string | Да | Название номера |
allotment | integer | Да | Доступное количество номеров |
features | RoomFeature[] | Нет | Характеристики номера |
paymentType | string | Да | Тип оплаты (hotel, online) |
isRefundable | boolean | Нет | Возможность возврата без штрафа сразу после бронирования. false не означает полную невозвратность — условия отмены с возможными штрафами описаны в prices.cancellationRules. |
roomAmenities | RoomAmenity[] | Нет | Удобства номера |
roomImages | RoomImages | Нет | Фотографии номера |
prices | Prices | Да | Ценовая информация |
roomGroupId | string | Нет | Идентификатор группы физически эквивалентных номеров. null, если номер не был сведён. Несколько офферов с одинаковым roomGroupId означают один и тот же физический номер. Передаётся, если в пресете поиска включена настройка «Объединять одинаковые номера» |
offerType | string, enum | Нет | Тип мастер-оффера: good, better, best. Передаётся только если в пресете поиска выбран тип формирования мастер-оффера «Три варианта», иначе всегда null |
bedVariants | BedItem[][] | Нет | Варианты конфигурации кроватей в номере. Заполняется в зависимости от поставщика |
offerId | string | Да | Идентификатор предложения — детерминированный хеш от неизменяемых атрибутов оффера (поставщик, контракт, отель, номер, тип оплаты, возвратность, условия отмены, наличие питания). Не зависит от конкретного вызова: один и тот же реальный оффер даёт одинаковый offerId в search и в последующем hotel_pricing, несмотря на то что цена и доступность между вызовами могли измениться |
aiScore | number | Да | Оценка релевантности от AI Hotel Ranker, 0–1. Присутствует в ответе всегда: null, если AI-ранжирование выключено в пресете или ответ от AI-сервиса не получен (тогда используется обычная сортировка) |
RoomImages#
Фотографии номера.
| Поле | Тип | Описание |
|---|
main | string | Главное фото (URL) |
gallery | string[] | Галерея фотографий (URL) |
Deposit#
Информация о депозите.
| Поле | Тип | Описание |
|---|
value | Money | Сумма депозита |
isRefundable | boolean | Возвратный депозит |
CheckinRule#
Правила и контакты для заселения. Все параметры объекта опциональны — наличие конкретных полей в ответе зависит от информации, которую передаёт поставщик.
| Поле | Тип | Описание |
|---|
frontDeskTimeStart | string | Начало работы ресепшн (HH:mm) |
frontDeskTimeEnd | string | Конец работы ресепшн (HH:mm) |
keysPickup | string | Способ получения ключей |
phone | string | Телефон для связи |
email | string | Email для связи |
address | string | Адрес заселения |
isContactless | boolean | Бесконтактное заселение |
comment | string | Дополнительный комментарий |
Offer#
Расширенное предложение для ответов hotel_pricing и offer_pricing. Наследует все поля OfferBase, включая bedVariants, offerId и aiScore.
Поля ниже есть только в Offer — в ответе search, который возвращает OfferBase, их нет.
| Поле | Тип | Обязательно | Описание |
|---|
offerExpiration | string (datetime) | Нет | Дата и время до которого действует оффер (UTC+0, ISO 8601). Используйте для определения актуальности предложения перед бронированием |
deposit | Deposit | Нет | Депозит |
isPetAvailable | boolean | Нет | Разрешено размещение с питомцами |
checkinRules | CheckinRule[] | Нет | Правила заселения |
additionalServices | AdditionalServices | Нет | Дополнительные услуги, доступные для номера |
| …все поля OfferBase | | | |
Примеры#
1{
2 "offerId": "abc123-offer-id",
3 "aiScore": 0.87,
4 "roomId": "room-101",
5 "roomName": "Стандартный двухместный номер",
6 "allotment": 5,
7 "paymentType": "online",
8 "isRefundable": true,
9 "features": [
10 { "type": "bedding", "value": "3" }
11 ],
12 "roomImages": {
13 "main": "https://cdn.example.com/hotels/12345/room-101-main.jpg",
14 "gallery": [
15 "https://cdn.example.com/hotels/12345/room-101-main.jpg",
16 "https://cdn.example.com/hotels/12345/room-101-bathroom.jpg"
17 ]
18 },
19 "prices": {
20 "totalPrice": {
21 "total": {
22 "amount": 15000.00,
23 "currency": "RUB"
24 }
25 },
26 "meals": [
27 {
28 "mealId": "breakfast",
29 "mealName": "Завтрак",
30 "included": true
31 }
32 ]
33 },
34 "roomGroupId": "room-group-101",
35 "offerType": "best",
36 "bedVariants": [
37 [
38 { "bedType": "double", "count": 1, "isExtraBed": false }
39 ],
40 [
41 { "bedType": "single", "count": 2, "isExtraBed": false }
42 ]
43 ]
44}
BedItem#
Вариант кровати в номере. Вложенность: Offer → bedVariants[][] → BedItem.
| Поле | Тип | Обязательно | Описание |
|---|
bedType | string | Нет | Тип кровати от поставщика (например: single, twin, double) |
count | integer | Нет | Количество кроватей данного типа в номере |
isExtraBed | boolean | Нет | Признак дополнительной кровати |
Примеры#
1{ "bedType": "double", "count": 1, "isExtraBed": false }
AdditionalServices#
Дополнительные услуги, доступные для номера.
AdditionalMeal#
| Поле | Тип | Обязательно | Описание |
|---|
type | string | Нет | Тип питания. Пример: allInclusive, breakfast, breakfastBuffet |
inclusion | string, enum | Нет | Платно/бесплатно: unspecified, included, notIncluded |
price | integer | Нет | Цена |
currency | string | Нет | Валюта |
priceUnit | string, enum | Нет | Единица тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek |
canBeBooked | boolean | Да | Можно ли забронировать услугу онлайн |
paymentPlace | string | Да | Место расчёта |
Примеры#
1{
2 "type": "breakfast",
3 "inclusion": "notIncluded",
4 "price": 1500,
5 "currency": "RUB",
6 "priceUnit": "perGuestPerNight",
7 "canBeBooked": false,
8 "paymentPlace": "hotel"
9}
AdditionalChildrenMeal#
| Поле | Тип | Обязательно | Описание |
|---|
type | string | Нет | Тип питания. Пример: allInclusive, breakfast, breakfastBuffet |
inclusion | string, enum | Нет | Платно/бесплатно: unspecified, included, notIncluded |
ageStart | integer | Нет | Возраст от |
ageEnd | integer | Нет | Возраст до |
price | integer | Нет | Цена |
currency | string | Нет | Валюта |
priceUnit | string, enum | Нет | Единица тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek |
canBeBooked | boolean | Да | Можно ли забронировать услугу онлайн |
paymentPlace | string | Да | Место расчёта |
| Поле | Тип | Обязательно | Описание |
|---|
amount | integer | Нет | Количество доступных мест |
inclusion | string, enum | Нет | Платно/бесплатно: unspecified, included, notIncluded |
price | integer | Нет | Цена |
currency | string | Нет | Валюта |
priceUnit | string, enum | Нет | Единица тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek |
canBeBooked | boolean | Да | Можно ли забронировать услугу онлайн |
paymentPlace | string | Да | Место расчёта |
| Поле | Тип | Обязательно | Описание |
|---|
amount | integer | Нет | Количество доступных мест |
allowed | string, enum | Нет | Дополнительная детская кровать доступна: unspecified, availabile, unavailabile |
ageStart | integer | Нет | Возраст от |
ageEnd | integer | Нет | Возраст до |
price | integer | Нет | Цена |
currency | string | Нет | Валюта |
priceUnit | string, enum | Нет | Единица тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek |
canBeBooked | boolean | Да | Можно ли забронировать услугу онлайн |
paymentPlace | string | Да | Место расчёта |
AdditionalCot#
| Поле | Тип | Обязательно | Описание |
|---|
amount | integer | Нет | Количество доступных мест |
inclusion | string, enum | Нет | Платно/бесплатно: unspecified, included, notIncluded |
price | integer | Нет | Цена |
currency | string | Нет | Валюта |
priceUnit | string, enum | Нет | Единица тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek |
canBeBooked | boolean | Да | Можно ли забронировать услугу онлайн |
paymentPlace | string | Да | Место расчёта |
AdditionalEarlyLateCheckout#
Структура аналогична CheckinCheckoutOption, дополненная canBeBooked/paymentPlace.
| Поле | Тип | Обязательно | Описание |
|---|
time | time | Да | Время заезда/выезда (формат HH:mm) |
availableStatus | AvailabilityStatus | Да | Статус доступности |
price | ServicePrice | Да | Стоимость услуги |
canBeBooked | boolean | Да | true, если availableStatus = "available", иначе false |
paymentPlace | string | Да | Берётся из Offer.paymentType |
Примеры#
1{
2 "time": "18:00",
3 "availableStatus": "available",
4 "price": {
5 "total": {
6 "amount": 2000.00,
7 "currency": "RUB"
8 }
9 },
10 "canBeBooked": true,
11 "paymentPlace": "online"
12}