Расписания
Расписания вылетов и прилётов аэропорта за заданный интервал времени. Обе операции возвращают строки рейсов одинаковой структуры с полем-дискриминатором direction (departures или arrivals). По умолчанию API возвращает предстоящие рейсы примерно на ближайшие 12 часов и может незаметно для вас подгружать дополнительные страницы.
Подходит для табло аэропортов, диспетчерских дашбордов и пакетных ETL-процессов. Передавайте ровно один идентификатор аэропорта (icao или iata) в каждом запросе.
Важно: ключи строк рейсов пишутся с заглавной буквы — Time, Flight, Status, а не time, flight, status. Обращение к ключам в нижнем регистре вернёт undefined.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →Вылеты
https://data.skylinkapi.com/v3.1/schedules/departuresПрилёты
https://data.skylinkapi.com/v3.1/schedules/arrivals| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
icao | string | Один из icao / iata | - | 4-буквенный код аэропорта ICAO, например KJFK, EGLL |
iata | string | Один из icao / iata | - | 3-буквенный код аэропорта IATA, например JFK, LHR |
date | string | Нет | текущая дата | Дата в формате DD-MM-YYYY. Диапазон: от 5 дней назад до 1 дня вперёд |
time | string | Нет | текущее время | Время в формате HH:MM. Если указано, требуется также date |
ts | integer | Нет | - | Метка времени Unix в миллисекундах. Если задана, переопределяет date и time |
Для программного опроса предпочтительнее ts — так вы избежите ошибок форматирования, связанных с локалью и часовыми поясами, в cron-задачах и бессерверных воркерах.
Ответ
Обе операции используют одинаковую обёртку ответа. Поле direction соответствует вызванной операции.
Пример вылетов
{
"iata": "MXP",
"direction": "departures",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:05",
"Date": "11 Feb",
"IATA": "ICN",
"Destination": "Seoul",
"Flight": "C84093",
"Airline": "Federal Airlines",
"Status": "Estimated 16:39"
}
],
"total_flights": 85,
"pages_fetched": 3
}Пример прилётов
{
"iata": "MXP",
"direction": "arrivals",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:20",
"Date": "11 Feb",
"IATA": "RAK",
"Origin": "Marrakech",
"Flight": "EC3929",
"Airline": "easyJet Europe",
"Status": "Landed 16:15"
}
],
"total_flights": 72,
"pages_fetched": 3
}Поля обёртки ответа
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
iata | string | Да | IATA-код запрошенного аэропорта, если известен |
direction | string | Да | departures или arrivals |
airport_code | string | Да | Эхо вашего запроса — ICAO, если вы передали icao, и IATA, если передали iata |
flights | array | Да | Строки расписания (может быть пустым) |
total_flights | integer | Да | Общее число рейсов в запрошенном интервале |
pages_fetched | integer | Да | Число страниц, загруженных в фоновом режиме |
Объект строки рейса (flights[])
Путь в JSON: flights[]. Имена ключей пишутся с заглавной буквы.
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
Time | string | Да | Местное время по расписанию |
Date | string | Да | Метка местной даты, например 11 Feb |
IATA | string | Да | IATA-код аэропорта на другом конце маршрута |
Destination | string | Только для вылетов | Город/аэропорт назначения |
Origin | string | Только для прилётов | Город/аэропорт отправления |
Flight | string | Да | Номер рейса в том виде, в каком он отображается на табло |
Airline | string | Да | Отображаемое название авиакомпании |
Status | string | Да | Статус в свободной текстовой форме, например Estimated 16:39, Landed 16:15 |
Клиентские типы
"""Schedules response models for /schedules/departures and /schedules/arrivals."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass SchedulesRequest: """Query input shared by both schedules endpoints.""" icao: str | None = None iata: str | None = None date: str | None = None time: str | None = None ts: int | None = None@dataclassclass ScheduleFlight: Time: str Date: str IATA: str Flight: str Airline: str Status: str Destination: str | None = None Origin: str | None = None@dataclassclass SchedulesResponse: iata: str direction: str airport_code: str flights: list[ScheduleFlight] total_flights: int pages_fetched: intИнтеграция
Получите вылеты и приведите ключи с заглавной буквы к плоской структуре элемента табло.
Пример ниже требует ровно один из параметров icao или iata (исключающее ИЛИ), использует запросы с тайм-аутами для пакетного опроса и сопоставляет строки со стабильными внутренними ключами.
import osimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}def fetch_schedules(direction: str, *, icao: str | None = None, iata: str | None = None) -> dict: """Fetch airport schedules for arrivals or departures.""" if bool(icao) == bool(iata): raise ValueError("Provide exactly one of icao or iata") if direction not in {"arrivals", "departures"}: raise ValueError("direction must be arrivals or departures") code = icao.upper() if icao else (iata or "").upper() params = {"icao": code} if icao else {"iata": code} r = requests.get(f"{BASE}/schedules/{direction}", headers=HEADERS, params=params, timeout=(10, 20)) r.raise_for_status() return r.json()if __name__ == "__main__": import json data = fetch_schedules("departures", icao="KJFK") flights = data.get("flights") or [] print(json.dumps({"count": len(flights), "sample": flights[:3]}, indent=2, default=str))Примечания по реализации
Разбор статуса. Status — это отображаемый текст из источника расписаний. Если вам нужны структурированные состояния, разбирайте его осторожно.
Пагинация. Начинайте с интервала по умолчанию; более длинные интервалы вперёд увеличивают задержку.
Подробности по одному рейсу. Чтобы узнать выход на посадку и терминал для конкретного рейса, используйте Статус рейса.
Ответы с ошибками
Общие ошибки см. в разделе Обработка ошибок. Ошибки, специфичные для эндпоинта:
422 - недопустимые дата/время или отсутствует код аэропорта
{
"detail": [
{
"type": "value_error",
"loc": ["query", "date"],
"msg": "Invalid date format. Expected DD-MM-YYYY."
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
4-letter ICAO airport code (e.g. KJFK, EGLL)
3-letter IATA airport code (e.g. JFK, LHR)
Date in DD-MM-YYYY format (e.g. 11-02-2026). Range: 5 days back to 1 day forward.
Time in HH:MM format (e.g. 14:30). Requires date parameter.
Unix timestamp in milliseconds (alternative to date/time).
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/schedules/departures"{
"iata": "MXP",
"direction": "departures",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:05",
"Date": "11 Feb",
"IATA": "ICN",
"Destination": "Seoul",
"Flight": "C84093",
"Airline": "Federal Airlines",
"Status": "Estimated 16:39"
}
],
"total_flights": 85,
"pages_fetched": 3
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
4-letter ICAO airport code (e.g. KJFK, EGLL)
3-letter IATA airport code (e.g. JFK, LHR)
Date in DD-MM-YYYY format (e.g. 11-02-2026). Range: 5 days back to 1 day forward.
Time in HH:MM format (e.g. 14:30). Requires date parameter.
Unix timestamp in milliseconds (alternative to date/time).
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/schedules/arrivals"{
"iata": "MXP",
"direction": "arrivals",
"airport_code": "LIMC",
"flights": [
{
"Time": "16:20",
"Date": "11 Feb",
"IATA": "RAK",
"Origin": "Marrakech",
"Flight": "EC3929",
"Airline": "easyJet Europe",
"Status": "Landed 16:15"
}
],
"total_flights": 72,
"pages_fetched": 3
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}См. также: Статус рейса · Аэропорты · Авиакомпании