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
x-api-key on every request (direct subscription). Learn more →https://data.skylinkapi.com/v3/airlines/search| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
icao | string | One of icao / iata | - | ICAO airline code (3 letters), e.g. AAL |
iata | string | One 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
| Field | Type | Required | Null? | Description |
|---|---|---|---|---|
id | integer | Yes | Never | Numeric record identifier |
name | string | Yes | Never | Airline name |
alias | string | null | No | Yes | Alternate name when present |
iata | string | null | No | Yes | IATA code (2 letters) |
icao | string | null | No | Yes | ICAO code (3 letters) |
callsign | string | null | No | Yes | ICAO telephony designator |
country | string | null | No | Yes | Country name in English |
active | string | Yes | Never | Y for active, N for inactive/defunct |
logo | string | null | No | Yes | SkyLink-hosted logo URL if available |
Not-found semantic
| HTTP status | Body | Meaning |
|---|---|---|
200 | [] | No matching carrier — show placeholder |
400 | detail string | Missing 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 | NoneIntegration
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"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
3-letter ICAO airline code
3 <= length <= 32-letter IATA airline code
2 <= length <= 2Response 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