Ошибки#
Единый формат ошибок для всех операций домена отелей: search, hotel_pricing, offer_pricing, create_booking, view_booking, cancel_booking, search_bookings.
Error#
Объект ошибки в клиентском ответе. Приходит полем error в корне ответа; при успешном ответе поле пустое, а полезная нагрузка лежит рядом, теми же полями корня.
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
code | string | Да | Код ошибки из закрытого перечня — см. Коды ошибок ниже |
message | string | Да | Текст ошибки для показа пользователю |
description | string | Нет | Уточнение к тексту ошибки. Заполняется не всегда — часто дублирует message |
errorId | string, uuid | Нет | Идентификатор ошибки для обращения в поддержку |
HTTP-статусы#
Статус 400 приходит только при отказе на проверке схемы запроса на границе API. Во всех остальных случаях ошибка приходит в теле ответа со статусом 200.
Одно значение возможно с обоими статусами: VALIDATION_ERROR со статусом 400 означает, что запрос отверг сам API, а со статусом 200 — что параметры отверг поставщик.
Примеры#
Ошибка от поставщика
1{
2 "code": "RATE_SOLD_OUT",
3 "message": "The rate is sold out. Please search again and select another offer.",
4 "errorId": "01937c4e-8a1f-7c3d-9b21-4f6a2e8d1c05"
5}Ошибка до обращения к поставщику
1{
2 "code": "REGION_MAPPING_NOT_FOUND",
3 "message": "No supplier mapping found for region 99999",
4 "errorId": "01937c4e-9d02-7a55-8e13-7b9c5a2f4d68"
5}Коды ошибок#
Значения поля code. Набор закрытый — других значений не бывает. Три группы: коды, которые формирует сам API до обращения к поставщику или вне его; два значения, которые API подставляет сам; и коды, которые приходят от поставщика без изменений.
Колонка «Метод(ы)»: все методы означает любую операцию домена.
Контекстные коды#
Формируются до обращения к поставщику или вне его — своего текста и обращения к поставщику ещё не было.
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
INVALID_REGION_ID | RegionId has invalid format | search | Значение regionId не соответствует ожидаемому формату |
REGION_MAPPING_NOT_FOUND | No supplier mapping found for region {regionId} | search | Соответствия региона нет ни у одного из активных офисов поставщиков |
INVALID_HOTEL_ID | HotelId has invalid format | hotel_pricing | Значение hotelId не соответствует ожидаемому формату |
HOTEL_MAPPING_NOT_FOUND | No supplier mapping found for hotel {hotelId} | hotel_pricing | Соответствия отеля нет ни у одного из активных офисов поставщиков |
NO_SEARCH_PRESETS_CONFIGURED | Search is unavailable: no search preset is configured. | search, hotel_pricing | Не настроен ни один пресет поиска |
NO_MATCHING_SEARCH_PRESET | Search is not possible with the given parameters: no matching search preset was found. | search, hotel_pricing | Нет пресета, подходящего под параметры запроса |
NO_TARGETS | No supplier targets available for this request. | все методы | Нет активных офисов поставщика, настроенных для клиентского аккаунта |
OFFER_NOT_FOUND | Offer not found or expired | offer_pricing, create_booking | Предложение не найдено в кэше либо срок его хранения истёк |
OFFER_NOT_VERIFIED | Offer must be verified via offer_pricing before booking | create_booking | Перед бронированием предложение не подтверждено вызовом offer_pricing |
OFFER_BELOW_MIN_RETAIL_PRICE | Offer is excluded: the sale price is below the supplier minimum retail price. | offer_pricing | Цена продажи после применения пресета ниже минимальной розничной цены поставщика |
ECLC_NOT_AVAILABLE | Offer does not support early checkin / late checkout | create_booking | Для предложения недоступны ранний заезд и поздний выезд |
HOTEL_TIME_UNKNOWN | Hotel standard check-in and check-out time could not be determined... | create_booking | Не определено стандартное время заезда или выезда отеля |
BOOKING_NOT_FOUND | Booking not found | view_booking, cancel_booking | Бронь не найдена в хранилище API (не путать с SUPPLIER_BOOKING_NOT_FOUND ниже — та бронь есть в хранилище, но не найдена у поставщика) |
Коды словаря, которые API подставляет сам#
| Значение | HTTP-статус | Метод(ы) | Когда возвращается |
|---|---|---|---|
VALIDATION_ERROR | 400 | все методы | Запрос не прошёл проверку полей на границе API; к поставщику обращения не было. С тем же значением и статусом 200 приходит отказ поставщика по его параметрам |
SYSTEM_ERROR | 200 в теле | все методы | Внутренний сбой, включая необработанное исключение, недоступность кэша предложений и недоступность справочников |
Коды от поставщика#
Приходят от поставщика и передаются клиенту без изменений. Если операция опрашивала несколько офисов поставщика и ошибкой ответили все — выбирается и передаётся код одной из полученных ошибок.
Доступность предложения и объекта#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
RATE_NOT_FOUND | The rate is no longer available. Please search again and select another offer. | offer_pricing, create_booking | Тариф больше не отдаётся поставщиком |
RATE_SOLD_OUT | The rate is sold out. Please search again and select another offer. | search, hotel_pricing, offer_pricing, create_booking | По тарифу нет свободных номеров; сюда же исчерпание квоты или блока мест |
OFFER_EXPIRED | The offer has expired. Please repeat the search and confirm a new offer. | offer_pricing, create_booking | Истёк срок действия предложения или формы брони |
RATE_LOCKED | The rate is temporarily locked by another booking. Please try again in a few minutes. | все методы | Объект или запись заблокированы другим пользователем поставщика |
PROPERTY_INACTIVE | The property is not active at the supplier. Please select another property. | hotel_pricing, offer_pricing, create_booking | Объект размещения снят с публикации у поставщика |
ONLINE_BOOKING_DISABLED | Online booking is disabled for this property. Please select another property. | hotel_pricing, offer_pricing, create_booking | Онлайн-бронирование объекта отключено |
BOOKING_NOT_ALLOWED | Booking is not allowed for this property. Please select another property. | hotel_pricing, offer_pricing, create_booking | Бронирование объекта запрещено настройками поставщика |
INSTANT_BOOKING_REQUIRED | This property accepts instant booking only. Please select another property. | create_booking | Объект принимает только мгновенное бронирование |
PREBOOK_DISABLED | Pre-booking is disabled for this account. Please contact your account manager. | offer_pricing | Предбронирование выключено для учётной записи |
DATES_NOT_AVAILABLE | The requested dates are not available for this property. Please select other dates. | search, hotel_pricing, offer_pricing, create_booking | Запрошенные даты у объекта заняты или закрыты |
NO_RATES_FOUND | The supplier returned no rates for this request. Please change the search parameters. | search, hotel_pricing, offer_pricing, create_booking | Поставщик ответил успешно, но ни одного тарифа не вернул |
NO_PRODUCTS_FOUND | The supplier returned no products for this request. Please change the search parameters. | hotel_pricing, offer_pricing | Поставщик ответил успешно, но ни одного продукта не вернул |
ROOM_NOT_FOUND | The requested room could not be found. Please repeat the search. | hotel_pricing, offer_pricing, create_booking | В ответе поставщика нет запрошенного номера либо номер не принадлежит объекту |
CONTRACT_MISMATCH | The offer does not match the contract in use. Please repeat the search. | offer_pricing, create_booking | Предложение получено по одному договору, а бронируется по другому |
Цена и условия#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
PRICE_CHANGED | The price has changed. Please confirm the offer again. | offer_pricing, create_booking | Цена изменилась между прайсингом и бронированием |
CURRENCY_CHANGED | The offer currency has changed. Please confirm the offer again. | offer_pricing, create_booking | Изменилась валюта предложения |
CONFIRMATION_TYPE_CHANGED | The confirmation type has changed. Please confirm the offer again. | offer_pricing, create_booking | Изменился тип подтверждения брони |
CANCELLATION_TERMS_CHANGED | The cancellation terms have changed. Please confirm the offer again. | offer_pricing, create_booking | Изменились условия отмены или штрафы |
ZERO_PRICE | The supplier returned a zero price for this offer. Please repeat the search. | hotel_pricing, offer_pricing | Поставщик вернул нулевую цену |
PRICE_NOT_CALCULATED | The supplier did not calculate the price for this offer. Please repeat the search. | hotel_pricing, offer_pricing | В блоке цены есть ошибка, но кода в ней нет |
Отмена#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
CANCELLATION_DEADLINE_PASSED | The cancellation deadline has passed. This booking can no longer be cancelled. | cancel_booking | Срок, до которого отмена была возможна, прошёл |
CANCELLATION_NOT_ALLOWED | Cancellation is not allowed for this booking. | cancel_booking | Отмена запрещена условиями тарифа или объекта |
BOOKING_STATUS_NOT_CANCELLABLE | The current booking status does not allow cancellation. | cancel_booking | Текущий статус брони отмену не допускает |
CANCELLATION_NOT_CONFIRMED | The supplier did not confirm the cancellation. Please check the booking status. | cancel_booking | Запрос на отмену отправлен, но статус брони её отмену не подтверждает |
CANCELLATION_FORMAT_INVALID | The cancellation request format is not accepted by the supplier. | cancel_booking | Поставщик не принял формат запроса на аннуляцию |
Проверка ввода#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
INVALID_CHECKIN_DATE | The check-in date is invalid. | search, hotel_pricing, offer_pricing, create_booking | Дата заезда не проходит проверку поставщика |
CHECKIN_DATE_IN_PAST | The check-in date is in the past. Please select a current or future date. | search | Дата заезда раньше текущей |
BOOKING_HORIZON_EXCEEDED | The requested dates are beyond the booking horizon. Please select earlier dates. | search | Дата выходит за предельный срок бронирования вперёд |
INVALID_CHECKOUT_DATE | The check-out date is invalid. | search, hotel_pricing, offer_pricing, create_booking | Дата выезда не проходит проверку поставщика |
INVALID_DATES_RANGE | The check-in and check-out dates are inconsistent. | search, hotel_pricing, offer_pricing, create_booking | Даты заезда и выезда противоречат друг другу |
CHECKIN_DATE_MISMATCH | The arrival date does not match the check-in date of the offer. | create_booking | Дата заезда в брони не совпадает с датой из прайсинга |
STAY_TOO_LONG | The length of stay exceeds the supplier limit. | search, hotel_pricing | Длительность проживания больше предельной у поставщика |
MIN_STAY_NOT_MET | The length of stay is below the minimum required by the property. | hotel_pricing, offer_pricing, create_booking | Длительность меньше минимальной у объекта |
GUESTS_LIMIT_EXCEEDED | The number of guests exceeds the limit for this property. | hotel_pricing, offer_pricing, create_booking | Гостей больше, чем допускает объект |
GUESTS_COUNT_MISMATCH | The guest details do not match the declared number of guests. | create_booking | Состав переданных гостей не совпадает с заявленным их числом |
INVALID_ADULTS_COUNT | The number of adults is invalid. | search, hotel_pricing, offer_pricing, create_booking | Число взрослых недопустимо |
CHILDREN_NOT_ALLOWED | Children are not allowed at this property. | hotel_pricing, offer_pricing, create_booking | Объект не принимает детей |
INVALID_CHILDREN_AGES | The children ages are invalid. | search, hotel_pricing, offer_pricing, create_booking | Возраст детей вне допустимого диапазона |
INVALID_CHILDREN_DATA | The children data is invalid. | create_booking | Состав данных о детях не проходит проверку |
CHILDREN_LIMIT_EXCEEDED | The number of children exceeds the limit for this property. | search | Детей больше, чем допускает объект |
INVALID_ROOMS_NUMBER | The number of rooms is invalid. | search, create_booking | Число номеров недопустимо |
INVALID_CHECKIN_TIME | The requested check-in time is invalid. | create_booking | Запрошенное время заезда недопустимо |
INVALID_CHECKOUT_TIME | The requested check-out time is invalid. | create_booking | Запрошенное время выезда недопустимо |
CHECKIN_TOO_EARLY | The requested check-in time is earlier than the property allows. | create_booking | Время заезда раньше, чем допускает объект |
CHECKIN_TOO_LATE | The requested check-in time is later than the property allows. | create_booking | Время заезда позже, чем допускает объект |
PAYMENT_TYPE_INVALID | The selected payment type is invalid. | create_booking | Выбранная форма оплаты недопустима |
PAYMENT_TYPE_UNAVAILABLE | The selected payment type is not available for this booking. | create_booking | Форма оплаты не была доступна на форме брони |
CREDIT_CARD_DATA_INCOMPLETE | The credit card data is incomplete. | create_booking | Переданы не все данные карты |
INVALID_EMAIL | The email address is invalid. | create_booking | Адрес электронной почты не проходит проверку |
INVALID_UUID_FORMAT | An identifier in the request has an invalid format. | create_booking | Идентификатор в запросе передан в неверном формате |
UPSELL_DATA_INVALID | The additional service data is invalid. | search, offer_pricing, create_booking | Данные раннего заезда или позднего выезда не проходят проверку |
RETURN_PATH_REQUIRED | The return path is required for the selected payment type. | create_booking | Для выбранной формы оплаты обязателен адрес возврата |
SUPPLIER_DATA_REQUIRED | Additional supplier data is required for this booking. | create_booking | Поставщик требует дополнительные данные для брони |
GROUP_BOOKING_NOT_AUTHORIZED | Group booking is not authorized for this account. Please contact your account manager. | create_booking | Запрос распознан поставщиком как групповое бронирование |
INVALID_PAGING | The requested page is out of range. | search, view_booking, search_bookings | Запрошена страница вне диапазона |
INVALID_BOOKING_AMOUNT | The booking amount is invalid. | create_booking | Сумма брони не проходит проверку |
INVALID_BOOKING_ID | The booking identifier has an invalid format. | view_booking, cancel_booking | Идентификатор брони передан в неверном формате |
SERVICE_TYPE_NOT_ALLOWED | This service type is not allowed for the account. | search, hotel_pricing | Работа с этим видом услуг запрещена учётной записи |
REQUIRED_FIELD_MISSING | A required field is missing from the request. | все методы | В запросе нет обязательного поля |
INVALID_FIELD_FORMAT | A request field has an invalid format. | все методы | Поле запроса передано в неверном формате |
INVALID_FIELD_VALUE | A request field has an invalid value. | все методы | Значение поля запроса вне допустимого |
VALIDATION_FAILED | The request did not pass validation. Please check the request parameters. | все методы | Запрос не прошёл проверку до обращения к поставщику |
VALIDATION_ERROR | The supplier rejected the request parameters. | все методы | Поставщик отверг параметры запроса по своим ограничениям |
Аккаунт и оплата#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
INSUFFICIENT_BALANCE | The account balance is insufficient for this booking. Please contact your account manager. | create_booking | На счёте недостаточно средств |
OVERDUE_DEBT | The operation is blocked by an overdue debt. Please contact your account manager. | все методы | Операция заблокирована просроченной задолженностью |
BOOKING_LIMIT_EXCEEDED | The booking limit for the account has been exceeded. Please contact your account manager. | create_booking | Исчерпан лимит бронирований либо предел времени завершения брони |
PAYMENT_METHOD_NOT_ALLOWED | The payment method is not allowed for this account. Please contact your account manager. | create_booking | Форма оплаты не разрешена учётной записи |
ORDER_PAYMENT_NOT_PERMITTED | Payment for this order is not permitted. Please contact your account manager. | create_booking | Нет прав на оплату конкретно этого заказа |
ACCOUNT_NOT_CONFIGURED | The account is not configured at the supplier. Please contact support. | create_booking | Учётная запись у поставщика не настроена |
CONTRACT_RESTRICTED | The operation is not allowed by the contract. Please contact your account manager. | create_booking | Операция не разрешена договором, в том числе трёхсторонним |
Дубли#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
DUPLICATE_ORDER_ID | An order with this identifier already exists. Please create the booking with a new order identifier. | create_booking | Идентификатор заказа уже использован |
DUPLICATE_BOOKING | An identical booking already exists at the supplier. Please check the booking status. | create_booking | Такая же бронь у поставщика уже создана |
Не найдено#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
HOTEL_NOT_FOUND | Hotel not found for the provided identifier. | search, hotel_pricing, offer_pricing, create_booking | Отель не найден у поставщика по переданному идентификатору |
SUPPLIER_BOOKING_NOT_FOUND | Booking not found at the supplier for the provided identifier. | create_booking, view_booking, search_bookings, cancel_booking | Заказ или бронь не найдены у поставщика по переданному идентификатору (не путать с BOOKING_NOT_FOUND выше) |
Неполный ответ поставщика#
Поставщик ответил успешно, но без поля, без которого операцию не продолжить.
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
MISSING_ORDER_ID | The supplier response does not contain the order identifier. Please contact support. | create_booking, view_booking, cancel_booking | В ответе нет идентификатора заказа |
MISSING_ACCOMMODATION | The supplier response does not contain accommodation data. Please contact support. | view_booking, cancel_booking | В ответе нет данных о размещении |
MISSING_ARRIVAL_DATE | The supplier response does not contain the arrival date. Please contact support. | view_booking, cancel_booking | В ответе нет даты заезда |
MISSING_DEPARTURE_DATE | The supplier response does not contain the departure date. Please contact support. | view_booking, cancel_booking | В ответе нет даты выезда |
EMPTY_SEARCH_ID | The supplier response does not contain the search identifier. Please repeat the search. | search | В ответе нет идентификатора поиска |
EMPTY_OFFER_DETAILS | The supplier response does not contain the offer details. Please repeat the search. | hotel_pricing, offer_pricing | В ответе нет детализации предложения |
EMPTY_BOOKING_ITEMS | The supplier response does not contain order items. Please contact support. | create_booking | В заказе нет ни одной позиции |
EMPTY_ITEM_ID | The supplier response does not contain the order item identifier. Please contact support. | create_booking, cancel_booking | В позиции заказа нет идентификатора |
EMPTY_BOOKING_STATUS | The supplier response does not contain the booking status. Please check the booking status later. | create_booking | В ответе нет статуса брони |
NO_HOTEL_ITEM | The order at the supplier contains no hotel item. Please contact support. | cancel_booking | В заказе у поставщика нет отельной позиции |
SUPPLIER_RESPONSE_INCOMPLETE | The supplier response is incomplete. Please contact support. | все методы | Поставщик сообщил о сбое обработки заказа, брони, номеров или отмены |
Сбои и недоступность поставщика#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
SUPPLIER_SEARCH_FAILED | The supplier failed to perform the search. Please try again later. | search, hotel_pricing | Поставщик сообщил о внутреннем сбое именно поиска |
SUPPLIER_INTERNAL_ERROR | The supplier returned an internal error. Please try again later. | все методы | Поставщик сообщил о своей внутренней ошибке |
SUPPLIER_UNAVAILABLE | The supplier is temporarily unavailable. Please retry later. | все методы | Поставщик недоступен: соединение не установлено, сеть отказала, либо сам поставщик сообщил о временной недоступности |
TIMEOUT | The supplier did not respond in time. Please try again later. | все методы | Истекло время ожидания ответа поставщика |
SUPPLIER_RESPONSE_UNPARSEABLE | The supplier response could not be read. Please contact support. | все методы | Ответ поставщика не удалось разобрать |
TOO_MANY_REQUESTS | Request rate limit exceeded. Please retry later. | все методы | Превышено ограничение частоты запросов к поставщику |
PAYMENT_GATEWAY_ERROR | The payment provider is unavailable. Please try again later. | create_booking | Отказ на стороне поставщика тарифа или платёжного шлюза |
PAYMENT_HOLD_FAILED | The payment hold was declined. Please use another payment method. | create_booking | Не удалось заблокировать средства на карте |
PAYMENT_CHARGE_FAILED | The payment charge was declined. Please use another payment method. | create_booking | Не удалось списать средства с карты |
CONCURRENT_BOOKING | Another booking for this property is already in progress. Please try again in a few minutes. | create_booking | По объекту прямо сейчас создаётся другое бронирование |
SELF_BOOKING | The property cannot be booked by its own owner. | create_booking | Объект бронирует его же владелец |
SELLER_NOT_LEGAL_ENTITY | The property owner is not a legal entity and cannot be booked. | create_booking | Владелец объекта не юридическое лицо |
TEST_BUYER_PROD_ITEM | A test account cannot book a production property. | create_booking | Тестовая учётная запись бронирует боевой объект |
UNEXPECTED_FOR_SCENARIO | The supplier rejected the request as unexpected for this scenario. Please contact support. | все методы | Поставщик счёл запрос неожидаемым для сценария |
SUPPLIER_ERROR | Supplier request finished with error. | все методы | Поставщик сообщил об ошибке без более точного кода |
Доступ и учётные данные#
Ошибки уровня интеграции сервиса с поставщиком, а не действия клиента — причина не раскрывается подробно.
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
AUTHENTICATION_FAILED | Supplier authentication failed. Please contact support. | все методы | Поставщик отклонил учётные данные сервиса |
ACCESS_DENIED | Access to the supplier is denied. Please contact support. | все методы | Нет прав на метод либо на операцию по договору |
API_ACCESS_DISABLED | Access to the supplier is denied. Please contact support. | все методы | Доступ к интерфейсу поставщика выключен |
SANDBOX_RESTRICTION | Supplier integration error. Please contact support. | create_booking, cancel_booking | Операция недоступна в тестовой среде поставщика |
Операция или значение не поддерживаются#
| Значение | message | Метод(ы) | Когда возвращается |
|---|---|---|---|
PROPERTY_CATEGORY_NOT_SUPPORTED | This property category is not supported. | hotel_pricing | Категория объекта интеграцией не поддерживается |
PAYMENT_VERIFICATION_NOT_SUPPORTED | The offer requires 3-D Secure verification, which is not supported. Please select another offer. | create_booking | Поставщик требует проверку 3-D Secure, которой в интеграции нет |
CURRENCY_NOT_SUPPORTED | The requested currency is not supported by the supplier. Please select another currency. | search | Поставщик не работает с переданной валютой |
REGION_NOT_SEARCHABLE | Search is not available for this region. Please select another region. | search | Регион существует, но поиск по нему поставщик не поддерживает |
NOT_SUPPORTED | The requested operation is not supported for this property. | все методы | Операция не поддерживается для выбранного поставщика |
> Некоторые редкие технические коды интеграции (адрес отклонён, метод вызван не тем HTTP-методом и т.п.) в этой таблице не перечислены — на практике клиент их не встречает, они означают внутренний сбой конфигурации сервиса. >