Отслеживание воздушных судов по 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 | Состояние потока — статус подключения и число активных ВС перед запуском цикла опроса |
Воздушные суда в реальном времени
Возвращает отслеживаемые в данный момент воздушные суда с последней позицией и данными полёта. Каждая запись содержит позицию, высоту, путевую скорость, путевой угол, вертикальную скорость и, при наличии, поля обогащения.
Запрос
https://data.skylinkapi.com/v3.1/adsb/aircraft| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
icao24 | string | Нет | - | Фильтр по 6-символьному hex-адресу транспондера (в нижнем или верхнем регистре; ведущие нули сохраняются, например 0A0022) |
callsign | string | Нет | - | Частичное совпадение позывного (без учёта регистра), например DAH совпадает с DAH2055 |
lat | number | Нет | - | Широта центра для поиска по радиусу (от -90 до 90) |
lon | number | Нет | - | Долгота центра для поиска по радиусу (от -180 до 180) |
radius | number | Нет | - | Радиус поиска в километрах (максимум 1000) |
bbox | string | Нет | - | Ограничивающий прямоугольник lat1,lon1,lat2,lon2 — сначала юго-западный угол, затем северо-восточный. Пример: 51.2,-0.8,51.6,-0.2 |
min_alt | number | Нет | - | Минимальная высота в футах |
max_alt | number | Нет | - | Максимальная высота в футах |
min_speed | number | Нет | - | Минимальная путевая скорость в узлах |
max_speed | number | Нет | - | Максимальная путевая скорость в узлах |
registration | string | Нет | - | Фильтр по регистрационному номеру (бортовому номеру) |
airline | string | Нет | - | Фильтр по названию авиакомпании-эксплуатанта |
photos | boolean | Нет | false | Загружать миниатюры фотографий (медленнее; не более 50 ВС на страницу) |
limit | integer | Нет | весь набор | Размер страницы — не указывайте, чтобы вернуть все совпадения |
offset | integer | Нет | 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? | Описание |
|---|---|---|---|---|
aircraft | array | Да | Никогда | Найденные воздушные суда (массив может быть пустым) |
total_count | integer | Да | Никогда | Число воздушных судов в этом ответе |
timestamp | string (ISO 8601) | Нет | Никогда | Когда был сформирован снимок |
Элемент воздушного судна (aircraft[])
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
icao24 | string | Да | Никогда | 24-битный шестнадцатеричный идентификатор ICAO |
callsign | string | null | Нет | Да | Позывной рейса, если он передаётся |
latitude | number | null | Нет | Да | Широта WGS-84 |
longitude | number | null | Нет | Да | Долгота WGS-84 |
altitude | number | null | Нет | Да | Барометрическая высота в футах над MSL |
ground_speed | number | null | Нет | Да | Путевая скорость в узлах |
track | number | null | Нет | Да | Путевой угол в градусах (0–360) |
vertical_rate | number | null | Нет | Да | Вертикальная скорость в футах в минуту |
is_on_ground | boolean | null | Нет | Да | true, когда ВС находится на земле |
last_seen | string (ISO 8601) | Да | Никогда | Время последнего наблюдения |
first_seen | string (ISO 8601) | Да | Никогда | Время первого обнаружения в текущем сеансе отслеживания |
registration | string | null | Нет | Да | Регистрационный номер, если он определён |
aircraft_type | string | null | Нет | Да | Описание типа или обозначение типа ICAO |
airline | string | null | Нет | Да | Авиакомпания-эксплуатант, если она определена |
photo_url | string | null | Нет | Да | URL миниатюры при photos=true |
Поля обогащения (registration, aircraft_type, airline) могут быть null, если hex-адреса нет в реестре или в потоке отсутствует связь с позывным.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Filter by ICAO 24-bit aircraft identifier (6 hex characters)
Filter by flight callsign (partial match, case-insensitive)
Center latitude for radius search
Center longitude for radius search
Search radius in kilometers
Bounding box as 'lat1,lon1,lat2,lon2' (SW,NE corners)
Minimum altitude in feet
Maximum altitude in feet
Minimum ground speed in knots
Maximum ground speed in knots
Filter by aircraft registration
Filter by operating airline
Fetch aircraft photos from airport-data.com (slower, max 50 aircraft per page)
falsePage size for pagination. Omit to return the full matched set.
Number of aircraft to skip before returning results (for pagination).
00 <= valueResponse 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"
}Статистика отслеживания
Агрегированная статистика по отслеживаемому в данный момент парку: общее число ВС, число ВС на земле и в воздухе, сводка по высотам. Параметры не требуются. Полезно для дашбордов мониторинга.
Запрос
https://data.skylinkapi.com/v3.1/adsb/aircraft/statisticsQuery-параметров и параметров пути нет.
Ответ
{
"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_aircraft | integer | Да | Никогда | Общее число отслеживаемых ВС |
positioned_aircraft | integer | Да | Никогда | ВС с известной позицией |
on_ground | integer | Да | Никогда | ВС с отметкой «на земле» |
airborne | integer | Да | Никогда | ВС с отметкой «в воздухе» |
altitude_stats | object | Да | Никогда | Сводка по высотам парка |
altitude_stats.min_altitude | number | Да | Никогда | Минимальная зарегистрированная высота (в футах) |
altitude_stats.max_altitude | number | Да | Никогда | Максимальная зарегистрированная высота (в футах) |
altitude_stats.avg_altitude | number | Да | Никогда | Средняя высота по парку (в футах) |
timestamp | string (ISO 8601) | Да | Никогда | Время снимка |
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 и число активных ВС. Используйте для мониторинга доступности и предварительных проверок перед опросом потока в реальном времени.
Запрос
https://data.skylinkapi.com/v3.1/adsb/healthQuery-параметров и параметров пути нет.
Ответ
{
"status": "healthy",
"connected": true,
"active_aircraft_count": 9889,
"connection_uptime": null,
"last_message_received": "2026-06-16T14:21:46.212802"
}| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
status | string | Да | Никогда | Метка статуса сервиса, например healthy |
connected | boolean | Да | Никогда | Активно ли подключение к хабу ADS-B |
active_aircraft_count | integer | Да | Никогда | Число отслеживаемых в данный момент ВС |
connection_uptime | number | null | Нет | Да | Время непрерывной работы в секундах, если доступно |
last_message_received | string (ISO 8601) | null | Нет | Да | Метка времени последнего сообщения из потока |
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 · Статус рейса
Лётно-технические характеристики ВС
Характеристики типов ВС по ICAO Doc 8643 — крейсерская скорость, практический потолок, дальность, категория спутного следа, размеры, MTOW и вместимость.
Исторические данные ADS-B
Поиск архивных рейсов ADS-B, воспроизведение треков, история воздушного судна по hex-коду или бортовому номеру и трафик аэропортов за 90–365 дней.