Руководство по использованию API

Полное руководство для интеграции с нашим API через Swagger UI

🚀 Открыть Swagger UI

📖 Введение

Это руководство предоставляет подробное описание взаимодействия с нашим API. Оно призвано предоставить глубокое понимание логики работы нашего API, используя Swagger UI как основной инструмент для интерактивного изучения и тестирования.

1️⃣ Получение токена аутентификации

POST /api/token/

Это фундаментальный шаг, который инициирует сессию взаимодействия с API. Без валидного токена ни один другой защищенный эндпоинт не будет доступен.

📥 Ключевые поля запроса:

  • username (string, обязательное) - Уникальный идентификатор партнера в нашей системе
  • password (string, обязательное) - Секретный ключ, ассоциированный с вашим именем пользователя

📤 Ключевые поля ответа:

  • status (string) - Индикатор успешности операции
  • token (string) - Ваш JWT токен для авторизации
💡 Использование в Swagger UI: После получения токена используйте кнопку "Authorize" в верхней части страницы и вставьте токен в формате Bearer <ВАШ_ТОКЕН>

2️⃣ Запрос коммерческого предложения (Air Shopping)

POST /api/airshopping/

Это основной эндпоинт для поиска авиабилетов и формирования предложений.

📥 Ключевые поля запроса:

  • itinerary (array) - Массив сегментов маршрута с полями:
    • origin - IATA-код города отправления
    • destination - IATA-код города прибытия
    • date_to - Дата вылета (YYYY-MM-DD)
  • flight_class (string) - Класс обслуживания (Economy, Business, First)
  • adt (integer) - Количество взрослых пассажиров
  • chd (integer, опц.) - Количество детей
  • inf (integer, опц.) - Количество младенцев без места
  • currency (string) - Требуемая валюта (TJS, RUB, USD, EUR)

📤 Ключевые поля ответа:

  • OfferID - ⚡ Уникальный идентификатор предложения (важно для последующих запросов!)
  • Flights - Детали каждого перелета
  • TotalPrice - Суммарная стоимость предложения
  • OfferExpirationTimeLimitDateTime - Время действия предложения

3️⃣ Запрос правил применения тарифов

POST /api/rules/

Предоставляет необходимую информацию для клиента перед покупкой билета.

📥 Ключевые поля запроса:

  • offer_id (string) - OfferID из предыдущего запроса

📤 Ключевые поля ответа:

  • FareRuleText - Объект с текстом правил тарифа
  • RemarkText - Сырой текст тарифных правил

4️⃣ Уточнение цены

POST /api/offerprice/
⚠️ Критически важный этап: Цены могут быстро меняться. Этот запрос позволяет получить актуальную и финальную стоимость.

📥 Ключевые поля запроса:

  • offer_id (string) - OfferID предложения
  • currency (string) - Валюта для уточненной цены

📤 Ключевые поля ответа:

  • OfferID - Актуальный OfferID (может измениться!)
  • TotalPrice - Уточненная полная стоимость
  • BookingID - ⚡ Временный ID бронирования (сохраните для следующих шагов!)

5️⃣ Резервирование инвентаря (Inventory Guarantee)

POST /api/inv-guarantee/

Этот шаг является опциональным, но настоятельно рекомендуется для критически важных бронирований.

📥 Ключевые поля запроса:

  • offer_id (string) - Актуальный OfferID из /api/offerprice/

📤 Ключевые поля ответа:

  • InventoryGuaranteeID - ID резервации
  • InventoryGuaranteeTimeLimitDateTime - Время действия резервации

6️⃣ Создание заказа (Booking Creation)

POST /api/create/

Основной этап формирования бронирования с привязкой к конкретным пассажирам.

📥 Ключевые поля запроса:

  • booking_id (integer) - BookingID из /api/offerprice/
  • paxes (array) - Массив данных о пассажирах:
    • pax_id - ID пассажира
    • ptc - Тип пассажира (ADT, CHD, INF)
    • individual - Личные данные (имя, фамилия, дата рождения, пол)
    • doc - Документ (номер, тип, страна)
  • currency (string) - Валюта заказа

📤 Ключевые поля ответа:

  • MixOrderID - Внутренний ID заказа
  • PNRBookingID - ⚡ PNR-код бронирования
  • AirlineBookingID - Код бронирования авиакомпании
  • StatusCode - Текущий статус (обычно "OPENED")

7️⃣ Одобрение заказа (Order Approval)

POST /api/change/
✅ Этот шаг финализирует бронирование и приводит к выписке электронных билетов.

📥 Ключевые поля запроса:

  • booking_id (integer) - BookingID заказа для одобрения
  • currency (string) - Валюта заказа

📤 Ключевые поля ответа:

  • StatusCode - Новый статус (обычно "CLOSED")
  • TicketNumber - ⚡ Номер электронного билета
  • VoidTimelimitUtc - Время для аннулирования без штрафа

8️⃣ Просмотр состояния заказа

POST /api/retrieve/

Независимо от статуса, вы всегда можете получить актуальные данные о заказе.

📥 Ключевые поля запроса:

  • booking_id (integer) - BookingID для просмотра
  • currency (string) - Валюта для ценовых компонентов

📤 Ключевые поля ответа:

  • Order - Полная информация о заказе
  • Ticket - Массив выписанных билетов (если есть)

9️⃣ Отмена заказа

POST /api/cancel/
⚠️ Внимание: В зависимости от правил тарифа и времени до вылета, при отмене могут быть применены штрафы.

📥 Ключевые поля запроса:

  • booking_id (integer) - BookingID заказа для отмены

📤 Ключевые поля ответа:

  • status - Статус выполнения операции
  • OperationStatus - Статус отмены (ожидается "Success")
  • MixOrderID - ID отмененного заказа

⚠️ Коды ошибок веб-сервиса

Справочник кодов ошибок, которые могут возникнуть при работе с API. Ошибки разделены на категории для упрощения диагностики проблем.

📋 Общие положения

Под ошибками понимается:

  • Ошибки (error) - означающие неуспешное выполнение той или иной операции. Ошибки носят глобальный контекст.
  • Предупреждения (warning) - означающие либо частичное выполнение операции, либо сообщение о невозможности выполнения операции согласно установленным бизнес-процессам, что ошибкой не является.

Уровни ошибок:

AVS API предусматривает 2 уровня для передачи ошибок:

1-й уровень: (Error)
Сюда относятся ошибки, связанные с:
  • Нарушением формата запроса
  • Авторизацией (запрос не авторизован)
  • Ошибки, когда запрос полностью не обработан
  • Ошибки, связанные с логической проверкой запроса и результатами обработки запроса, такие как:
    • неверные даты вылета
    • отрицательное количество пассажиров
    • несуществующие станции
    • отсутствующий контент
    • и пр.
2-й уровень: (Warning)
Запрос обработан, результат передан, но с рядом ограничений.

Структура ошибок:

Все ошибки возвращаются в следующем формате JSON:

Общая структура:
{
  "detail": {
    "error": {
      "code": "ERROR_CODE",
      "message": "Описание ошибки"
    }
  }
}
С дополнительными деталями:
{
  "detail": {
    "error": {
      "code": "ERROR_CODE",
      "message": "Описание ошибки",
      "details": [ /* дополнительная информация */ ]
    }
  }
}
💡 Важно: При возникновении ошибки обратите внимание на код и тип ошибки для быстрого определения причины проблемы.
🔐 Ошибки аутентификации (AUTH)
Код Тип Описание
AUTH_1000 Authentication Неверный логин или пароль
AUTH_1001 Authentication Ваш аккаунт деактивирован
AUTH_1002 Authentication Доступ запрещен с данного IP-адреса
AUTH_1003 Authentication Неверный API-ключ
AUTH_1004 Authentication Пользователь не найден
AUTH_1005 Authentication Неверный токен авторизации
🔧 Базовые ошибки системы (ERR)
Код Тип Описание
ERR_1000 Internal Внутренняя ошибка сервера
ERR_1001 BadRequest Валюта не разрешена
ERR_1002 NotFound Предложение не найдено
ERR_1003 NotFound Не найден курс для валютной пары
ERR_1004 BadRequest Не указаны разрешенные валюты для пользователя
ERR_1005 NotFound Не найдены API данные для пользователя
ERR_1006 BadRequest Не существует временная зона
ERR_1007 Internal Ошибка при конвертации времени
ERR_1008 BadRequest Ошибка при парсинге даты
ERR_1009 NotFound Кошелек не найден
ERR_1010 NotFound Заказ не найден
ERR_1011 BadRequest Кредитный лимит превышен
ERR_1012 Internal Ошибка подключения к базе данных
ERR_1013 BadRequest Один или несколько обязательных параметров равны None
ERR_1014 Internal Ошибка обновления баланса
ERR_1015 Internal Ошибка получения информации о балансе
ERR_1016 Internal Ошибка при получении API данных
ERR_1017 Internal Произошла ошибка при создании Client
ERR_1018 Forbidden Доступ к эндпоинту запрещен
ERR_1019 Forbidden Доступ запрещен к заказу

✈️ Ошибки провайдера (MIX)

I. Аутентификация (Auth)
Код Тип Описание
MIX-101001 Auth InvalidUsernameOrPassword - Неверный логин или пароль
MIX-101002 Auth AuthenticationFailed - Аутентификация не удалась
MIX-101002 Auth AuthenticationFailed - Вам не доступен данный функционал. Обратитесь в поддержку
II. Общие ошибки (Common)
Код Тип Описание
MIX-100000 BadRequest BadXmlRequest - Некорректный XML запрос
MIX-100001 BadRequest EnvelopeValidation - Структура запроса не соответствует XSD
MIX-100003 BadRequest DictionaryItemNotFound - Элемент словаря отсутствует в кодификаторах
MIX-100004 BadRequest OfferNotFound - Предложения не найдены или срок действия истек
MIX-100007 BadRequest OperationNotAllowed - Метод запрещен
MIX-100008 Internal OperationCancelledByUser - Запрос отменен пользователем
MIX-110000 BadRequest RequestNotSupportedByProvider - Запрос не поддерживается провайдером
MIX-110000 BadRequest RequestNotSupportedByProvider - Указанная валюта не поддерживается
MIX-110001 BadRequest CurrencyNotAllowed - Валюта не установлена для Подразделения
MIX-110001 BadRequest CurrencyNotAllowed - Никакая валюта не установлена для Подразделения
MIX-113001 BadRequest Concurrency - Над ресурсом происходит параллельное выполнение операции
MIX-200002 Internal InternalServiceError - Внутренняя ошибка сервиса
MIX-200003 BadRequest OperationNotImplementedByProviderException - Операция не поддерживается
MIX-201999 Internal ServiceTemporarilyUnavailable - Сервис временно недоступен
MIX-103045 BadRequest Заказ занят другим пользователем. Повторите операцию позже
III. Запрос коммерческого предложения (airshopping)
Код Тип Описание
MIX-100006 BadRequest UnsupportedRequest - FlightRequest может содержать максимум 2 OriginDestCriteria
MIX-100006 BadRequest UnsupportedRequest - Поиск с использованием Mixvel_LocationID не поддерживается
MIX-100006 BadRequest UnsupportedRequest - Множественное указание промокодов не поддерживается
MIX-100006 BadRequest UnsupportedRequest - Суммарное значение диапазонов дат не должно превышать лимит
MIX-100006 BadRequest UnsupportedRequest - Количество младенцев превышает максимальное на одного взрослого
MIX-100006 BadRequest UnsupportedRequest - Обязательно заполнение OwnerCode для каждой программы
MIX-100006 BadRequest UnsupportedRequest - Для одного OwnerCode указано несколько ProgramCriteria
MIX-100006 BadRequest UnsupportedRequest - Для поиска по бренду нужен фильтр по АК для каждого сегмента
MIX-100006 BadRequest UnsupportedRequest - OriginDestRefID не привязан к OriginDestCriteria
MIX-100006 BadRequest UnsupportedRequest - В запросе не указано ни одного пассажира
MIX-100006 BadRequest UnsupportedRequest - Не указана категория пассажира
MIX-100006 BadRequest UnsupportedRequest - Недопустим одновременный ввод MaximumConnectionQty='0' и StationCriteria
MIX-103001 BadRequest ViolateDepartureDate - Диапазон даты вылета в прошлом
MIX-103001 BadRequest ViolateDepartureDate - Диапазон даты вылета указан некорректно
MIX-103002 Warning DateTimeNotAvailable - Дата недоступна
MIX-103003 Warning TooManySegments - Сложный маршрут. Сократите количество направлений
IV. Список услуг (ServiceList)
Код Тип Описание
MIX-100006 BadRequest UnsupportedRequest - OfferRequest может содержать только один Offer
V. Уточнить цену (offerprice)
Код Тип Описание
MIX-109003 BadRequest PassengerNotFound - Пассажиры с указанными идентификаторами не найдены
MIX-203001 BadRequest OfferIdIsNotActual - Запрашиваемые рейсы для OfferId неактуальны
VI. Создание заказа (create)
Код Тип Описание
MIX-104011 BadRequest OffersAlreadyReservedError - Указанные предложения уже забронированы
MIX-104012 BadRequest InconsistentRequestError - У предложения в запросе отсутствует родитель
MIX-104012 BadRequest InconsistentRequestError - OfferItemId не является частью предложения
MIX-104012 BadRequest InconsistentRequestError - OfferItemId отсутствует в запросе
MIX-104012 BadRequest InconsistentRequestError - PaxSegmentRefID не найден в бронируемом предложении
MIX-104012 BadRequest InconsistentRequestError - В запросе не указан ни один номер телефона
MIX-104012 BadRequest InconsistentRequestError - В запросе не указано ни одного контакта пассажира
MIX-104012 BadRequest InconsistentRequestError - В ремарке требуется/не требуется привязка к пассажиру
MIX-104012 BadRequest InconsistentRequestError - В ремарке требуется/не требуется привязка к сегменту
MIX-104012 BadRequest InconsistentRequestError - В ремарке требуется/запрещен пользовательский текст
MIX-104012 BadRequest InconsistentRequestError - Для программы лояльности обязательно указание PaxSegmentRefID
MIX-104012 BadRequest InconsistentRequestError - Бронирование с одной картой лояльности на несколько предложений не поддерживается
MIX-104012 BadRequest InconsistentRequestError - В предложениях используются разные формы оплаты
VII. Одобрить заказ (change)
Код Тип Описание
MIX-100001 BadRequest EnvelopeValidation - Допустимо указывать одно из: AcceptOffer или DeleteOrderItemList
MIX-100001 BadRequest EnvelopeValidation - Операция возврата возможна только для оплаченных заказов
MIX-104012 BadRequest InconsistentRequestError - Предложение принадлежит другому родителю
MIX-104012 BadRequest InconsistentRequestError - Заказы не найдены в запрошенной мультикорзине
MIX-104012 BadRequest InconsistentRequestError - Заказ на статусе 'Оформлен'. Изменение данных пассажиров невозможно
MIX-104012 BadRequest InconsistentRequestError - Категория пассажира недоступна для добавления в бронирование
MIX-104012 BadRequest InconsistentRequestError - Ошибка при удалении данных пассажира. Операция недопустима
MIX-104012 BadRequest InconsistentRequestError - PaxID нет в указанном заказе
MIX-104012 BadRequest InconsistentRequestError - PaxID задвоен
MIX-104012 BadRequest InconsistentRequestError - ID контакта пассажира уже указан в заказе
MIX-104012 BadRequest InconsistentRequestError - PaxRefID не найден в заказе
MIX-104012 BadRequest InconsistentRequestError - PaxSegmentRefID не найден в заказе
MIX-104012 BadRequest InconsistentRequestError - Ремарка не найдена в заказе
MIX-104012 BadRequest InconsistentRequestError - Лояльность не найдена в заказе. Выполните OrderRetrieve
MIX-104012 BadRequest InconsistentRequestError - Указанный для изменения документ не найден
MIX-104012 BadRequest InconsistentRequestError - Итоговая стоимость расчета на возврат изменилась. Повторите расчет
MIX-104012 BadRequest InconsistentRequestError - Заказ не связан с пассажиром
MIX-104012 BadRequest InconsistentRequestError - Ручной возврат возможен только для всех пассажиров заказа
MIX-104012 BadRequest InconsistentRequestError - PaxID, PaxSegmentID задвоен
MIX-104012 BadRequest InconsistentRequestError - Для ручного обмена/возврата передавайте сегменты из OrderReshopRQ
MIX-104012 BadRequest InconsistentRequestError - Оценка ручного обмена/возврата произведена на все сегменты заказа
MIX-104012 BadRequest InconsistentRequestError - Запрещено использовать негативные величины в ручном возврате
MIX-104012 BadRequest InconsistentRequestError - Запрещено использовать TaxOperationType.Move в ручном возврате
MIX-104012 BadRequest InconsistentRequestError - Ручной возврат возможен только для расчёта в ручном режиме
MIX-104012 BadRequest InconsistentRequestError - Автоматический возврат возможен только для расчёта в автоматическом режиме
MIX-104012 BadRequest InconsistentRequestError - OrderItem не ассоциирован с EMD
MIX-104012 BadRequest InconsistentRequestError - Для операции ручного возврата EMD передавайте OrderItem из OrderReshopRQ
MIX-104012 BadRequest InconsistentRequestError - Операция недопустима для OrderItemID
MIX-100209 BadRequest InvalidSirenaUpgrade - Цена за повышение класса изменилась
VIII. Отмена заказа (cancel)
Код Тип Описание
MIX-104012 BadRequest InconsistentRequestError/NoOrdersToCancel - Купон EMD для OrderItem отсутствует
MIX-106001 BadRequest NoOrdersToCancel - Мультикорзина не содержит заказов для отмены
MIX-106001 BadRequest NoOrdersToCancel - Заказ не содержит EMD купонов для отмены
MIX-106002 BadRequest OrderStatusMismatchError - Заказ был изменен, воспользуйтесь OrderRetrieve
IX. Перерасчет заказа (Reshop)
Код Тип Описание
MIX-104012 BadRequest InconsistentRequestError - Не указана форма оплаты
MIX-104012 BadRequest InconsistentRequestError - Документ с типом не найден у пассажира
MIX-104012 BadRequest InconsistentRequestError - PaxSegmentID задвоен
MIX-104012 BadRequest InconsistentRequestError - Заказ не имеет оплаченных билетов для обмена
MIX-104012 BadRequest InconsistentRequestError - Заказ должен быть оплачен для оценки возврата
MIX-104012 BadRequest InconsistentRequestError - Указание формы оплаты при возврате запрещено
MIX-109001 BadRequest PartialRefundNotSupported - Оценка возврата возможна только для полностью оплаченной Мультикорзины
MIX-109002 BadRequest OrderIsNotRefundable - Возврат заказа не разрешен
MIX-109003 BadRequest PassengerNotFound - Пассажир не найден
MIX-109003 BadRequest PassengerNotFound - Расчёт на обмен разрешён только для одного пассажира
MIX-109004 BadRequest OrderIsAlreadyRefunded - Заказ уже был возвращен
MIX-109005 BadRequest MixOrderHasNoOrderToRefund - В Мультикорзине отсутствуют заказы для возврата
MIX-100111 BadRequest OrderUnPayed - Заказ не оплачен. Услуга повышения класса недоступна
MIX-100211 BadRequest InvalidUpgradeTime - Услуга повышения класса доступна не ранее 24 часов до вылета
MIX-100212 BadRequest InvalidPricingForUpgrade - Цена за повышение класса изменилась
MIX-100213 BadRequest NoSvcForUpgrade - Услуга повышения класса не предоставляется
MIX-100214 BadRequest NotEnoughSeats - Повышение класса невозможно для всех пассажиров в заказе
MIX-100215 BadRequest OfferHasExpired - Истекло время действия предложения
MIX-100216 BadRequest CommonErrorUpgrade - Не удалось провести процедуру Upgrade
MIX-100217 BadRequest InconsistentRequestError - OfferId не принадлежит Upgrade
MIX-100218 BadRequest InvalidUpgradeByMiles - Повышение класса за мили недоступно
MIX-100219 BadRequest NotEnoughQuotas - Нет квоты на перевозку животного в более высоком классе
MIX-100220 BadRequest ConflictingServicesError - Несовместимая услуга «ЖИВОТНОЕ НА СОСЕД КРЕСЛЕ»
MIX-100221 BadRequest ConflictingServicesError - Несовместимая услуга «ДОПОЛНИТЕЛЬНОЕ МЕСТО»
MIX-100222 BadRequest ConflictingServicesError - Несовместимая услуга «БАГАЖ В САЛОНЕ»
MIX-100223 BadRequest ConflictingServicesError - Несовместимая услуга «Несопровождаемый ребенок»
XIII. Общие ошибки заказов (Common for orders)
Код Тип Описание
MIX-100005 BadRequest OrderNotFound - Заказ не найден или срок действия истек
MIX-100005 BadRequest OrderNotFound - Заказы не найдены или срок действия истек
MIX-111001 BadRequest MixOrderNotFound - Мультикорзина не найдена
MIX-111003 BadRequest OrderNotFoundByTicket - Заказ по номеру билета не найден
MIX-111004 BadRequest OrdersNotInMixOrder - Указанные заказы не содержатся в Мультикорзине
MIX-111009 BadRequest OrderIsNotAvailable - Заказ перенесен в архив. Нет доступа
MIX-111011 BadRequest OrderIsBrokenForView - Невозможно отобразить текущее состояние заказа
Предупреждения (Warnings)
Код Тип Описание
MIX-103007 Warning ItineraryReceiptCantGetSegmentsStatus - Билеты оформлены, но не удалось получить данные Маршрут-квитанций/EMD
MIX-103022 Warning PricedOfferMayContainChangedBrands - Возможно изменение брендов в PricedOffer
MIX-103023 Warning PartialPaymentNotification - Выполнена частичная оплата мультикорзины
MIX-103027 Warning PaxDataNotMatch - Данные пассажира в заказе не соответствуют данным в билете
MIX-103028 Warning SegmentsDataNotMatch - Данные маршрута в заказе не соответствуют купонам в билете
MIX-103033 Warning CouponLuggageNotEqualsSegmentLuggage - Данные багажа купона не совпадают с сегментом
MIX-103034 Warning ProviderPaxDataOutdated - Устаревшая информация по пассажиру. Обратитесь к поставщику
MIX-103200 Warning ExchangeRequestThresholdExceeded - Слишком много вариантов обмена. Конкретизируйте запрос
MIX-103202 Warning ExchangePricingWithoutResponse - Не удалось оценить некоторые варианты обмена
MIX-103204 Warning FareRequestThresholdExceeded - Слишком много вариантов тарифов. Конкретизируйте запрос
MIX-11205 Warning FromProviderError - Заказы не были созданы по следующим предложениям
MIX-11206 Warning FromInternalError - Операция с мультикорзиной выполнена частично

⚠️ Важные примечания к специфическим ошибкам

❌ Ошибка "НЕТ ВОЗМОЖНОСТИ ПОЛУЧИТЬ МЕСТА"
Говорит о наличии ограничений бронирования со стороны хоста. Данные ограничения устанавливает авиакомпания (АК).
❌ Ошибка «ПРОДАЖА ЗАПРЕЩЕНА»
Говорит о том, что либо рейс закрыт, либо нет мест. Ответ также приходит от авиакомпании (АК).
❌ Ошибка "400 ДУБЛИРОВАНИЕ НОМЕРА БИЛЕТА/ДОКУМЕНТА"
Говорит о том, что возникла ошибка дублирования номера билета/документа на стороне ТКП/перевозчика. Рекомендация: повторите запрос оплаты/выпуска билета.