Технологии

Партнёрский поисковый контракт целиком. Эндпоинты, форма запроса и ответа, семантика ошибок, устройство идентичности цены и что происходит с истёкшей котировкой. Если что-то здесь не ложится в вашу интеграцию, мы это меняем — примеры доработок на странице дистрибуции.

Эндпоинты

Поиск

Живой поиск. Синхронный JSON-массив бронируемых вариантов: ни поллинга, ни предварительного открытия сессии. Холодный маршрут отвечает до 15 секунд, повторный запрос по тому же направлению — за десятки миллисекунд.

Маршруты

Справочник маршрутов: пары IATA-кодов в обеих ориентациях, считается на лету по текущему инвентарю, а не отдаётся статикой. Без авторизации — забрать можно до того, как мы выдадим ключ.

Статистика

Сверка заказов: статусы, суммы, ваши marker и market в ответе. XML по умолчанию, JSON через заголовок Accept.

Поисковый запрос

Параметры query-string для GET /api/search/external:

ПараметрЗначение
passwordВаш партнёрский API-ключ
from / toIATA-код города или аэропорта
date1Дата вылета, YYYY-MM-DD
date2Дата возврата для туда-обратно, опционально
cabinY (эконом) или C (бизнес)
adults1-9, по умолчанию 1
childrenПринимаются и тарифицируются как взрослые, по умолчанию 0
infantsПо умолчанию 0, не больше числа взрослых
currencyОпционально: usd, eur или gel
localeОпциональная локаль диплинка: en, ru или ka
marketОпционально, сохраняется в заказе и возвращается в статистике

Ответ

Тело ответа — голый JSON-массив вариантов. Вложенность: вариант → segment[] → flight[], где сегмент — одно направление поездки, а flight — отдельное плечо внутри него.

[
  {
    "price": 812,
    "currency": "usd",
    "url": "https://gtavia.com/en/booking/5f0c2f6a-1b7e-5c2d-9a44-83f0e6c21d7b?currency=usd",
    "seats": 4,
    "segment": [
      {
        "flight": [
          {
            "operatingCarrier": "KC",
            "marketingCarrier": "KC",
            "number": "927",
            "departure": "ALA",
            "departureDate": "2026-10-12",
            "departureTime": "07:40",
            "arrival": "AYT",
            "arrivalDate": "2026-10-12",
            "arrivalTime": "10:55",
            "cabin": "Y",
            "isCharter": true,
            "isBus": false,
            "isTrain": false,
            "baggage": "1PC20",
            "handbags": "1PC5"
          }
        ]
      }
    ]
  }
]
  • price целое число, итог за всех пассажиров в целых единицах запрошенной валюты. Ни копеек, ни разбивки по пассажирам.
  • currency в нижнем регистре, одно из usd, eur, gel.
  • url готовый диплинк. UUID в нём и есть идентичность котировки; допишите в query свои marker и market, мы сохраним оба в заказе.
  • seats сколько мест ещё доступно по этому варианту, максимум 9. Каждый возвращённый вариант бронируем на запрошенное число пассажиров.
  • operatingCarrier / marketingCarrier коды IATA. На чартерных блоках обычно совпадают; если различаются, пассажир садится на борт операционного перевозчика.
  • departureDate / departureTime местное время аэропорта вылета, дата по ISO и время в 24-часовом формате отдельными строками.
  • cabin Y или C.
  • isCharter всегда true. Весь инвентарь в этом фиде — блоки туроператоров.
  • isBus / isTrain всегда false. Зарезервированные поля, можно игнорировать.
  • baggage / handbags нотация «место-вес». 1PC20 — одно место до 20 кг.
  • technicalStops остановка, на которой пассажиры остаются на борту. Остановка со сменой борта отдаётся иначе: двумя элементами в flight[].

Поведение

Ошибки

Проблемы валидации никогда не дают ошибочный статус. Нераспознанный город, некорректная дата или невозможный состав пассажиров возвращают HTTP 200 с пустым массивом — плохой запрос с вашей стороны не превратится в сбой на нашей. Единственный статус отказа — HTTP 401 на неизвестный ключ. Всё остальное трактуйте как пустой результат.

Идентичность цены

Идентификатор варианта производен от его финальной цены во всех валютах, состава пассажиров и вашего партнёрского аккаунта. Цена под идентификатором измениться не может, потому что он из неё и посчитан. Любое движение цены рождает новый идентификатор, а исходный вариант продолжает отдаваться и бронироваться по выданной цене.

Окно бронирования

60 минут с момента котировки. У переданного пассажиру варианта всегда остаётся не меньше 45 минут: из кеша мы не отдаём котировку старше 15 минут. До истечения котировка незаметно обновляется; если цена к этому моменту изменилась, пассажир видит обе суммы и подтверждает выбор, только после этого разблокируется оплата.

Диплинк

https://gtavia.com/{locale}/booking/{variantId}?currency={code}

Локали: en, ru, ka. variantId — та самая идентичность цены. Ваши marker и market проходят через весь флоу бронирования, сохраняются в заказе и возвращаются в /partners/statistics.

Другие каналы

Почасовой прайс-фид

Для фидовых потребителей раз в час выгружаем весь продаваемый инвентарь в CSV по SFTP: маршруты, номера рейсов, даты вылета, наличие мест, цены OW, RT и инфантов, варианты багажа и даты окончания продажи. Точный состав колонок и детали доставки — в техпакете. Сейчас работает с европейской дистрибуционной платформой.

Сверка

GET /partners/statistics возвращает ваши заказы со статусами, суммами, валютой и значениями marker и market, зафиксированными при бронировании. Используйте для периодических взаиморасчётов; помесячный отчёт сверки готовится и на нашей стороне.

Нужно что-то другое

Другая схема, другой транспорт, push вместо pull — это запрос, а не ограничение. Типовой срок кастомного контракта 1–4 недели. Пишите на it@gtavia.com.