Save up to 17% with yearly billing

See pricing

Поиск в истории полётов

Ищите архивные полёты по бортовому номеру, позывному (позывной рейса, транслируемый по ADS-B, например BAW178), маршруту или hex-коду и получайте список полётов с UUID flight_id. Требуется хотя бы один фильтр. Это обязательный первый шаг в любом сценарии работы с историческими данными ADS-B: без flight_id, полученного из поиска, эндпоинты деталей и трека вызвать невозможно.

Уровни тарифов и правила префиксов пути: раздел «Исторические данные ADS-B».

Требования

Авторизация
x-api-key в каждом запросе (прямая подписка). Подробнее →
Тариф

Pro, Ultra или Mega — используйте префикс пути, соответствующий нужному вам временному окну (см. сравнительную таблицу в обзорном разделе).

Подробнее →

Запрос

GEThttps://data.skylinkapi.com/v3.1/ultra/history/flights
ПараметрТипОбязательныйПо умолчаниюОписание
startstringНет24 ч назадНачало окна запроса — дата и время в ISO 8601
endstringНетсейчасКонец окна запроса — дата и время в ISO 8601
icao24stringНужен хотя бы один фильтр-Hex-адрес ICAO24 (6 символов)
registrationstringНужен хотя бы один фильтр-Бортовой номер (например, N12345, G-XWBA). Преобразуется в icao24 на стороне сервера
callsignstringНужен хотя бы один фильтр-Точное совпадение позывного (например, BAW117)
departure_icaostringНужен хотя бы один фильтр-ICAO аэропорта вылета (4 символа)
arrival_icaostringНужен хотя бы один фильтр-ICAO аэропорта прилёта (4 символа)
limitintegerНет100Максимальное число возвращаемых полётов (не более 1000 на пути ULTRA)

Если переданы и registration, и icao24, они должны относиться к одному и тому же воздушному судну. На пути ULTRA окно запроса не может превышать 90 дней.

Путь MEGA (`/mega/history/...`)Развернуть раздел
GEThttps://data.skylinkapi.com/v3.1/mega/history/flights
ПараметрТипОбязательныйПо умолчаниюОписание
startstringНет24 ч назадНачало окна — ISO 8601 (на пути MEGA охват не более 365 дней)
endstringНетсейчасКонец окна — ISO 8601
icao24stringНужен хотя бы один фильтр-ICAO24 hex (6 символов)
registrationstringНужен хотя бы один фильтр-Бортовой номер
callsignstringНужен хотя бы один фильтр-Точный позывной
departure_icaostringНужен хотя бы один фильтр-ICAO аэропорта вылета
arrival_icaostringНужен хотя бы один фильтр-ICAO аэропорта прилёта
limitintegerНет200Максимальное число полётов (не более 2000 на пути MEGA)

Требуется тариф RapidAPI Ultra или Mega. Параметры и формат ответа такие же, как у ULTRA, — различаются только ограничения окна и лимита. См. сравнительную таблицу в обзорном разделе.

Ответ

{
  "filters": {
    "icao24": null,
    "registration": null,
    "resolved_icao24": null,
    "callsign": null,
    "departure_icao": "EGLL",
    "arrival_icao": null
  },
  "count": 1,
  "flights": [
    {
      "flight_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "icao24": "40621d",
      "callsign": "BAW178",
      "flight_number": "BAW178",
      "tail_number": "G-XWBA",
      "aircraft_type_icao": "B77W",
      "aircraft_type_name": "Boeing 777-300ER",
      "airline_icao": "BAW",
      "airline_iata": "BA",
      "airline_name": "British Airways",
      "departure_airport_icao": "EGLL",
      "departure_airport_iata": "LHR",
      "departure_airport_name": "London Heathrow Airport",
      "arrival_airport_icao": "KJFK",
      "arrival_airport_iata": "JFK",
      "arrival_airport_name": "John F Kennedy International Airport",
      "flight_state": "ARCHIVED",
      "flight_start": "2026-05-12T19:42:05Z",
      "flight_end": "2026-05-13T03:11:10Z",
      "takeoff_time": "2026-05-12T19:45:00Z",
      "landing_time": "2026-05-13T03:08:00Z",
      "flight_duration_min": 443.0,
      "distance_nm": 2998.4,
      "confidence": 1.0,
      "route_source": "vrs_confirmed",
      "gps_spoofing_suspected": false,
      "diversion_suspected": false
    }
  ]
}
ПолеТипОбязательныйОписание
filtersobjectДаПовтор применённых фильтров поиска (см. ниже)
countintegerДаКоличество элементов в flights
flightsarrayДаСводки подходящих полётов (может быть пустым)

Применённые фильтры (filters)

ПолеТипОбязательныйМожет быть null?Описание
icao24string | nullДаДаЗапрошенный ICAO24 hex, если указан
registrationstring | nullДаДаЗапрошенный бортовой номер, если указан
resolved_icao24string | nullДаДаICAO24, определённый по registration, если он передан
callsignstring | nullДаДаЗапрошенный позывной, если указан
departure_icaostring | nullДаДаЗапрошенный аэропорт вылета, если указан
arrival_icaostring | nullДаДаЗапрошенный аэропорт прилёта, если указан

Сводка полёта (flights[])

ПолеТипОбязательныйМожет быть null?Описание
flight_idstringДаНикогдаUUID для запросов деталей и трека
icao24string | nullНетДаHex-адрес воздушного судна, если известен
callsignstring | nullНетДаПозывной ADS-B во время полёта
flight_numberstring | nullНетДаНормализованный номер рейса, если определён
tail_numberstring | nullНетДаБортовой номер, если известен
aircraft_type_icaostring | nullНетДаКод типа ВС по ICAO (например, B77W)
aircraft_type_namestring | nullНетДаТип ВС в удобочитаемом виде
airline_icaostring | nullНетДаКод авиакомпании ICAO
airline_iatastring | nullНетДаКод авиакомпании IATA
airline_namestring | nullНетДаОтображаемое название авиакомпании
departure_airport_icaostring | nullНетДаICAO аэропорта вылета, если определён
departure_airport_iatastring | nullНетДаIATA аэропорта вылета
departure_airport_namestring | nullНетДаНазвание аэропорта вылета
arrival_airport_icaostring | nullНетДаICAO аэропорта прилёта, если определён
arrival_airport_iatastring | nullНетДаIATA аэропорта прилёта
arrival_airport_namestring | nullНетДаНазвание аэропорта прилёта
flight_statestring | nullНетДаСостояние в архиве (например, ARCHIVED)
flight_startstringДаНикогдаПервое наблюдение в архиве (ISO 8601)
flight_endstringДаНикогдаПоследнее наблюдение в архиве (ISO 8601)
takeoff_timestring | nullНетДаРасчётное или зафиксированное время взлёта (ISO 8601)
landing_timestring | nullНетДаРасчётное или зафиксированное время посадки (ISO 8601)
flight_duration_minnumber | nullНетДаПродолжительность от выхода до выхода (gate-to-gate) в минутах
distance_nmnumber | nullНетДаРасстояние по ортодромии в морских милях
confidencenumber | nullНетДаОценка достоверности маршрута (0–1)
route_sourcestring | nullНетДаНепрозрачный enum, описывающий способ определения маршрута, — используйте как отображаемое значение, а не как ключ для сопоставления
gps_spoofing_suspectedboolean | nullНетДаБыл ли для этого полёта отмечен подмен сигнала GPS (спуфинг)
diversion_suspectedboolean | nullНетДаБыло ли для этого полёта отмечено отклонение от маршрута

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

"""Typed models for Historical ADS-B - matches historical-adsb.mdx field tables."""from __future__ import annotationsfrom dataclasses import dataclassfrom typing import Literal@dataclassclass HistoricalFlightSummary:    flight_id: str    icao24: str | None    callsign: str | None    flight_number: str | None    tail_number: str | None    departure_airport_icao: str | None    arrival_airport_icao: str | None    flight_start: str    flight_end: str    takeoff_time: str | None    landing_time: str | None    flight_duration_min: float | None    distance_nm: float | None@dataclassclass HistoricalPosition:    timestamp: str    icao24: str    latitude: float    longitude: float    altitude_baro: float | None    ground_speed: float | None    track: float | None    vertical_rate: float | None    is_on_ground: bool@dataclassclass HistoricalFlightWindow:    flight_id: str    callsign: str | None    departure_airport_icao: str | None    arrival_airport_icao: str | None    takeoff_time: str | None    landing_time: str | None    flight_start: str    flight_end: str    flight_state: str | None@dataclassclass AirportTrafficFlight:    flight_id: str    icao24: str | None    callsign: str | None    departure_airport_icao: str | None    arrival_airport_icao: str | None    takeoff_time: str | None    landing_time: str | None    flight_duration_min: float | None    distance_nm: float | None@dataclassclass AirportTrafficResponse:    icao: str    direction: Literal["dep", "arr", "both"]    count: int    flights: list[AirportTrafficFlight]

Интеграция

Типичный сценарий — поиск → детали (метаданные) или поиск → трек (воспроизведение на карте). Выполните поиск хотя бы с одним фильтром, возьмите flight_id из результатов, затем вызовите детали или трек.

Пример ниже выполняет поиск по аэропорту вылета, получает полные метаданные для первого совпадения и использует таймауты подключения и чтения, чтобы пакетные задания не могли зависнуть на неопределённое время. На тарифах без доступа к историческим данным ADS-B обрабатывайте 401/403 от шлюза до разбора JSON — см. обзорный раздел → Ответы с ошибками.

import osimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}PLAN_GATED = {401, 403}def search_historical_flights(    *,    registration: str | None = None,    callsign: str | None = None,    icao24: str | None = None,    departure_icao: str | None = None,    arrival_icao: str | None = None,    start: str | None = None,    end: str | None = None,    limit: int = 10,    tier: str = "ultra",) -> dict:    """Search archived flights - at least one aircraft/route filter is required."""    params = {k: v for k, v in {        "registration": registration,        "callsign": callsign,        "icao24": icao24,        "departure_icao": departure_icao,        "arrival_icao": arrival_icao,        "start": start,        "end": end,        "limit": limit,    }.items() if v is not None}    r = requests.get(        f"{BASE}/{tier}/history/flights",        headers=HEADERS,        params=params,        timeout=(10, 25),    )    r.raise_for_status()    return r.json()def fetch_historical_flight_detail(flight_id: str, *, tier: str = "ultra") -> dict:    """Fetch full metadata for one archived flight by UUID."""    r = requests.get(        f"{BASE}/{tier}/history/flight/{flight_id}",        headers=HEADERS,        timeout=(10, 25),    )    r.raise_for_status()    return r.json()def search_then_detail(    *,    departure_icao: str,    limit: int = 1,    tier: str = "ultra",) -> dict | None:    """Search → pick first match → return full flight detail."""    search = search_historical_flights(        departure_icao=departure_icao,        limit=limit,        tier=tier,    )    flights = search.get("flights") or []    if not flights:        return None    return fetch_historical_flight_detail(flights[0]["flight_id"], tier=tier)if __name__ == "__main__":    import json    detail = search_then_detail(departure_icao="EGLL")    print(json.dumps(detail, indent=2, default=str) if detail else "No matching flight found")

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

Выбирайте правильный префикс пути. Используйте /ultra/history/... на Pro и выше, когда достаточно окна в 90 дней. Используйте /mega/history/... на Ultra/Mega, когда нужно до 365 дней или более высокие лимиты на запрос.

Связывайте запросы через flight_id. Никогда не угадывайте временные окна для воспроизведения трека — сначала выполните поиск, затем вызовите /history/flight/{flight_id}/track, чтобы получить путь с автоматически определёнными границами.

Разбивайте большие окна на страницы. Если count равен запрошенному limit, сузьте окно start/end или увеличьте limit (в пределах ограничений уровня) и объединяйте результаты на стороне клиента.

Регистрационный номер или hex. Предпочитайте registration, если ваши пользователи знают бортовые номера; используйте icao24 при приёме «сырых» потоков ADS-B.

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

Ограничения тарифа 401/403: раздел «Исторические данные ADS-B». Ошибки, специфичные для эндпоинта:

422 — нет фильтра поиска

Требуется хотя бы один из параметров icao24, registration, callsign, departure_icao или arrival_icao:

{
  "detail": [
    {
      "type": "value_error",
      "loc": ["query"],
      "msg": "At least one filter (icao24, registration, callsign, departure_icao, arrival_icao) is required"
    }
  ]
}

422 — слишком широкое окно

Возвращается, когда охват start/end превышает максимум для пути — 90 дней на /ultra/history/... или 365 дней на /mega/history/...:

{
  "detail": "Query window exceeds maximum of 90 days for your plan on /ultra/history/..."
}

422 — несоответствие регистрационного номера и ICAO24

Когда переданы оба идентификатора, но они относятся к разным воздушным судам:

{
  "detail": "registration and icao24 refer to different aircraft"
}
GET
/ultra/history/flights
x-api-key<token>

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

In: header

Query Parameters

start?|

Start datetime ISO 8601. Defaults to 24 h ago.

end?|

End datetime ISO 8601. Defaults to now.

icao24?|

Filter by ICAO24 hex (6 chars)

registration?|

Filter by aircraft registration / tail number (e.g. 'N12345')

callsign?|

Filter by callsign (exact match, e.g. 'BAW123')

departure_icao?|

Filter by departure airport ICAO (4 chars)

arrival_icao?|

Filter by arrival airport ICAO (4 chars)

limit?Limit

Max records (default 100, max 1000)

Default100
Range1 <= value <= 1000

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/ultra/history/flights"
null
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}
GET
/mega/history/flights
x-api-key<token>

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

In: header

Query Parameters

start?|

Start datetime ISO 8601. Defaults to 24 h ago.

end?|

End datetime ISO 8601. Defaults to now.

icao24?|

Filter by ICAO24 hex (6 chars)

registration?|

Filter by aircraft registration / tail number (e.g. 'N12345')

callsign?|

Filter by callsign (exact match, e.g. 'BAW123')

departure_icao?|

Filter by departure airport ICAO (4 chars)

arrival_icao?|

Filter by arrival airport ICAO (4 chars)

limit?Limit

Max records (default 200, max 2000)

Default200
Range1 <= value <= 2000

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/mega/history/flights"
null
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}