Структура ответа#

Детальное описание структуры ответа от /api/hotels/view_booking.

Основная структура#

ПолеТипОбязательноОписание
bookingIdguidДаИдентификатор бронирования TAPI (формат UUID)
supplierOrderIdstringНетИдентификатор заказа у поставщика
partnerViewBookingPartnerInfoНетИнформация о заказе партнера
hotelViewBookingHotelInfoНетИнформация об отеле и номере
guestsViewBookingGuestsInfoНетИнформация о гостях
pricesViewBookingPriceInfoНетЦеновая информация
bookingInfoViewBookingInfoНетСтатус и даты бронирования
checkindateДаДата заезда (YYYY-MM-DD)
checkoutdateДаДата выезда (YYYY-MM-DD)
checkinTimetimeНетВремя заезда (HH:mm)
checkoutTimetimeНетВремя выезда (HH:mm)
upsellsViewBookingUpsellInfo[]НетДополнительные услуги
customerViewBookingCustomerInfoНетКонтактное лицо
hostContactsViewBookingHostInfoНетКонтактная информация владельца квартиры (только при details.includeResidenceDetails = true, по умолчанию — да)
extraInfoViewBookingExtraInfoНетДополнительная информация по проживанию (только при details.includeResidenceDetails = true, по умолчанию — да)
supplierViewBookingSupplierInfoНетИнформация о поставщике/субпровайдере

Структура ViewBookingPartnerInfo#

ПолеТипОбязательноОписание
partnerOrderIdstringНетИдентификатор заказа партнера
commentstringНетКомментарий
amountSellB2b2cMoneyНетСумма продажи B2B2C

Структура ViewBookingHotelInfo#

ПолеТипОбязательноОписание
hotelIdstringДаИдентификатор отеля
roomViewBookingRoomInfoДаИнформация о номере

Структура ViewBookingRoomInfo#

ПолеТипОбязательноОписание
namestringНетНазвание номера
rateNamestringНетНазвание тарифа
roomIdstringНетИдентификатор категории номера
mealNamestringНетТип питания
beddingNamesstring[], enumНетТипы кроватей. Возможные значения: unspecified, single, double, smallDouble, twin, triple, bunkBed, king, queen, sofa, sofaSingle, sofaDouble, childBed, extraBed, armchair, rollaway

Структура ViewBookingGuestsInfo#

ПолеТипОбязательноОписание
countintegerДаОбщее количество гостей
adultCountintegerНетКоличество взрослых
childrenCountintegerНетКоличество детей
guestsViewBookingGuestDetails[]НетДетали гостей

Структура ViewBookingGuestDetails#

ПолеТипОбязательноОписание
firstNamestringНетИмя
lastNamestringНетФамилия
isChildbooleanНетРебенок
ageintegerНетВозраст (для детей)
citizenshipstringНетГражданство (ISO 3166-1 alpha-2)
genderstringНетПол

Структура ViewBookingPriceInfo#

ПолеТипОбязательноОписание
supplierstringДаПоставщик, через которого совершено бронирование. Поставщики отельного домена: ostrovok, acase, avito, ariadna, hotelbook — полный список значений см. в Supplier
contractIdstringНетИдентификатор контракта, по которому было совершено бронирование
searchPresetIdstringНетИдентификатор пресета поиска, который использовался на момент поиска предложения
searchPresetNamestringНетНазвание пресета поиска. null, если searchPresetId не заполнен
pricingPresetIdstringНетИдентификатор пресета ценообразования, который использовался на момент поиска предложения
pricingPresetNamestringНетНазвание ценового пресета. null, если pricingPresetId не заполнен
payableMoneyНетОплаченная сумма
amountSellMoneyНетСумма продажи
paymentTypestringНетТип оплаты
cancellationRulesCancellationRulesНетПравила отмены

Детализация цен (только при details.includePriceDetails = true)#

Поля этой секции — необязательные, присутствуют только при details.includePriceDetails = true. Для бронирований, созданных до внедрения этой детализации (у которых нужные данные не сохранены в БД), поля возвращаются как null, без ошибки.

ПолеТипОписание
totalMoneyИтоговая цена для клиента
discountMoneyСумма скидки
markupMoneyСумма наценки
serviceFeeMoneyСервисный сбор
commission.marginstringМаржа (%)
commission.marginCurrencystringВалюта маржи
commission.supplierMoneyКомиссия поставщика
commission.subagentMoneyСубагентское вознаграждение
supplierBreakdown.nettoMoneyНетто-стоимость у поставщика
supplierBreakdown.grossMoneyВаловая стоимость у поставщика
supplierBreakdown.rackMoneyСтоимость Rack Rate
supplierBreakdown.barMoneyСтоимость Best Available Rate
supplierBreakdown.minRetailPriceMoneyМинимальная розничная цена, установленная поставщиком (порог price parity). Отсутствует или ноль — у предложения такого порога нет
vat.percentnumberСтавка НДС (%)
vat.valueMoneyСумма НДС
vat.isVatFreebooleantrue — НДС не применяется
vat.includedbooleantrue — НДС включён в цену
deposit.valueMoneyСумма депозита
deposit.isRefundablebooleantrue — депозит возвратный

Аналогичная детализация (value, discount, markup, serviceFee, supplier, commission.*, vat.*) добавляется в каждый элемент upsells[] при details.includePriceDetails = true. В upsells[] поле supplier — это Money (цена поставщика за услугу), а не объект детализации: разбивки netto/gross/rack/bar для допуслуг нет.


Структура ViewBookingInfo#

ПолеТипОбязательноОписание
statusstring, enumДаСтатус бронирования. Возможные значения: unknown, inWork, completed, rejected, cancelled, failed
isCancellablebooleanДаПризнак доступности отмены в текущий момент. false означает, что бронирование недоступно для отмены — например, если отмена уже запрошена или бронирование уже отменено
createdAtdatetimeНетДата создания (ISO 8601)
updatedAtdatetimeНетДата обновления (ISO 8601)
cancelledAtdatetimeНетДата отмены (ISO 8601)

Изменение значений status. Было: Unknown, Inwork, Booked, Rejected, Cancelled, Error (произвольная строка, не документирована как перечисление). Станет: unknown, inWork, completed, rejected, cancelled, failed (фиксированный enum) — тот же набор значений, что в /api/hotels/create_booking и /api/hotels/search_bookings.


Структура ViewBookingUpsellInfo#

ПолеТипОбязательноОписание
typestringНетТип услуги (earlyCheckin, lateCheckout)
namestringНетНазвание услуги
valueMoneyНетСтоимость

Структура ViewBookingCustomerInfo#

ПолеТипОбязательноОписание
firstNamestringНетИмя
lastNamestringНетФамилия
emailstringНетEmail
phonestringНетТелефон
commentstringНетКомментарий

Структура ViewBookingHostInfo#

Наличие данных зависит от поставщика:

  • Авито — возвращает информацию (при наличии) за день до заезда или если бронь подтверждена и отмена возможна только со штрафом.
  • Островок, Roomlink — ограничений нет, но данные зависят от заполненности у поставщика.
  • Acase, HBPro — данные не возвращаются.
ПолеТипОбязательноОписание
namestringНетИмя
emailstringНетEmail
phonestringНетТелефон
commentstringНетКомментарий

Структура ViewBookingExtraInfo#

Наличие данных зависит от поставщика:

  • Авито — возвращает информацию (при наличии) за день до заезда или если бронь подтверждена и отмена возможна только со штрафом.
  • Островок, Roomlink — ограничений нет, но данные зависят от заполненности у поставщика.
  • Acase, HBPro — данные не возвращаются.
ПолеТипОбязательноОписание
entrancestringНетНомер подъезда
apartmentNumberstringНетНомер квартиры
entranceCodestringНетКод от домофона
howToFindstringНетКак найти дом
howToGetInstringНетКак попасть в квартиру
lockCodestringНетКод от сейфа или двери
checkInRulesstringНетПравила заселения
checkOutRulesstringНетПравила выселения
accommodationRulesstringНетПравила проживания
wifiNamestringНетНазвание сети Wi-Fi
wifiPasswordstringНетПароль от Wi-Fi

Структура ViewBookingSupplierInfo#

ПолеТипОбязательноОписание
subProviderNamestringНетНаименование субпровайдера (не путать с юрлицом-агентом)
invoiceNumberstringНетНомер счёта
commentstringНетКомментарий от поставщика

Примеры ответов#

Успешный ответ#

Пример ниже — для запроса с details.includePriceDetails = true (полная детализация цен). Без этого флага блок цен ограничивается полями supplier/contractId/searchPresetId/searchPresetName/pricingPresetId/pricingPresetName/payable/amountSell/paymentType/cancellationRules.

Развернуть пример
  1{
  2  "bookingId": "019a0c82-5d2b-7a5e-84fe-56357a57df66",
  3  "supplierOrderId": "SUP-12345",
  4  "partner": {
  5    "partnerOrderId": "ORDER-12345",
  6    "comment": "VIP клиент"
  7  },
  8  "hotel": {
  9    "hotelId": "hotel-001",
 10    "room": {
 11      "name": "Стандартный двухместный",
 12      "rateName": "Невозвратный тариф",
 13      "roomId": "room-7",
 14      "mealName": "Завтрак",
 15      "beddingNames": ["Двуспальная кровать"]
 16    }
 17  },
 18  "guests": {
 19    "count": 2,
 20    "adultCount": 2,
 21    "childrenCount": 0,
 22    "guests": [
 23      {
 24        "firstName": "IVAN",
 25        "lastName": "IVANOV",
 26        "isChild": false,
 27        "citizenship": "RU",
 28        "gender": "male"
 29      },
 30      {
 31        "firstName": "MARIA",
 32        "lastName": "IVANOVA",
 33        "isChild": false,
 34        "citizenship": "RU",
 35        "gender": "female"
 36      }
 37    ]
 38  },
 39  "prices": {
 40    "supplier": "ostrovok",
 41    "contractId": "uy123u8213y2j",
 42    "searchPresetId": "87123eh22323",
 43    "searchPresetName": "Стандартный поиск",
 44    "pricingPresetId": "ed23uhds223f",
 45    "pricingPresetName": "Базовое ценообразование",
 46    "payable": {
 47      "amount": 15000.00,
 48      "currency": "RUB"
 49    },
 50    "amountSell": {
 51      "amount": 15000.00,
 52      "currency": "RUB"
 53    },
 54    "paymentType": "online",
 55    "cancellationRules": {
 56      "freeCancellationBefore": "2025-12-13T12:00:00+00:00"
 57    },
 58    "total": {
 59      "amount": 13500.00,
 60      "currency": "RUB"
 61    },
 62    "discount": null,
 63    "markup": {
 64      "amount": 1000.00,
 65      "currency": "RUB"
 66    },
 67    "serviceFee": {
 68      "amount": 200.00,
 69      "currency": "RUB"
 70    },
 71    "commission": {
 72      "margin": "10.00",
 73      "marginCurrency": "RUB",
 74      "supplier": {
 75        "amount": 1500.00,
 76        "currency": "RUB"
 77      },
 78      "subagent": {
 79        "amount": 300.00,
 80        "currency": "RUB"
 81      }
 82    },
 83    "supplierBreakdown": {
 84      "netto": {
 85        "amount": 13500.00,
 86        "currency": "RUB"
 87      },
 88      "gross": {
 89        "amount": 15000.00,
 90        "currency": "RUB"
 91      },
 92      "rack": null,
 93      "bar": null,
 94      "minRetailPrice": null
 95    },
 96    "vat": {
 97      "percent": 20,
 98      "value": {
 99        "amount": 2500.00,
100        "currency": "RUB"
101      },
102      "isVatFree": false,
103      "included": true
104    },
105    "deposit": null
106  },
107  "bookingInfo": {
108    "status": "completed",
109    "isCancellable": true,
110    "createdAt": "2025-11-20T10:30:00+00:00",
111    "updatedAt": "2025-11-20T10:30:05+00:00"
112  },
113  "checkin": "2025-12-15",
114  "checkout": "2025-12-18",
115  "checkinTime": "14:00",
116  "checkoutTime": "12:00",
117  "supplier": {
118    "subProviderName": "ООО Академсервис",
119    "invoiceNumber": "INV-20251120-001",
120    "comment": "Номер подтверждён поставщиком"
121  },
122  "customer": {
123    "firstName": "Ivan",
124    "lastName": "Ivanov",
125    "email": "ivan@example.com",
126    "phone": "+79991234567"
127  },
128  "hostContacts": {
129    "name": "Petr",
130    "email": "petr@example.com",
131    "phone": "+12345678",
132    "comment": "comment"
133  },
134  "extraInfo": {
135    "entrance": "1",
136    "apartmentNumber": "1",
137    "entranceCode": "111",
138    "howToFind": "red roof",
139    "howToGetIn": "apartment number 1",
140    "lockCode": "789123",
141    "checkInRules": "after 16:00",
142    "checkOutRules": "before 12:00",
143    "accommodationRules": "string",
144    "wifiName": "wifi name",
145    "wifiPassword": "123qwerty"
146  }
147}

Ответ с ошибкой#

1{
2  "error": {
3    "code": "BOOKING_NOT_FOUND",
4    "message": "Бронирование не найдено",
5    "description": "Бронирование с указанным идентификатором не найдено",
6    "errorId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
7  }
8}

Типичные ошибки TAPI#

Код ошибкиПричинаРешение
BOOKING_NOT_FOUNDБронирование не найдено, не принадлежит клиенту или не является отельнымПроверьте корректность bookingId
VALIDATION_ERRORОшибка валидации запросаПроверьте обязательные поля и форматы значений

Помимо перечисленных TAPI-кодов, при ошибке на стороне поставщика в ответе может быть возвращён код ошибки поставщика без изменений (проброс) — набор таких кодов зависит от поставщика и не фиксирован.