API поиска билетов позволяет создавать страницы поиска авиабилетов, выводить результаты поиска, а также строить сложные маршруты.
Обратите внимание, что по умолчанию установлено ограничение: 100 запросов в час с одного пользовательского IP-адреса. Если требуется обрабатывать больше запросов, напишите на support@travelpayouts.com.
Сервис поиска авиабилетов не включает API бронирования авиабилетов. Покупка билетов осуществляется на сайтах агентств и авиакомпаний.
Как получить доступ
- Подробные условия получения доступа к API поиска авиабилетов смотрите здесь.
Обратите внимание, доступ предоставляется только при условии наличия ежемесячного трафика ресурса не меньше 50 000 пользователей. Если у вас нет такого трафика, рекомендуем использовать API данных от Авиасейлс. - При использовании API Поиска необходимо следовать правилам.
Общая схема работы API поиска авиабилетов
- Сформируйте запрос с указанием направления перелёта и количеством и типом пассажиров.
- Запрос отправляется и в ответе приходит уникальный ID поиска (search_id).
- С использованием полученного search_id отправляется запрос результатов поиска, чтобы получить детали рейсов и цены на авиабилеты.
- Из полученных данных можно сформировать страницу с результатами поиска и карточками билетов.
- При клике на кнопку Купить на экране билета создаётся ссылка на покупку авиабилетов на сайте агентства/авиакомпании.
Аутентификация и заголовки
Каждый запрос должен содержать в Header:
- x-real-host — укажите адрес вашего веб-сайта или id мобильного приложения, в котором будет использоваться API;
- x-user-ip — IP-адрес пользователя;
- x-signature — подпись, состоит из ключа, маркера и всех значений параметров запроса, отсортированных в алфавитном порядке и разделенных двоеточием. Узнайте, как создать подпись, здесь.
- x-affiliate-user-id — ваш API ключ;
- Content-Type — по умолчанию application/json.
Старт поиска
Параметры запроса
- signature — подпись, состоит из ключа, маркера и всех значений параметров запроса, отсортированных в алфавитном порядке и разделенных двоеточием. Для старта поиска, signature нужно указать и в заголовке и в теле запроса. Узнайте, как создать подпись, здесь.
- marker (string) — маркер партнёра;
- locale (string) — язык результата поиска (en-us, en-gb, ru, de, es, fr, pl и т.д.);
- currency_code (string) — валюта, в которой цена билета возвращается в ответе, также в этой валюте клиенты будут видеть цену на сайте агентства (при условии, что агентство поддерживает эту валюту);
-
market_code — рынок источника данных (чаще всего это язык сайта Aviasales, на котором пользователи искали билеты). Список доступных маркетов можно посмотреть здесь.
Каждый поиск связан с конкретным рынком. Это означает, что если пользователь ищет что-то на сайте aviasales.ru, то результаты будут содержать только данные для рынка RU, а данных для рынка США (с которым, например, связан сайт aviasales.com) не будет. По умолчанию рынок определяется по месту отправления (параметр origin в API-запросе). Если определить рынок не удалось, то будут возвращены данные для рынка ru). -
search_params (object)
- trip_class (string) — класс полёта (Y — эконом, C — бизнес, F — первый, W — комфорт. Требуется использование заглавных букв)
-
passengers — информация о пассажирах
- adults (integer) — количество взрослых пассажиров (от 1 до 9)
- children (integer) — количество детей (от 0 до 6)
- infants (integer) — количество младенцев в возрасте до 2ух лет (от 0 до 6)
- directions
Параметры ответа
Ответ содержит два ключевых параметра, которые нужно использовать для получения результатов поиска.
- search_id – идентификатор поискового запроса, передается в Результаты поиска (см.ниже)
- results_url – URL для получения результатов поиска, передается в Результаты поиска (см.ниже)
Получение результатов
Метод: POST
Чтобы сформировать URL для запроса результатов поиска, необходимо взять домен из поля results_url в ответе на запрос из предыдущего шага и добавить к нему search/affiliate/results.
Финальный URL будет выглядеть так: <results_url>/search/affiliate/results
Чтобы получить все данные, повторяйте запрос до тех пор, пока не придёт поле is_over = true. Частота отправки запросов не ограничена. Ссылка на результаты поиска действительна 15 минут. По истечении этого времени необходимо отправить новый поисковый запрос.
Параметры запроса
Тело запроса
- search_id – идентификатор поискового запроса, генерируется в ответе Поискового запроса
- last_update_timestamp – время последнего обновления результатов поиска (в ответе приходит параметр , который сохраняется для использования в последующих запросах и отсчета времени для обновления результатов поиска). Для первого запроса last_update_timestamp = 0, а для последующих запросов отправляется значение из ответа.
Параметры ответа
Ответ возвращается в формате JSON и содержит следующие блоки:
-
agents — объект с информацией об агентствах.
- id — ID агентства.
- gate_name — название шлюза.
- label — локализованное название.
- payment_methods — список доступных методов оплаты.
- airline_iatas — список IATA-кодов авиакомпаний.
-
airlines — объект с информацией об авиакомпаниях.
- iata — IATA-код авиакомпании.
- name — название авиакомпании.
- is_lowcost — является ли лоукостером.
-
boundaries — диапазоны значений для фильтров. Эти данные можно использовать для построения фильтров в интерфейсе:
- baggage — наличие/отсутствие багажа (полный, только ручная кладь, без багажа).
- agents, airlines, airports, alliances — фильтры по агентствам, авиалиниям и т.д.
- transfers_count — количество пересадок.
- transfers_duration — длительность пересадок.
- transfers_airports — аэропорты пересадок.
- transfers_countries — страны пересадок.
- departure_arrival_time — диапазоны времени вылета и прилёта, длительность маршрута.
- equipments — типы самолётов.
- has_convenient_transfers — удобные пересадки.
- has_covid_restrictions — COVID-ограничения.
- has_interlines — интерлайн (стыковки разных перевозчиков).
- has_long_layover_transfers — длинные пересадки.
- has_lowcosts — билеты лоукостеров.
- has_night_transfers — ночные пересадки.
- has_short_layover_transfers — короткие пересадки.
- has_transfers_with_airport_change — пересадки со сменой аэропорта.
- has_transfers_with_baggage_recheck — пересадки с повторной регистрацией багажа.
- has_transfers_with_virtual_interline — виртуальные интерлайн-пересадки.
- has_transfers_with_visa — пересадки с визовыми требованиями.
- payment_methods — методы оплаты.
- change_ticket — условия изменения билета.
- return_ticket — условия возврата билета.
- same_departure_arrival_airport — совпадение аэропортов вылета и прилёта.
-
flight_legs — массив перелётов (legs). Каждый leg описывает один рейс.
- origin — аэропорт вылета (IATA).
- destination — аэропорт прилёта (IATA).
- departure_unix_timestamp, arrival_unix_timestamp — время в формате Unix.
- local_departure_date_time, local_arrival_date_time — локальное время.
- operating_carrier_designator — код и номер рейса перевозчика.
- equipment — код и название самолёта, тип судна.
- signature — подпись перелёта.
- technical_stops — список технических посадок.
-
tickets — массив билетов.
- id — id билета (подпись).
- segments — массив информации о сегменте поездки (перелёты, пересадки).
- flights — индексы перелётов из flight_legs.
-
transfers — информация о пересадках в билете:
- night_transfer — ночная пересадка.
- recheck_baggage — повторная регистрация багажа.
- airport_change — смена аэропорта.
- short_layover — короткая пересадка.
- visa_rules — визовые требования.
- tags — дополнительные теги.
-
proposals — массив предложений от агентств для данного маршрута.
- id — ID предложения,
- agent_id — агент, который его предлагает,
- price — цена (валюта и сумма).
- price_per_person — цена на одного пассажира.
-
flight_terms — условия тарифа
-
trip_class – тип класса
- Y – Economy
- C – Business
- F – First
- W – Comfort
- seats_available – количество оставшихся билетов по этой цене (отображается только, если 1 ≤ seats_available ≤ 9)
- airline_id – IATA код авиакомпании + название авиакомпании
- carrier – IATA код авиакомпании
- number – номер перелета
-
baggage – информация о багаже
- count – количество багажа
- height – максимальная высота багажа
- length – максимальный размер багажа
- total_weight – суммарный вес всего багажа
- weight – максимальный вес одного чемодана
- width – максимальная ширина багажа
- handbags – информация о ручной клади
- count – количество ручной клади
- height – максимальная высота ручной клади
- length – максимальный размер ручной клади
- total_weight – суммарный вес всей ручной клади
- weight – максимальный вес одной ручной клади
- width – максимальная ширина ручной клади
- additional_tariff_info – доп. информация о тарифе
- return_before_flight – возможность возврата билета после перелета
- return_after_flight – возможность возврата билета до перелета
- change_before_flight – возможность изменений в билете после перелета
- change_after_flight – возможность изменений в билете до перелета
- is_charter – является ли чартерным рейсом (флаг)
- merged_terms_info – объединенная информация о тарифе
- seat_at_registration – возможность выбора места при регистрации на рейс
- seat_at_purchase – возможность выбора места при покупке билета
- return_before_flight – возможность возврата билета после перелета
- return_after_flight – возможность возврата билета до перелета
- change_before_flight – возможность изменений в билете после перелета
- change_after_flight – возможность изменений в билете до перелета
-
trip_class – тип класса
- value — цена
-
minimum_fare — минимальные условия тарифа и доплаты
-
baggage – от какого кол-ва и какого размера багажа нужно будет заплатить
- count – количество багажа
- height – максимальная высота багажа
- weight – максимальный вес одного чемодана
- width – максимальная ширина багажа
-
handbags – от какого кол-ва и какого размера ручной клади нужно будет заплатить
- count – количество ручной клади
- height – максимальная высота ручной клади
- weight – максимальный вес одного ручной клади
- width – максимальная ширина ручной клади
- return_before_flight – возможность возврата билета после перелета
- return_after_flight – возможность возврата билета до перелета
- change_before_flight – возможность изменений в билете после перелета
- change_after_flight– возможность изменений в билете до перелета
-
baggage – от какого кол-ва и какого размера багажа нужно будет заплатить
- transfer_terms — условия пересадок.
- signature — уникальная подпись билета.
-
search_params — исходные параметры поиска
- passengers — количество пассажиров (adults, children, infants).
- trip_class — класс поездки.
- source_kind — источник поиска..
- last_update_timestamp — отметка времени последнего обновления данных.
- is_over — признак завершения поиска (true/false).
Коды ответов
- 200 — успешный ответ с новыми данными.
- 304 — новых результатов нет.
- 400 — ошибка в параметрах.
- 404 — запрос на неправильный домен.
- 429 — превышен лимит.
- 5xx — внутренняя ошибка сервера.
Составление сложного маршрута
Тип маршрута задаётся параметром directions. Это массив сегментов поездки; сколько сегментов передадите, такой маршрут и получится:
- One way — 1 сегмент
- Round trip — 2 сегмента (туда и обратно)
- Сложный (multi-city) — 3 и более сегментов в нужном порядке
Каждый сегмент описывает перелёт «из точки A в точку B в дату D».
Формат сегмента
{
"origin": "IATA-код или город",
"destination": "IATA-код или город",
"date": "YYYY-MM-DD"
}Примеры
One way
"directions": [
{ "origin": "LED", "destination": "HKT", "date": "2026-02-10" }
]Round trip
"directions": [
{ "origin": "LED", "destination": "HKT", "date": "2026-02-10" },
{ "origin": "HKT", "destination": "LED", "date": "2026-02-20" }
]Сложный маршрут (multi-city)
"directions": [
{ "origin": "LED", "destination": "DXB", "date": "2026-02-10" },
{ "origin": "DXB", "destination": "SIN", "date": "2026-02-14" },
{ "origin": "SIN", "destination": "LED", "date": "2026-02-21" }
]Лоукостеры в результатах поиска
В результатах поиска содержится ряд авиакомпаний и агентств, не умеющих работать с партнерским маркером. При продаже билетов через эти компании вознаграждение партнеру начислено не будет.
Вы можете по своему усмотрению оставлять билеты от данных компаний в результатах поиска или фильтровать их перед тем, как отобразить вашим пользователям. Однако имейте ввиду — это компании лоукостеры, т. е. у них, как правило, самые низкие цены на билеты. И если их убрать, поисковая выдача станет гораздо менее интересной для пользователей.
Список компаний, не поддерживающих работу с партнерским маркером:
- представлены на сайте aviasales.ru (локаль ru в API)
- представлены на сайте jetradar.com (локаль en)
Особенности формирования ссылок на некоторые гейты
Ряд гейтов не отдают прямые ссылки, а передают данные в массиве params. Такие агентства содержат в массиве параметр method со значением «POST» (у обычных гейтов этот параметр равен «GET»). Пример такого ответа:
{
"params": {
"FlightNumber1": "7793",
"PointOfSaleCountry": "US",
"Origin2": "BLQ",
"UserLanguage": "en",
"Adult": "1",
"Destination2": "MLA",
"DisplayedPriceCurrency": "EUR",
"DepartureDate2": "2016-08-18",
"Origin1": "MLA",
"FlightNumber2": "7794",
"ReferralId": "GoogleFlightSearch",
"Destination1": "BLQ",
"TripType": "RoundTrip",
"UserCurrency": "RUB",
"DisplayedPrice": "153.98",
"BookingCode1": "Y",
"Carrier1": "FR",
"Cabin1": "Economy",
"DepartureDate1": "2016-07-25",
"BookingCode2": "Y",
"Cabin2": "Economy",
"Carrier2": "FR"
},
"click_id": 56773565449083,
"gate_id": "50",
"method": "POST",
"url": "https://www.bookryanair.com/SkySales/booking.aspx?utm_source=aviasales_ru"
}Чтобы перенаправить пользователя на сайт подобного агентства и отследить переход, необходимо сделать страницу-редирект.
Для отслеживания партнерского маркера, страница должна содержать такой код:
<img width="0" height="0" id="pixel" src="//yasen.aviasales.ru/adaptors/pixel_click.png?click_id=CLICK_ID&gate_id=GATE_ID">где click_id — это значение параметра из массива с ответом (в примере выше этот параметр равен 56773565449083), gate_id — идентификатор гейта (в примере выше равен 50).
Чтобы изображение наверняка загрузилось, на странице добавляется пауза, во время которой пользователю отображается сообщение, что идет перенаправление на сайт агентства.
На странице добавляется также проверка параметра method и в зависимости от результата выполняется один из сценариев:
- если метод GET — выполняется редирект по прямой ссылке из параметра url;
- если метод POST — формируется форма с параметрами из массива params и пользователь перенаправляется с этой страницы по ссылке из поля url в ответе выше.
Вариант страницы-редиректа, можно посмотреть здесь.
Обратите внимание! Так как логика работы агентств и авиакомпаний может меняться мы рекомендуем использовать пиксель вне зависимости от значения параметра method из ответа.
$('body').append(`<img src="//yasen.aviasales.ru/adaptors/pixel_click.png?click_id=${response.str_click_id}&gate_id=${response.gate_id}" width="0" height="0" id="pixel">`);Логотипы авиакомпаний и агентств
Логотипы авиакомпаний доступны по адресу: http://img.wway.io/pics/root/iata@png?exar=1&rs=fit:width:height
где,
- width — ширина логотипа
- height — высота логотипа
-
iata — IATA—код авиакомпании.
Размер может быть любым.
Пример: http://img.wway.io/pics/root/UN@png?exar=1&rs=fit:200:200
Логотипы агентств доступны по адресу: http://img.wway.io/pics/as_gates/id@png?exar=1&rs=fit:width:height
где,
- width — ширина логотипа
- height — высота логотипа
-
id — ID агентства из ответа поискового API (смотри поле terms — информация о стоимости перелета (цифра — id гейта)).
Размер может быть любым.
Пример: http://img.wway.io/pics/as_gates/70@png?exar=1&rs=fit:110:70
Чтобы получить логотип для дисплеев Retina, умножьте высоту и ширину в ссылке на два, например: http://img.wway.io/pics/as_gates/70@png?exar=1&rs=fit:220:140
Подробнее о партнёрских ссылках и виджетах вы можете узнать в статьях «Как создавать и использовать партнёрские ссылки» и «Всё про виджеты».
Получение ссылки для перехода на сайт агентства
Чтобы получить ссылку на сайт агентства для бронирования билетов, необходимо:
1. Отправить запрос на адрес:
https://[results_url]/searches/[search_id]/clicks/[proposal_id], где
- results_url – ссылка на результаты поиска из ответа на Старт поиска
- search_id – идентификатор поискового из ответа на Старт поиска
- proposal_id – идентификатор предложения, берется из результатов поиска из поля tickets[].proposals[].id
2. В заголовке запроса указать ваш маркер.
Пример ответа
{
"gate_id": 70,
"agent_id": 70,
"click_id": 2603625159552466848,
"str_click_id": "2603625159552466848",
"url": "https://www.kupibilet.ru/booking/step0/Y20020DECLEDIST/a66dbb4a9c944b8883b1046674a7162710?agent=ghe056&country=RU&from_iss=true&marker=js4c3a3o0uqo&tag=aaa0000",
"method": "GET",
"params": {
"gate_id": 70,
"agent_id": 70,
"click_id": 2603625159552466848
},
"expire_at_unix_sec": 1689958526
}Параметры ответа
- gate_id – id гейта
- agent_id – id агентства
- click_id – идентификатор перехода
- str_click_id – идентификатор перехода 2
- url – ссылка для перехода
- method – метод запроса на переход по ссылке
- params – параметры билета
-
expire_at_unix_sec – “время жизни” ссылки в unix формате
“Время жизни” ссылки для перехода на покупку ограничено. По истечению этого времени необходимо будет перезапрашивать результаты поиска и заново генерировать ссылку (url).
Возможные ошибки
- Code 400 (Invalid arguments)
- Code 403 (Access denied)
- Code 404 (Search or proposal not found)
- Code 429 (Too many requests)
- Code 5XX (Unexpected error)