Python

Aviasales API на Python: цены на авиабилеты через Travelpayouts

30 октября 2026 · 3 мин чтения

Кратко

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&currency=rub. Он возвращает список направлений из города одним запросом, что быстрее, чем перебирать маршруты вручную.

Коды городов и аэропортов

Используйте IATA-коды. MOW означает Москву целиком (все аэропорты), SVO — конкретный аэропорт. Для подсказок при вводе есть автодополнение https://autocomplete.travelpayouts.com/places2?term=...&locale=ru, которое возвращает города и аэропорты.

Ссылки и партнёрский marker

Поле link содержит путь, который нужно собрать в полный адрес https://www.aviasales.ru + link и добавить партнёрский marker. Тогда переходы по ссылке будут учтены в вашем кабинете. Для коротких ссылок в Telegram в API есть метод создания сокращённых партнёрских ссылок.

Подводные камни из практики

  1. Кэширование на вашей стороне. Сохраняйте ответы в базу данных и обновляйте по расписанию (так устроены наши проекты), а не при каждом запросе пользователя: это быстрее и экономит лимиты.
  2. Пустые ответы. Для части маршрутов данных нет. Показывайте понятное сообщение и соседние даты или направления.
  3. Свежесть. Храните время получения цены и показывайте её как «от». Предупреждайте, что итоговая цена на странице покупки может отличаться.
  4. Тайм-ауты и ошибки. Ставьте тайм-аут и повторяйте запрос при сбое. Не блокируйте пользователя ожиданием внешнего API.
  5. Валюта и язык. Параметр currency управляет валютой цен, для разных стран храните цены по каждой валюте отдельно.

Где это применено

На основе Data API мы построили портал, Telegram-бота с поиском рейсов и подписками на цены, Mini App и автоматизированный канал, который каждые два часа публикует свежие предложения. Подробности в проекте HotTrip и в услугах «Интеграции и API» и «Парсинг и данные».

Частые вопросы

Нужен ли платный тариф для Data API?

Токен Travelpayouts выдаётся в кабинете партнёра. Условия доступа к разным API меняются, поэтому актуальные ограничения смотрите в документации Travelpayouts.

Цены из Data API — это живой поиск?

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

Как получать комиссию с продаж?

Добавляйте свой партнёрский marker к ссылкам на Aviasales. Тогда покупки по вашим ссылкам учитываются в кабинете Travelpayouts.

Можно ли вызывать API прямо из браузера?

Не рекомендуется: токен окажется доступен всем. Вызывайте API с сервера и отдавайте клиенту только нужные данные.

Aviasales APITravelpayoutsPythonавиабилетыAPI

Версия для ИИ и чтения без оформления: Markdown.

Читайте также

Telegram · 30 октября 2026

Уведомления в Telegram Mini App: как слать пуши через бота

У Mini App нет собственных пушей: уведомления приходят как сообщения бота, а писать пользователю можно только после его запуска бота или запроса разрешения requestWriteAccess. Чтобы открыть нужный экран, используйте кнопку web_app или прямую ссылку с параметром startapp. Пользователей, заблокировавших бота, нужно отмечать и не беспокоить.

Telegram · 30 октября 2026

Telegram-бот на n8n: inline-кнопки, меню и кнопка для открытия Mini App

В n8n бот строится из Telegram Trigger, ветвления по типу события и узла отправки. Нажатия inline-кнопок приходят как callback_query и требуют ответа. Кнопку, открывающую Mini App, проще отправить через HTTP Request, а у бота может быть только один webhook.

Бизнес · 30 октября 2026

Сколько стоит Telegram-бот и Mini App: из чего складывается цена

Цена бота зависит от сценариев, интеграций и числа ролей, цена Mini App ещё и от интерфейса, API и данных. Простой бот стоит заметно меньше каталога с подписками. Экономия достигается запуском минимальной версии и ясным описанием задачи.

Расскажите о задаче

Опишите, что нужно сделать, даже в паре строк. Отвечу с вопросами или оценкой.

Обсудить проект →