New rate limits now apply to all accounts.

Airlines

Look up an airline by ICAO airline code (3-letter designator, e.g. BAW for British Airways) or IATA airline code (2-letter passenger-facing code, e.g. BA). The response includes carrier name, telephony callsign (radio callsign used in ATC, e.g. SPEEDBIRD), country, activity status, and a SkyLink-hosted logo URL when available. Use this endpoint to enrich schedule rows and flight status cards.

Provide exactly one code (icao or iata). Sending both returns 400.

Important: Unknown codes return HTTP 200 with an empty array [] — not 404. Plan your UI for a missing-carrier placeholder, not an error state.

Request

Requirements

Auth
x-api-key on every request (direct subscription). Learn more →
GEThttps://data.skylinkapi.com/v3/airlines/search
ParameterTypeRequiredDefaultDescription
icaostringOne of icao / iata-ICAO airline code (3 letters), e.g. AAL
iatastringOne of icao / iata-IATA airline code (2 letters), e.g. AA

Response

The endpoint returns an array of matching airlines (usually one item for a valid code).

[
  {
    "id": 24,
    "name": "American Airlines",
    "alias": null,
    "iata": "AA",
    "icao": "AAL",
    "callsign": "AMERICAN",
    "country": "United States",
    "active": "Y",
    "logo": "https://media.skylinkapi.com/logos/AA.png"
  }
]

Airline object

FieldTypeRequiredNull?Description
idintegerYesNeverNumeric record identifier
namestringYesNeverAirline name
aliasstring | nullNoYesAlternate name when present
iatastring | nullNoYesIATA code (2 letters)
icaostring | nullNoYesICAO code (3 letters)
callsignstring | nullNoYesICAO telephony designator
countrystring | nullNoYesCountry name in English
activestringYesNeverY for active, N for inactive/defunct
logostring | nullNoYesSkyLink-hosted logo URL if available

Not-found semantic

HTTP statusBodyMeaning
200[]No matching carrier — show placeholder
400detail stringMissing code or both codes sent

Client types

"""Airline lookup response models for /airlines/search."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AirlineLookupRequest:    """Query input for GET /airlines/search - provide one code."""    icao: str | None = None    iata: str | None = None@dataclassclass AirlineRecord:    id: int    name: str    alias: str | None    iata: str | None    icao: str | None    callsign: str | None    country: str | None    active: str    logo: str | None@dataclassclass AirlineSummary:    """Shape returned by airline_summary() helper."""    icao: str | None    iata: str | None    name: str    callsign: str | None    country: str | None    is_active: bool    logo: str | None

Integration

import osimport timefrom dataclasses import dataclassimport requestsHEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3"CACHE: dict[str, tuple[dict, float]] = {}AIRLINE_TTL = 86_400  # 24 h@dataclassclass AirlineSummary:    icao: str | None    iata: str | None    name: str    callsign: str | None    country: str | None    is_active: bool    logo: str | Nonedef fetch_airline(*, icao: str | None = None, iata: str | None = None) -> dict | None:    if bool(icao) == bool(iata):        raise ValueError("Provide exactly one of icao or iata")    code = (icao or iata or "").upper()    key = f"airline:{icao or ''}:{iata or ''}"    cached = CACHE.get(key)    if cached and time.time() < cached[1]:        return cached[0]    params = {"icao": code} if icao else {"iata": code}    try:        r = requests.get(f"{BASE}/airlines/search", headers=HEADERS, params=params, timeout=(10, 15))    except requests.Timeout as exc:        raise RuntimeError(f"SkyLink timeout fetching airline {code}") from exc    if r.status_code == 404:        return None    r.raise_for_status()    items = r.json()    if not items:        return None    airline = items[0]    CACHE[key] = (airline, time.time() + AIRLINE_TTL)    return airlinedef airline_summary(icao: str) -> AirlineSummary | None:    airline = fetch_airline(icao=icao)    if not airline:        return None    return AirlineSummary(        icao=airline.get("icao"),        iata=airline.get("iata"),        name=airline["name"],        callsign=airline.get("callsign"),        country=airline.get("country"),        is_active=airline.get("active") == "Y",        logo=airline.get("logo"),    )if __name__ == "__main__":    import json    from dataclasses import asdict    summary = airline_summary("AAL")    print(json.dumps(asdict(summary), indent=2) if summary else "Airline not found")

Implementation notes

Inactive carriers. Filter out active: "N" unless your feature needs historical flights.

Logo fallback. Always handle logo: null with a local placeholder asset.

Error responses

400 - missing lookup code

{
  "detail": "Either ICAO or IATA code must be provided"
}
GET
/airlines/search
x-api-key<token>

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

In: header

Query Parameters

icao?string

3-letter ICAO airline code

Length3 <= length <= 3
iata?string

2-letter IATA airline code

Length2 <= length <= 2

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3/airlines/search"
[
  {
    "id": 1355,
    "name": "British Airways",
    "iata": "BA",
    "icao": "BAW",
    "callsign": "SPEEDBIRD",
    "country": "United Kingdom",
    "active": "Y",
    "logo": "https://media.skylinkapi.com/logos/BA.png"
  }
]
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Related: Schedules · Flight Status · Airports