Технологии
Партнёрский поисковый контракт целиком. Эндпоинты, форма запроса и ответа, семантика ошибок, устройство идентичности цены и что происходит с истёкшей котировкой. Если что-то здесь не ложится в вашу интеграцию, мы это меняем — примеры доработок на странице дистрибуции.
Эндпоинты
Поиск
Живой поиск. Синхронный JSON-массив бронируемых вариантов: ни поллинга, ни предварительного открытия сессии. Холодный маршрут отвечает до 15 секунд, повторный запрос по тому же направлению — за десятки миллисекунд.
Маршруты
Справочник маршрутов: пары IATA-кодов в обеих ориентациях, считается на лету по текущему инвентарю, а не отдаётся статикой. Без авторизации — забрать можно до того, как мы выдадим ключ.
Статистика
Сверка заказов: статусы, суммы, ваши marker и market в ответе. XML по умолчанию, JSON через заголовок Accept.
Поисковый запрос
Параметры query-string для GET /api/search/external:
| Параметр | Значение |
|---|---|
| password | Ваш партнёрский API-ключ |
| from / to | IATA-код города или аэропорта |
| date1 | Дата вылета, YYYY-MM-DD |
| date2 | Дата возврата для туда-обратно, опционально |
| cabin | Y (эконом) или C (бизнес) |
| adults | 1-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.