Save up to 17% with yearly billing

See pricing

Авиабилеты

Поиск доступных вариантов билетов для пары городов. Результаты отсортированы по цене (сначала самые дешёвые) и кэшируются на 1 час. Цены возвращаются в USD вместе с метаданными исходной валюты, если валюта предложения отличается.

Каждый маршрут (itinerary) — это полный вариант путешествия от пункта отправления до пункта назначения, возможно, со стыковками. Результаты включают авиакомпанию и номер рейса для каждого сегмента, аэропорты и местное время вылета/прилёта, длительность сегмента, количество пересадок и время стыковки (layover) в аэропортах пересадки.

Важно: этот эндпоинт ожидает 3-буквенные коды аэропортов IATA (LHR, JFK, CDG), а не ICAO. Сначала определите коды через Поиск аэропортов.

Запрос

Требования

Авторизация
x-api-key в каждом запросе (прямая подписка). Подробнее →
GEThttps://data.skylinkapi.com/v3.1/tickets/search
ПараметрТипОбязательныйПо умолчаниюОписание
originstringДа-IATA-код аэропорта отправления, например LHR
destinationstringДа-IATA-код аэропорта назначения, например JFK
datestring (date)Нетчерез 7 днейДата поездки YYYY-MM-DD
passengersintegerНет1Количество пассажиров (1–9)

Ответ

{
  "origin": "LHR",
  "destination": "JFK",
  "date": "2026-05-01",
  "passengers": 1,
  "count": 2,
  "flights": [
    {
      "price_usd": 542.0,
      "original_price": 498.0,
      "original_currency": "EUR",
      "total_duration_min": 465,
      "stops": 0,
      "legs": [
        {
          "flight_number": "BA117",
          "airline": "British Airways",
          "airline_code": "BA",
          "departure_airport": "LHR",
          "departure_airport_name": "London Heathrow Airport",
          "arrival_airport": "JFK",
          "arrival_airport_name": "John F. Kennedy International Airport",
          "departure_time": "09:00",
          "arrival_time": "11:45",
          "departure_datetime": "2026-05-01T09:00:00",
          "arrival_datetime": "2026-05-01T11:45:00",
          "duration_min": 465
        }
      ]
    },
    {
      "price_usd": 398.0,
      "original_price": 367.0,
      "original_currency": "EUR",
      "total_duration_min": 680,
      "stops": 1,
      "legs": [
        {
          "flight_number": "IB3163",
          "airline": "Iberia",
          "airline_code": "IB",
          "departure_airport": "LHR",
          "departure_airport_name": "London Heathrow Airport",
          "arrival_airport": "MAD",
          "arrival_airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "departure_time": "07:15",
          "arrival_time": "10:30",
          "departure_datetime": "2026-05-01T07:15:00",
          "arrival_datetime": "2026-05-01T10:30:00",
          "duration_min": 135
        },
        {
          "flight_number": "IB6251",
          "airline": "Iberia",
          "airline_code": "IB",
          "departure_airport": "MAD",
          "departure_airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "arrival_airport": "JFK",
          "arrival_airport_name": "John F. Kennedy International Airport",
          "departure_time": "13:05",
          "arrival_time": "16:15",
          "departure_datetime": "2026-05-01T13:05:00",
          "arrival_datetime": "2026-05-01T16:15:00",
          "duration_min": 490
        }
      ],
      "layovers": [
        {
          "airport": "MAD",
          "airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "duration_min": 155
        }
      ]
    }
  ]
}

Поля верхнего уровня

ПолеТипОбязательныйОписание
originstringДаIATA-код отправления из запроса
destinationstringДаIATA-код назначения из запроса
datestringДаДата поездки, использованная для поиска
passengersintegerДаКоличество пассажиров
countintegerДаКоличество маршрутов в flights
flightsarrayДаВарианты, отсортированные по цене (может быть пустым, если мест нет)

Важно: count: 0 с flights: [] — допустимый ответ; показывайте состояние «нет доступных вариантов», а не ошибку.

Маршрут (flights[])

ПолеТипОбязательныйМожет быть null?Описание
price_usdnumberДаНикогдаИтоговая цена в USD
original_pricenumberДаНикогдаИсходная цена до конвертации в USD
original_currencystringДаНикогдаКод валюты ISO для original_price, например EUR
total_duration_minintegerДаНикогдаОбщая длительность «от двери до двери» в минутах, включая пересадки
stopsintegerДаНикогдаКоличество пересадок (0 — беспосадочный перелёт)
legsarrayДаНикогдаСегменты перелёта по порядку
layoversarrayНетДаПрисутствует, если stops > 0

Сегмент (legs[])

ПолеТипОбязательныйОписание
flight_numberstringДаКоммерческий номер рейса
airlinestringДаОтображаемое название авиакомпании
airline_codestringДаIATA-код авиакомпании
departure_airportstringДаIATA-код аэропорта вылета
departure_airport_namestringДаНазвание аэропорта вылета
arrival_airportstringДаIATA-код аэропорта прилёта
arrival_airport_namestringДаНазвание аэропорта прилёта
departure_timestringДаМестное время вылета HH:MM
arrival_timestringДаМестное время прилёта HH:MM
departure_datetimestringДаМестные дата и время вылета в формате ISO
arrival_datetimestringДаМестные дата и время прилёта в формате ISO
duration_minintegerДаБлочное время сегмента в минутах

Пересадка (layovers[])

ПолеТипОбязательныйОписание
airportstringДаIATA-код аэропорта пересадки
airport_namestringДаНазвание аэропорта пересадки
duration_minintegerДаВремя на земле до следующего сегмента

Клиентские типы

"""Flight ticket search models for /tickets/search."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass TicketLeg:    flight_number: str    airline: str    airline_code: str    departure_airport: str    departure_airport_name: str    arrival_airport: str    arrival_airport_name: str    departure_time: str    arrival_time: str    departure_datetime: str    arrival_datetime: str    duration_min: int@dataclassclass TicketItinerary:    price_usd: float    original_price: float    original_currency: str    total_duration_min: int    stops: int    legs: list[TicketLeg]@dataclassclass TicketSearchResponse:    origin: str    destination: str    date: str    passengers: int    count: int    flights: list[TicketItinerary]

Интеграция

Интерфейсы поиска билетов обычно применяют debounce к выбору аэропорта и кэшируют ответы для каждого набора (origin, destination, date, passengers) на срок до одного часа. Пример ниже получает результаты, преобразует самый дешёвый вариант в модель карточки и корректно обрабатывает пустые массивы flights.

import osfrom dataclasses import dataclassimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}@dataclassclass TicketOption:    price_usd: float    stops: int    total_duration_min: int    first_flight: str | Nonedef search_tickets(    *,    origin: str,    destination: str,    date: str | None = None,    passengers: int = 1,) -> dict:    """Search available flight tickets for a city pair."""    params: dict[str, str | int] = {        "origin": origin.upper(),        "destination": destination.upper(),        "passengers": passengers,    }    if date:        params["date"] = date    r = requests.get(f"{BASE}/tickets/search", headers=HEADERS, params=params, timeout=(10, 30))    r.raise_for_status()    return r.json()def cheapest_ticket(origin: str, destination: str, *, date: str | None = None) -> TicketOption | None:    data = search_tickets(origin=origin, destination=destination, date=date)    flights = data.get("flights") or []    if not flights:        return None    best = flights[0]    legs = best.get("legs") or []    first = legs[0]["flight_number"] if legs else None    return TicketOption(        price_usd=float(best["price_usd"]),        stops=int(best["stops"]),        total_duration_min=int(best["total_duration_min"]),        first_flight=first,    )if __name__ == "__main__":    import json    data = search_tickets(origin="JFK", destination="LAX")    print(json.dumps({"count": data.get("count"), "origin": data.get("origin")}, indent=2, default=str))

Примечания по реализации

Важно: цены — это ориентировочные рыночные снимки, а не актуальные данные о наличии мест у авиакомпании. В интерфейсе для пассажиров сообщайте, что цена может измениться в момент бронирования.

Чтобы получить статус забронированного рейса в реальном времени, используйте Статус рейса.

Ответы с ошибками

Общие ошибки платформы описаны в разделе Обработка ошибок. Поведение, специфичное для эндпоинта:

422 — недопустимые параметры

Возвращается, если origin/destination отсутствуют или не проходят валидацию.

Руководства по интеграции

РуководствоЧто охватывает
Поиск билетовСамые дешёвые и самые быстрые варианты, маршруты, несколько пассажиров
Обработка ошибокПустые результаты, коды IATA, ориентировочные цены
Кэширование и мониторингКлюч кэша на 1 час и debounce
GET
/tickets/search
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Query Parameters

origin*Origin

Origin airport IATA code (e.g. 'LHR')

destination*Destination

Destination airport IATA code (e.g. 'JFK')

date?|

Travel date (YYYY-MM-DD). Defaults to 7 days from today.

passengers?Passengers

Number of passengers (default 1, max 9)

Default1
Range1 <= value <= 9

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/tickets/search?origin=string&destination=string"
{
  "origin": "LHR",
  "destination": "JFK",
  "date": "2026-05-01",
  "passengers": 1,
  "count": 3,
  "flights": [
    {
      "price_usd": 542,
      "original_price": 498,
      "original_currency": "EUR",
      "total_duration_min": 465,
      "stops": 0,
      "legs": [
        {
          "flight_number": "BA117",
          "airline": "British Airways",
          "airline_code": "BA",
          "departure_airport": "LHR",
          "departure_airport_name": "London Heathrow Airport",
          "arrival_airport": "JFK",
          "arrival_airport_name": "John F Kennedy International Airport",
          "departure_time": "09:00",
          "arrival_time": "11:45",
          "departure_datetime": "2026-05-01T09:00:00",
          "arrival_datetime": "2026-05-01T11:45:00",
          "duration_min": 465
        }
      ]
    },
    {
      "price_usd": 398,
      "original_price": 367,
      "original_currency": "EUR",
      "total_duration_min": 680,
      "stops": 1,
      "legs": [
        {
          "flight_number": "IB3163",
          "airline": "Iberia",
          "airline_code": "IB",
          "departure_airport": "LHR",
          "departure_airport_name": "London Heathrow Airport",
          "arrival_airport": "MAD",
          "arrival_airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "departure_time": "07:15",
          "arrival_time": "10:30",
          "departure_datetime": "2026-05-01T07:15:00",
          "arrival_datetime": "2026-05-01T10:30:00",
          "duration_min": 135
        },
        {
          "flight_number": "IB6251",
          "airline": "Iberia",
          "airline_code": "IB",
          "departure_airport": "MAD",
          "departure_airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "arrival_airport": "JFK",
          "arrival_airport_name": "John F Kennedy International Airport",
          "departure_time": "13:05",
          "arrival_time": "16:15",
          "departure_datetime": "2026-05-01T13:05:00",
          "arrival_datetime": "2026-05-01T16:15:00",
          "duration_min": 490
        }
      ],
      "layovers": [
        {
          "airport": "MAD",
          "airport_name": "Adolfo Suárez Madrid–Barajas Airport",
          "duration_min": 155
        }
      ]
    }
  ]
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}