Авиабилеты
Поиск доступных вариантов билетов для пары городов. Результаты отсортированы по цене (сначала самые дешёвые) и кэшируются на 1 час. Цены возвращаются в USD вместе с метаданными исходной валюты, если валюта предложения отличается.
Каждый маршрут (itinerary) — это полный вариант путешествия от пункта отправления до пункта назначения, возможно, со стыковками. Результаты включают авиакомпанию и номер рейса для каждого сегмента, аэропорты и местное время вылета/прилёта, длительность сегмента, количество пересадок и время стыковки (layover) в аэропортах пересадки.
Важно: этот эндпоинт ожидает 3-буквенные коды аэропортов IATA (LHR, JFK, CDG), а не ICAO. Сначала определите коды через Поиск аэропортов.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/tickets/search| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
origin | string | Да | - | IATA-код аэропорта отправления, например LHR |
destination | string | Да | - | IATA-код аэропорта назначения, например JFK |
date | string (date) | Нет | через 7 дней | Дата поездки YYYY-MM-DD |
passengers | integer | Нет | 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
}
]
}
]
}Поля верхнего уровня
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
origin | string | Да | IATA-код отправления из запроса |
destination | string | Да | IATA-код назначения из запроса |
date | string | Да | Дата поездки, использованная для поиска |
passengers | integer | Да | Количество пассажиров |
count | integer | Да | Количество маршрутов в flights |
flights | array | Да | Варианты, отсортированные по цене (может быть пустым, если мест нет) |
Важно: count: 0 с flights: [] — допустимый ответ; показывайте состояние «нет доступных вариантов», а не ошибку.
Маршрут (flights[])
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
price_usd | number | Да | Никогда | Итоговая цена в USD |
original_price | number | Да | Никогда | Исходная цена до конвертации в USD |
original_currency | string | Да | Никогда | Код валюты ISO для original_price, например EUR |
total_duration_min | integer | Да | Никогда | Общая длительность «от двери до двери» в минутах, включая пересадки |
stops | integer | Да | Никогда | Количество пересадок (0 — беспосадочный перелёт) |
legs | array | Да | Никогда | Сегменты перелёта по порядку |
layovers | array | Нет | Да | Присутствует, если stops > 0 |
Сегмент (legs[])
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
flight_number | string | Да | Коммерческий номер рейса |
airline | string | Да | Отображаемое название авиакомпании |
airline_code | string | Да | IATA-код авиакомпании |
departure_airport | string | Да | IATA-код аэропорта вылета |
departure_airport_name | string | Да | Название аэропорта вылета |
arrival_airport | string | Да | IATA-код аэропорта прилёта |
arrival_airport_name | string | Да | Название аэропорта прилёта |
departure_time | string | Да | Местное время вылета HH:MM |
arrival_time | string | Да | Местное время прилёта HH:MM |
departure_datetime | string | Да | Местные дата и время вылета в формате ISO |
arrival_datetime | string | Да | Местные дата и время прилёта в формате ISO |
duration_min | integer | Да | Блочное время сегмента в минутах |
Пересадка (layovers[])
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
airport | string | Да | IATA-код аэропорта пересадки |
airport_name | string | Да | Название аэропорта пересадки |
duration_min | integer | Да | Время на земле до следующего сегмента |
Клиентские типы
"""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 |
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Origin airport IATA code (e.g. 'LHR')
Destination airport IATA code (e.g. 'JFK')
Travel date (YYYY-MM-DD). Defaults to 7 days from today.
Number of passengers (default 1, max 9)
11 <= value <= 9Response 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": {}
}
]
}