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

> Data API Travelpayouts отдаёт кэшированные цены из поисков Aviasales, а не живой поиск. Для цен по датам и направлению хватает одного GET-запроса с токеном в заголовке. Главные риски: данные могут устареть или отсутствовать для редких маршрутов, поэтому цену нужно показывать как «от» и перепроверять по ссылке.

Дата: 2026-10-30 · Источник: https://oneswitch.ru/blog/aviasales-travelpayouts-api-na-python/

Если вы делаете сайт, бота или 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`.

```python
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](/raboty/hottrip/) и в услугах [«Интеграции и API»](/uslugi/integracii-i-api/) и [«Парсинг и данные»](/uslugi/parsing-i-dannye/).

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

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

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

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

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

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

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

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

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