Save up to 17% with yearly billing

See pricing

Отслеживание воздушных судов по ADS-B

Получайте позиции воздушных судов в реальном времени, фильтруйте их по области просмотра карты и проверяйте состояние потока ADS-B. ADS-B (Automatic Dependent Surveillance–Broadcast, автоматическое зависимое наблюдение — вещание) — это сигнал транспондера, передающий идентификатор и позицию воздушного судна. Каждая запись в реальном времени содержит ICAO24 (6-символьный шестнадцатеричный код, однозначно идентифицирующий транспондер ВС, например 0A0022), позицию, барометрическую высоту (высоту, измеренную барометрическим высотомером ВС, в футах над MSL), путевую скорость, путевой угол (track — направление движения ВС относительно земли в градусах от истинного меридиана) и вертикальную скорость (скорость набора высоты или снижения в футах в минуту).

Данные обновляются каждые несколько секунд. Пагинация необязательна: не указывайте limit, чтобы получить весь набор совпадений (ограничивайте объём фильтрами), или передайте limit и offset, чтобы постранично просматривать большие наборы результатов. Статические регистрационные сведения по hex-адресу можно получить, передав его в Поиск воздушных судов. Исторические треки см. в разделе Исторические данные ADS-B.

Требования

Авторизация
x-api-key в каждом запросе (прямая подписка). Подробнее →
ЭндпоинтКогда использовать
GET /adsb/aircraftПозиции в реальном времени — тайлы карты, табло воздушной обстановки, отфильтрованные потоки
GET /adsb/aircraft/statisticsАгрегаты по всему парку — в воздухе и на земле, статистика высот
GET /adsb/healthСостояние потока — статус подключения и число активных ВС перед запуском цикла опроса

Воздушные суда в реальном времени

Возвращает отслеживаемые в данный момент воздушные суда с последней позицией и данными полёта. Каждая запись содержит позицию, высоту, путевую скорость, путевой угол, вертикальную скорость и, при наличии, поля обогащения.

Запрос

GEThttps://data.skylinkapi.com/v3.1/adsb/aircraft
ПараметрТипОбязательныйПо умолчаниюОписание
icao24stringНет-Фильтр по 6-символьному hex-адресу транспондера (в нижнем или верхнем регистре; ведущие нули сохраняются, например 0A0022)
callsignstringНет-Частичное совпадение позывного (без учёта регистра), например DAH совпадает с DAH2055
latnumberНет-Широта центра для поиска по радиусу (от -90 до 90)
lonnumberНет-Долгота центра для поиска по радиусу (от -180 до 180)
radiusnumberНет-Радиус поиска в километрах (максимум 1000)
bboxstringНет-Ограничивающий прямоугольник lat1,lon1,lat2,lon2 — сначала юго-западный угол, затем северо-восточный. Пример: 51.2,-0.8,51.6,-0.2
min_altnumberНет-Минимальная высота в футах
max_altnumberНет-Максимальная высота в футах
min_speednumberНет-Минимальная путевая скорость в узлах
max_speednumberНет-Максимальная путевая скорость в узлах
registrationstringНет-Фильтр по регистрационному номеру (бортовому номеру)
airlinestringНет-Фильтр по названию авиакомпании-эксплуатанта
photosbooleanНетfalseЗагружать миниатюры фотографий (медленнее; не более 50 ВС на страницу)
limitintegerНетвесь наборРазмер страницы — не указывайте, чтобы вернуть все совпадения
offsetintegerНет0Число пропускаемых записей для пагинации

Правила сочетания фильтров — самая частая причина ошибок 422:

Режим поискаОбязательные параметрыПримечания
Кругlat + lon + radiusВсе три вместе
ПрямоугольникbboxСначала юго-западный угол, затем северо-восточный
Ни то ни другое—Не смешивайте параметры круга и bbox
Частичная геопривязка—lat без lon (и наоборот) отклоняется

Сочетайте фильтры высоты и скорости, чтобы выделить трафик на маршруте.

Важно: по умолчанию photos равен false. Значение photos=true замедляет запрос и ограничивает выдачу 50 ВС на страницу — включайте его только для детальных представлений, а не для тайлов карты или частого опроса.

Ответ

{
  "aircraft": [
    {
      "icao24": "0A0022",
      "callsign": "DAH2055",
      "latitude": 51.274109,
      "longitude": -0.675964,
      "altitude": 9075.0,
      "ground_speed": 298.3,
      "track": 153.09,
      "vertical_rate": 2880.0,
      "is_on_ground": false,
      "last_seen": "2026-06-16T14:21:45.674566",
      "first_seen": "2026-06-16T14:17:09.312068",
      "registration": "7T-VJP",
      "aircraft_type": "Boeing B738",
      "airline": "Air Algerie",
      "photo_url": null
    }
  ],
  "total_count": 67,
  "timestamp": "2026-06-16T14:21:49.178448"
}
ПолеТипОбязательныйМожет быть null?Описание
aircraftarrayДаНикогдаНайденные воздушные суда (массив может быть пустым)
total_countintegerДаНикогдаЧисло воздушных судов в этом ответе
timestampstring (ISO 8601)НетНикогдаКогда был сформирован снимок

Элемент воздушного судна (aircraft[])

ПолеТипОбязательныйМожет быть null?Описание
icao24stringДаНикогда24-битный шестнадцатеричный идентификатор ICAO
callsignstring | nullНетДаПозывной рейса, если он передаётся
latitudenumber | nullНетДаШирота WGS-84
longitudenumber | nullНетДаДолгота WGS-84
altitudenumber | nullНетДаБарометрическая высота в футах над MSL
ground_speednumber | nullНетДаПутевая скорость в узлах
tracknumber | nullНетДаПутевой угол в градусах (0–360)
vertical_ratenumber | nullНетДаВертикальная скорость в футах в минуту
is_on_groundboolean | nullНетДаtrue, когда ВС находится на земле
last_seenstring (ISO 8601)ДаНикогдаВремя последнего наблюдения
first_seenstring (ISO 8601)ДаНикогдаВремя первого обнаружения в текущем сеансе отслеживания
registrationstring | nullНетДаРегистрационный номер, если он определён
aircraft_typestring | nullНетДаОписание типа или обозначение типа ICAO
airlinestring | nullНетДаАвиакомпания-эксплуатант, если она определена
photo_urlstring | nullНетДаURL миниатюры при photos=true

Поля обогащения (registration, aircraft_type, airline) могут быть null, если hex-адреса нет в реестре или в потоке отсутствует связь с позывным.

GET
/adsb/aircraft
x-api-key<token>

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

In: header

Query Parameters

icao24?|

Filter by ICAO 24-bit aircraft identifier (6 hex characters)

callsign?|

Filter by flight callsign (partial match, case-insensitive)

lat?|

Center latitude for radius search

lon?|

Center longitude for radius search

radius?|

Search radius in kilometers

bbox?|

Bounding box as 'lat1,lon1,lat2,lon2' (SW,NE corners)

min_alt?|

Minimum altitude in feet

max_alt?|

Maximum altitude in feet

min_speed?|

Minimum ground speed in knots

max_speed?|

Maximum ground speed in knots

registration?|

Filter by aircraft registration

airline?|

Filter by operating airline

photos?Photos

Fetch aircraft photos from airport-data.com (slower, max 50 aircraft per page)

Defaultfalse
limit?|

Page size for pagination. Omit to return the full matched set.

offset?Offset

Number of aircraft to skip before returning results (for pagination).

Default0
Range0 <= value

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/adsb/aircraft"
{
  "aircraft": [
    {
      "icao24": "40621D",
      "callsign": "BAW123",
      "latitude": 51.4706,
      "longitude": -0.4619,
      "altitude": 35000,
      "ground_speed": 450.5,
      "track": 89.2,
      "vertical_rate": 0,
      "is_on_ground": false,
      "last_seen": "2026-02-11T12:00:00Z",
      "first_seen": "2026-02-11T11:45:00Z",
      "registration": "G-STBC",
      "aircraft_type": "Boeing 777-36N",
      "airline": "British Airways",
      "photo_url": "https://image.airport-data.com/aircraft/001912010.jpg"
    }
  ],
  "total_count": 4691,
  "timestamp": "2026-02-11T12:00:30Z"
}
{
  "error": "string",
  "detail": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}
{
  "error": "string",
  "detail": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}

Статистика отслеживания

Агрегированная статистика по отслеживаемому в данный момент парку: общее число ВС, число ВС на земле и в воздухе, сводка по высотам. Параметры не требуются. Полезно для дашбордов мониторинга.

Запрос

GEThttps://data.skylinkapi.com/v3.1/adsb/aircraft/statistics

Query-параметров и параметров пути нет.

Ответ

{
  "total_aircraft": 9889,
  "positioned_aircraft": 9889,
  "on_ground": 412,
  "airborne": 9477,
  "altitude_stats": {
    "min_altitude": 100.0,
    "max_altitude": 56600.0,
    "avg_altitude": 21338.04
  },
  "timestamp": "2026-06-16T14:21:50.116343"
}
ПолеТипОбязательныйМожет быть null?Описание
total_aircraftintegerДаНикогдаОбщее число отслеживаемых ВС
positioned_aircraftintegerДаНикогдаВС с известной позицией
on_groundintegerДаНикогдаВС с отметкой «на земле»
airborneintegerДаНикогдаВС с отметкой «в воздухе»
altitude_statsobjectДаНикогдаСводка по высотам парка
altitude_stats.min_altitudenumberДаНикогдаМинимальная зарегистрированная высота (в футах)
altitude_stats.max_altitudenumberДаНикогдаМаксимальная зарегистрированная высота (в футах)
altitude_stats.avg_altitudenumberДаНикогдаСредняя высота по парку (в футах)
timestampstring (ISO 8601)ДаНикогдаВремя снимка
GET
/adsb/aircraft/statistics
x-api-key<token>

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

In: header

Response Body

application/json

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/adsb/aircraft/statistics"
{}
{
  "error": "string",
  "detail": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}
{
  "error": "string",
  "detail": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}

Состояние сервиса

Возвращает статус подключения ADS-B и число активных ВС. Используйте для мониторинга доступности и предварительных проверок перед опросом потока в реальном времени.

Запрос

GEThttps://data.skylinkapi.com/v3.1/adsb/health

Query-параметров и параметров пути нет.

Ответ

{
  "status": "healthy",
  "connected": true,
  "active_aircraft_count": 9889,
  "connection_uptime": null,
  "last_message_received": "2026-06-16T14:21:46.212802"
}
ПолеТипОбязательныйМожет быть null?Описание
statusstringДаНикогдаМетка статуса сервиса, например healthy
connectedbooleanДаНикогдаАктивно ли подключение к хабу ADS-B
active_aircraft_countintegerДаНикогдаЧисло отслеживаемых в данный момент ВС
connection_uptimenumber | nullНетДаВремя непрерывной работы в секундах, если доступно
last_message_receivedstring (ISO 8601) | nullНетДаМетка времени последнего сообщения из потока
GET
/adsb/health
x-api-key<token>

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

In: header

Response Body

application/json

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/adsb/health"
{
  "status": "string",
  "connected": true,
  "active_aircraft_count": 0,
  "connection_uptime": 0,
  "last_message_received": "2019-08-24T14:15:22Z"
}
{
  "error": "string",
  "detail": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}
{
  "error": "string",
  "detail": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}

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

"""ADS-B live aircraft models for GET /adsb/aircraft."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AdsbAircraft:    icao24: str    callsign: str | None    latitude: float | None    longitude: float | None    altitude: float | None    ground_speed: float | None    track: float | None    vertical_rate: float | None    is_on_ground: bool | None    last_seen: str    first_seen: str    registration: str | None    aircraft_type: str | None    airline: str | None    photo_url: str | None@dataclassclass AdsbAircraftListResponse:    aircraft: list[AdsbAircraft]    total_count: int    timestamp: str | None@dataclassclass MapMarker:    """Compact model for map overlays."""    icao24: str    label: str    lat: float    lon: float    altitude_ft: float | None    on_ground: bool

Интеграция

Опрашивайте воздушные суда в реальном времени вблизи аэропорта, чтобы наложить воздушную обстановку на карту.

Пример ниже выполняет поиск по радиусу с ограничением размера страницы, использует короткие тайм-ауты (10 с / 15 с) и преобразует результаты в маркеры на карте. Не кэшируйте позиции в реальном времени — опрашивайте каждые 5–15 секунд в зависимости от вашей квоты и требований к UX.

import osfrom dataclasses import dataclassimport requestsHEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"@dataclassclass MapMarker:    icao24: str    label: str    lat: float    lon: float    altitude_ft: float | None    on_ground: booldef fetch_aircraft_near(    *,    lat: float,    lon: float,    radius_km: float = 50,    limit: int = 100,) -> dict:    """Fetch live ADS-B aircraft within a radius. Do not cache - data is ephemeral."""    try:        r = requests.get(            f"{BASE}/adsb/aircraft",            headers=HEADERS,            params={                "lat": lat,                "lon": lon,                "radius": radius_km,                "limit": limit,                "photos": False,            },            timeout=(10, 15),        )    except requests.Timeout as exc:        raise RuntimeError("SkyLink timeout fetching ADS-B aircraft") from exc    r.raise_for_status()    return r.json()def to_map_markers(payload: dict) -> list[MapMarker]:    markers: list[MapMarker] = []    for ac in payload.get("aircraft", []):        lat = ac.get("latitude")        lon = ac.get("longitude")        if lat is None or lon is None:            continue        label = ac.get("callsign") or ac.get("registration") or ac["icao24"]        markers.append(            MapMarker(                icao24=ac["icao24"],                label=label,                lat=float(lat),                lon=float(lon),                altitude_ft=ac.get("altitude"),                on_ground=bool(ac.get("is_on_ground")),            )        )    return markersif __name__ == "__main__":    import json    payload = fetch_aircraft_near(lat=40.6413, lon=-73.7781, radius_km=80, limit=5)    print(json.dumps(payload, indent=2, default=str))

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

Интервал опроса. Данные ADS-B обновляются каждые несколько секунд. Опрос чаще чем раз в ~5 с редко повышает актуальность данных и быстро расходует квоту.

Ограничение области запросов. Для карт всегда передавайте lat/lon/radius или bbox — глобальные запросы без фильтров могут возвращать очень большие объёмы данных.

Пагинация. Используйте limit + offset при выводе таблиц. total_count отражает размер текущей страницы, а не общее число ВС в парке.

Пробелы в обогащении. registration и aircraft_type могут быть null для военных, заблокированных или незарегистрированных hex-кодов. В этом случае отображайте позывной и ICAO24.

Цепочка «реальное время → лётно-технические характеристики». aircraft_type в потоке реального времени часто содержит маркетинговое название (например, "Boeing B738"), а не обозначение типа ICAO. Чтобы получить лётно-технические характеристики ВС, вызовите Поиск воздушных судов с icao24 и используйте aircraft.icao_type из ответа реестра.

Нормализация ICAO24. Принимайте 6-символьные hex-коды из потоков ADS-B; верхний и нижний регистр равнозначны. Дополняйте короткие адреса ведущими нулями, если источник их опускает.

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

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

404 — по фильтру ICAO24 ничего не найдено (ВС в реальном времени)

Если при фильтрации по icao24 ни одно воздушное судно не найдено:

{
  "error": "Aircraft not found",
  "detail": "No aircraft found with ICAO24 000000",
  "timestamp": "2026-06-16T14:00:00Z"
}

Применяется только тогда, когда icao24 передан как фильтр, — но не к пустым результатам поиска по радиусу.

422 — недопустимое сочетание фильтров

{
  "detail": [
    {
      "type": "greater_than",
      "loc": ["query", "radius"],
      "msg": "Input should be greater than 0"
    }
  ]
}

Возникает, когда числовые фильтры выходят за допустимые пределы (например, radius ≤ 0 или высота вне диапазона 0–60000 ft) либо когда смешаны параметры круга и bbox.


См. также: Поиск воздушных судов · Исторические данные ADS-B · Статус рейса