Aviasales API на Python: цены на авиабилеты через Travelpayouts
Data API Travelpayouts отдаёт кэшированные цены из поисков Aviasales, а не живой поиск. Для цен по датам и направлению хватает одного GET-запроса с токеном в заголовке. Главные риски: данные могут устареть или отсутствовать для редких маршрутов, поэтому цену нужно показывать как «от» и перепроверять по ссылке.
Если вы делаете сайт, бота или Mini App с билетами, самый простой источник цен — Data API Travelpayouts (Aviasales). Ниже пример на Python, типичные запросы и ограничения, на которые мы наткнулись при работе над HotTrip.
Что такое Data API и чем он отличается от живого поиска
Data API отдаёт кэшированные цены, собранные из поисков пользователей Aviasales. Это быстро и бесплатно, но не то же самое, что поиск в реальном времени:
- цена может быть устаревшей: по описаниям сторонних обёрток данные берутся из поисков примерно за последние двое суток;
- для редких маршрутов и дат данных может не быть;
- конечная цена на странице покупки может отличаться.
Для живого поиска у Travelpayouts есть отдельный API с другими условиями доступа, их смотрите в документации. Для витрины «от X ₽» и подборок направлений Data API обычно достаточно.
Что нужно
- Аккаунт в Travelpayouts и токен (выдаётся в кабинете).
- Ваш партнёрский marker для ссылок, если хотите получать комиссию.
- Python и библиотека
requests.
Токен передавайте в заголовке x-access-token и храните в переменной окружения, а не в коде.
Цены по направлению и датам
Основной метод: GET https://api.travelpayouts.com/aviasales/v3/prices_for_dates.
import os
import requests
API = "https://api.travelpayouts.com/aviasales/v3/prices_for_dates"
TOKEN = os.environ["TRAVELPAYOUTS_TOKEN"]
def cheapest(origin: str, destination: str, month: str, limit: int = 10) -> list[dict]:
"""Самые дешёвые предложения. origin/destination: IATA-коды, month: '2026-12'."""
r = requests.get(
API,
headers={"x-access-token": TOKEN},
params={
"origin": origin,
"destination": destination,
"departure_at": month,
"sorting": "price",
"unique": "false",
"currency": "rub",
"limit": limit,
},
timeout=10,
)
r.raise_for_status()
return r.json().get("data", [])
for offer in cheapest("MOW", "IST", "2026-12"):
print(offer["departure_at"][:10], offer["price"], offer.get("airline"), offer.get("transfers"))
В ответе приходит список предложений. В каждом обычно есть цена, авиакомпания, дата вылета, число пересадок и поле link с относительным адресом страницы поиска на Aviasales. Точные поля и актуальные параметры сверяйте с документацией Travelpayouts: они могут меняться.
Популярные направления из города
Для блока «Куда полететь» удобен метод GET /v1/city-directions?origin=MOW¤cy=rub. Он возвращает список направлений из города одним запросом, что быстрее, чем перебирать маршруты вручную.
Коды городов и аэропортов
Используйте IATA-коды. MOW означает Москву целиком (все аэропорты), SVO — конкретный аэропорт. Для подсказок при вводе есть автодополнение https://autocomplete.travelpayouts.com/places2?term=...&locale=ru, которое возвращает города и аэропорты.
Ссылки и партнёрский marker
Поле link содержит путь, который нужно собрать в полный адрес https://www.aviasales.ru + link и добавить партнёрский marker. Тогда переходы по ссылке будут учтены в вашем кабинете. Для коротких ссылок в Telegram в API есть метод создания сокращённых партнёрских ссылок.
Подводные камни из практики
- Кэширование на вашей стороне. Сохраняйте ответы в базу данных и обновляйте по расписанию (так устроены наши проекты), а не при каждом запросе пользователя: это быстрее и экономит лимиты.
- Пустые ответы. Для части маршрутов данных нет. Показывайте понятное сообщение и соседние даты или направления.
- Свежесть. Храните время получения цены и показывайте её как «от». Предупреждайте, что итоговая цена на странице покупки может отличаться.
- Тайм-ауты и ошибки. Ставьте тайм-аут и повторяйте запрос при сбое. Не блокируйте пользователя ожиданием внешнего API.
- Валюта и язык. Параметр
currencyуправляет валютой цен, для разных стран храните цены по каждой валюте отдельно.
Где это применено
На основе Data API мы построили портал, Telegram-бота с поиском рейсов и подписками на цены, Mini App и автоматизированный канал, который каждые два часа публикует свежие предложения. Подробности в проекте HotTrip и в услугах «Интеграции и API» и «Парсинг и данные».
Частые вопросы
Нужен ли платный тариф для Data API?
Токен Travelpayouts выдаётся в кабинете партнёра. Условия доступа к разным API меняются, поэтому актуальные ограничения смотрите в документации Travelpayouts.
Цены из Data API — это живой поиск?
Нет. Это кэшированные данные из поисков пользователей, поэтому цена может отличаться от той, что вы увидите при покупке.
Как получать комиссию с продаж?
Добавляйте свой партнёрский marker к ссылкам на Aviasales. Тогда покупки по вашим ссылкам учитываются в кабинете Travelpayouts.
Можно ли вызывать API прямо из браузера?
Не рекомендуется: токен окажется доступен всем. Вызывайте API с сервера и отдавайте клиенту только нужные данные.
Версия для ИИ и чтения без оформления: Markdown.