Save up to 17% with yearly billing

See pricing

Позывной → маршрут

Сопоставьте текущий позывной (позывной рейса, транслируемый по ADS-B, например BAW178) с аэропортами вылета и прибытия. Если в SkyLink есть точное совпадение позывного, ответ содержит departure_icao и arrival_icao с confidence: "high". Если точного позывного нет, API возвращает резервный список маршрутов на уровне авиакомпании в массиве routes (та же структура, что и у маршрутов аэропорта).

Требования

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

Запрос

GEThttps://data.skylinkapi.com/v3.1/routes/callsign/{callsign}
ПараметрТипОбязательныйОписание
callsignstringДаПараметр пути с позывным рейса — код авиакомпании и числовой суффикс, например BAW178

Ответ

Пример точного совпадения:

{
  "callsign": "BAW178",
  "callsign_prefix": "BAW",
  "airline_code": "BAW",
  "departure_icao": "KJFK",
  "arrival_icao": "EGLL",
  "airports": ["KJFK", "EGLL"],
  "confidence": "high",
  "source": "vrs"
}

Пример резервного ответа (строки с точным позывным нет — возвращаются маршруты на уровне авиакомпании):

{
  "callsign": "BAW999",
  "callsign_prefix": "BAW",
  "airline_code": "BAW",
  "departure_icao": null,
  "arrival_icao": null,
  "airports": null,
  "confidence": "low",
  "source": "vrs",
  "routes": [
    {
      "departure": "LHR",
      "arrival": "JFK",
      "airlines": ["British Airways"],
      "km": 5555,
      "duration_min": 430
    }
  ]
}
ПолеТипОбязательныйNull?Описание
callsignstringДаНикогдаЗапрошенный позывной
callsign_prefixstringДаНикогдаПрефикс авиакомпании ICAO, извлечённый из позывного
airline_codestringДаНикогдаОпределённый код ICAO авиакомпании
departure_icaostringПри точном совпаденииДа (резервный ответ)Код ICAO аэропорта вылета, если известен
arrival_icaostringПри точном совпаденииДа (резервный ответ)Код ICAO аэропорта прибытия, если известен
airportsarrayПри точном совпаденииДа (резервный ответ)Упорядоченные коды ICAO [departure, arrival]
confidencestringДаНикогдаКачество совпадения — high при точном совпадении позывного
sourcestringДаНикогдаНепрозрачный идентификатор источника данных о маршрутах от API
routesarrayВ резервном ответеДа (точное совпадение)Список маршрутов на уровне авиакомпании, если строки с точным позывным нет, — та же структура элементов, что и у маршрутов аэропорта

Важно: считайте confidence: "high" надёжной парой городов с departure_icao/arrival_icao. Если присутствует только routes[], покажите первый маршрут как предположение и дайте пользователю его подтвердить — не считайте, что первая строка соответствует текущему рейсу.

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

"""Route detection response models for /routes/* endpoints."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass RoutePair:    departure: str    arrival: str    airlines: list[str]    km: int    duration_min: int@dataclassclass CallsignRouteResponse:    """Exact callsign match from GET /routes/callsign/{callsign}."""    callsign: str    callsign_prefix: str    airline_code: str    departure_icao: str    arrival_icao: str    airports: list[str]    confidence: str    source: str    routes: list[RoutePair] | None = None@dataclassclass AirportRoutesResponse:    code: str    direction: str    count: int    routes: list[RoutePair]@dataclassclass RoutePairsResponse:    count: int    routes: list[RoutePair]@dataclassclass RouteGuess:    """Shape returned by route_guess() helper."""    callsign: str    departure: str | None    arrival: str | None    confidence: str    source: str

Интеграция

Определяйте вероятные аэропорты вылета и прибытия по позывному ADS-B в реальном времени для слоёв на карте и карточек рейсов.

Пример ниже кэширует результаты поиска по позывному на 24 часа, поскольку назначенные маршруты меняются редко. Каждый запрос использует явные таймауты (10 s на подключение / 15 s на чтение). Вспомогательная функция приводит ответы с точным совпадением и резервные ответы к единому объекту RouteGuess для кода интерфейса.

import osimport timefrom dataclasses import dataclassimport requestsHEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}ROUTE_TTL = 86_400  # 24 h@dataclassclass RouteGuess:    callsign: str    departure: str | None    arrival: str | None    confidence: str    source: strdef fetch_route_by_callsign(callsign: str) -> dict:    callsign = callsign.upper().strip()    key = f"route:callsign:{callsign}"    cached = CACHE.get(key)    if cached and time.time() < cached[1]:        return cached[0]    try:        r = requests.get(            f"{BASE}/routes/callsign/{callsign}",            headers=HEADERS,            timeout=(10, 15),        )    except requests.Timeout as exc:        raise RuntimeError(f"SkyLink timeout resolving route for {callsign}") from exc    r.raise_for_status()    data = r.json()    CACHE[key] = (data, time.time() + ROUTE_TTL)    return datadef route_guess(callsign: str) -> RouteGuess | None:    data = fetch_route_by_callsign(callsign)    dep = data.get("departure_icao")    arr = data.get("arrival_icao")    if not dep and not arr:        routes = data.get("routes") or []        if not routes:            return None        top = routes[0]        dep, arr = top.get("departure"), top.get("arrival")    return RouteGuess(        callsign=data.get("callsign", callsign),        departure=dep,        arrival=arr,        confidence=data.get("confidence", "unknown"),        source=data.get("source", "vrs"),    )if __name__ == "__main__":    import json    from dataclasses import asdict    guess = route_guess("BAW178")    print(json.dumps(asdict(guess), indent=2) if guess else "Route not found")

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

Нормализация кодов. Переводите позывные в верхний регистр перед поиском (baw178 → BAW178). Удаляйте пробельные символы из данных потоков ADS-B.

Смешение кодов аэропортов. В зависимости от исходной строки маршруты могут использовать коды IATA или ICAO — нормализуйте их через Аэропорты перед объединением с другими наборами данных.

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

Ошибка валидации 422: см. раздел «Маршруты».

GET
/routes/callsign/{callsign}
x-api-key<token>

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

In: header

Path Parameters

callsign*Callsign

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/routes/callsign/UAL100"
{
  "callsign": "RYR86UK",
  "callsign_prefix": "RYR",
  "airline_code": "RYR",
  "airline_iata": "FR",
  "departure_icao": "LHBP",
  "departure_iata": "BUD",
  "arrival_icao": "LIME",
  "arrival_iata": "BGY",
  "airports": [
    "LHBP",
    "LIME"
  ],
  "confidence": "high",
  "source": "vrs"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}