Предложение#

Типы для описания предложений (номеров) отеля.


OfferBase#

Базовое предложение, используемое в результатах поиска.

ПолеТипОбязательноОписание
supplierstringНетПоставщик предложения. Поставщики отельного домена: ostrovok, acase, avito, ariadna, hotelbook — полный список значений см. в Supplier. В рамках одного отеля предложения могут приходить от разных поставщиков.
contractIdstringНетИдентификатор контракта (офиса) поставщика, по которому пришло предложение
searchPresetIdstringНетИдентификатор пресета поиска, который был применён при формировании предложения. Пресеты настраиваются в личном кабинете платформы.
searchPresetNamestringНетНазвание применённого пресета поиска
pricingPresetIdstringНетИдентификатор пресета ценообразования, который был применён при расчёте цены. Пресеты настраиваются в личном кабинете платформы.
pricingPresetNamestringНетНазвание применённого пресета ценообразования
amountExchangeobjectНетКурс обмена валюты на момент создания предложения
roomIdstringДаИдентификатор номера
roomNamestringДаНазвание номера
allotmentintegerДаДоступное количество номеров
featuresRoomFeature[]НетХарактеристики номера
paymentTypestringДаТип оплаты (hotel, online)
isRefundablebooleanНетВозможность возврата без штрафа сразу после бронирования. false не означает полную невозвратность — условия отмены с возможными штрафами описаны в prices.cancellationRules.
roomAmenitiesRoomAmenity[]НетУдобства номера
roomImagesRoomImagesНетФотографии номера
pricesPricesДаЦеновая информация
roomGroupIdstringНетИдентификатор группы физически эквивалентных номеров. null, если номер не был сведён. Несколько офферов с одинаковым roomGroupId означают один и тот же физический номер. Передаётся, если в пресете поиска включена настройка «Объединять одинаковые номера»
offerTypestring, enumНетТип мастер-оффера: good, better, best. Передаётся только если в пресете поиска выбран тип формирования мастер-оффера «Три варианта», иначе всегда null
bedVariantsBedItem[][]НетВарианты конфигурации кроватей в номере. Заполняется в зависимости от поставщика
offerIdstringДаИдентификатор предложения — детерминированный хеш от неизменяемых атрибутов оффера (поставщик, контракт, отель, номер, тип оплаты, возвратность, условия отмены, наличие питания). Не зависит от конкретного вызова: один и тот же реальный оффер даёт одинаковый offerId в search и в последующем hotel_pricing, несмотря на то что цена и доступность между вызовами могли измениться
aiScorenumberДаОценка релевантности от AI Hotel Ranker, 01. Присутствует в ответе всегда: null, если AI-ранжирование выключено в пресете или ответ от AI-сервиса не получен (тогда используется обычная сортировка)

RoomImages#

Фотографии номера.

ПолеТипОписание
mainstringГлавное фото (URL)
gallerystring[]Галерея фотографий (URL)

Deposit#

Информация о депозите.

ПолеТипОписание
valueMoneyСумма депозита
isRefundablebooleanВозвратный депозит

CheckinRule#

Правила и контакты для заселения. Все параметры объекта опциональны — наличие конкретных полей в ответе зависит от информации, которую передаёт поставщик.

ПолеТипОписание
frontDeskTimeStartstringНачало работы ресепшн (HH:mm)
frontDeskTimeEndstringКонец работы ресепшн (HH:mm)
keysPickupstringСпособ получения ключей
phonestringТелефон для связи
emailstringEmail для связи
addressstringАдрес заселения
isContactlessbooleanБесконтактное заселение
commentstringДополнительный комментарий

Offer#

Расширенное предложение для ответов hotel_pricing и offer_pricing. Наследует все поля OfferBase, включая bedVariants, offerId и aiScore.

Поля ниже есть только в Offer — в ответе search, который возвращает OfferBase, их нет.

ПолеТипОбязательноОписание
offerExpirationstring (datetime)НетДата и время до которого действует оффер (UTC+0, ISO 8601). Используйте для определения актуальности предложения перед бронированием
depositDepositНетДепозит
isPetAvailablebooleanНетРазрешено размещение с питомцами
checkinRulesCheckinRule[]НетПравила заселения
additionalServicesAdditionalServicesНетДополнительные услуги, доступные для номера
…все поля 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.

ПолеТипОбязательноОписание
bedTypestringНетТип кровати от поставщика (например: single, twin, double)
countintegerНетКоличество кроватей данного типа в номере
isExtraBedbooleanНетПризнак дополнительной кровати

Примеры#

1{ "bedType": "double", "count": 1, "isExtraBed": false }

AdditionalServices#

Дополнительные услуги, доступные для номера.

ПолеТипОбязательноОписание
mealAdditionalMeal[]НетПитание
childrenMealAdditionalChildrenMeal[]НетДетское питание
extraBedAdditionalExtraBed[]НетДополнительная кровать
childrenExtraBedAdditionalChildrenExtraBed[]НетДополнительная детская кровать
cotAdditionalCot[]НетДетская кроватка
earlyLateCheckoutAdditionalEarlyLateCheckout[]НетРанний заезд / поздний выезд

AdditionalMeal#

ПолеТипОбязательноОписание
typestringНетТип питания. Пример: allInclusive, breakfast, breakfastBuffet
inclusionstring, enumНетПлатно/бесплатно: unspecified, included, notIncluded
priceintegerНетЦена
currencystringНетВалюта
priceUnitstring, enumНетЕдиница тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek
canBeBookedbooleanДаМожно ли забронировать услугу онлайн
paymentPlacestringДаМесто расчёта

Примеры#

1{
2  "type": "breakfast",
3  "inclusion": "notIncluded",
4  "price": 1500,
5  "currency": "RUB",
6  "priceUnit": "perGuestPerNight",
7  "canBeBooked": false,
8  "paymentPlace": "hotel"
9}

AdditionalChildrenMeal#

ПолеТипОбязательноОписание
typestringНетТип питания. Пример: allInclusive, breakfast, breakfastBuffet
inclusionstring, enumНетПлатно/бесплатно: unspecified, included, notIncluded
ageStartintegerНетВозраст от
ageEndintegerНетВозраст до
priceintegerНетЦена
currencystringНетВалюта
priceUnitstring, enumНетЕдиница тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek
canBeBookedbooleanДаМожно ли забронировать услугу онлайн
paymentPlacestringДаМесто расчёта

AdditionalExtraBed#

ПолеТипОбязательноОписание
amountintegerНетКоличество доступных мест
inclusionstring, enumНетПлатно/бесплатно: unspecified, included, notIncluded
priceintegerНетЦена
currencystringНетВалюта
priceUnitstring, enumНетЕдиница тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek
canBeBookedbooleanДаМожно ли забронировать услугу онлайн
paymentPlacestringДаМесто расчёта

AdditionalChildrenExtraBed#

ПолеТипОбязательноОписание
amountintegerНетКоличество доступных мест
allowedstring, enumНетДополнительная детская кровать доступна: unspecified, availabile, unavailabile
ageStartintegerНетВозраст от
ageEndintegerНетВозраст до
priceintegerНетЦена
currencystringНетВалюта
priceUnitstring, enumНетЕдиница тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek
canBeBookedbooleanДаМожно ли забронировать услугу онлайн
paymentPlacestringДаМесто расчёта

AdditionalCot#

ПолеТипОбязательноОписание
amountintegerНетКоличество доступных мест
inclusionstring, enumНетПлатно/бесплатно: unspecified, included, notIncluded
priceintegerНетЦена
currencystringНетВалюта
priceUnitstring, enumНетЕдиница тарификации: unspecified, perGuestPerNight, perGuestPerStay, perRoomPerNight, perRoomPerStay, perHour, perWeek
canBeBookedbooleanДаМожно ли забронировать услугу онлайн
paymentPlacestringДаМесто расчёта

AdditionalEarlyLateCheckout#

Структура аналогична CheckinCheckoutOption, дополненная canBeBooked/paymentPlace.

ПолеТипОбязательноОписание
timetimeДаВремя заезда/выезда (формат HH:mm)
availableStatusAvailabilityStatusДаСтатус доступности
priceServicePriceДаСтоимость услуги
canBeBookedbooleanДаtrue, если availableStatus = "available", иначе false
paymentPlacestringДаБерётся из 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}