Flughäfen
Rufen Sie vollständige Flughafendetails per ICAO (vierstellige Ortskennung, weltweit eindeutig) oder IATA (dreistelliger Passagiercode — nicht immer eindeutig) ab. Die Antwort enthält Start- und Landebahnen, Funkfrequenzen, Funknavigationsanlagen in der Nähe (VOR, NDB, ILS und ähnliche Funknavigationshilfen) sowie aufgelöste Länder- und Regionsobjekte. Rufen Sie diesen Endpoint auf, nachdem der Nutzer einen Flughafen aus den Suchergebnissen ausgewählt hat, oder wenn Sie bereits einen Code haben und Anlagendaten für Briefing-Ansichten, Bahnanalysen oder Kartenmarkierungen benötigen.
Geben Sie als Query-Parameter entweder icao oder iata an — niemals beide.
Anfrage
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →https://data.skylinkapi.com/v3.1/airports/search| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
icao | string | Eines von icao / iata | - | Vierstelliger ICAO-Code, z. B. KJFK |
iata | string | Eines von icao / iata | - | Dreistelliger IATA-Code, z. B. JFK |
Antwort
Die API liefert ein einzelnes Flughafenobjekt (nicht in eine Liste eingebettet).
{
"id": 3622,
"ident": "KJFK",
"type": "large_airport",
"name": "John F. Kennedy International Airport",
"latitude_deg": 40.639447,
"longitude_deg": -73.779317,
"elevation_ft": 13.0,
"municipality": "New York",
"iso_country": "US",
"iso_region": "US-NY",
"icao_code": "KJFK",
"iata_code": "JFK",
"scheduled_service": "yes",
"search_code": "KJFK",
"search_type": "ICAO",
"runways": [
{
"length_ft": 12079.0,
"width_ft": 200.0,
"surface": "PEM",
"le_ident": "04L",
"he_ident": "22R"
}
],
"frequencies": [
{
"type": "TWR",
"description": "JFK TOWER",
"frequency_mhz": 119.1
}
],
"navaids": [
{
"ident": "JFK",
"name": "Kennedy",
"type": "VOR-DME",
"frequency_khz": 115900,
"associated_airport": "KJFK"
}
],
"country": {
"code": "US",
"name": "United States"
},
"region": {
"code": "US-NY",
"name": "New York",
"iso_country": "US"
}
}Felder der obersten Ebene
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
id | integer | Ja | Nie | Numerische Datensatzkennung |
ident | string | Ja | Nie | Primäre Kennung (meist ICAO) |
type | string | Ja | Nie | Flughafenklasse — siehe Tabelle unten |
name | string | Ja | Nie | Offizieller Flughafenname |
latitude_deg | number | Ja | Nie | Breitengrad (WGS-84) |
longitude_deg | number | Ja | Nie | Längengrad (WGS-84) |
elevation_ft | number | null | Nein | Ja | Flugplatzhöhe in Fuß MSL (über mittlerem Meeresspiegel) |
municipality | string | null | Nein | Ja | Angebundene Stadt oder Gemeinde |
iso_country | string | null | Nein | Ja | Ländercode nach ISO 3166-1 alpha-2 |
iso_region | string | null | Nein | Ja | ISO-Regionscode, z. B. US-NY |
icao_code | string | null | Nein | Ja | ICAO-Ortskennung |
iata_code | string | null | Nein | Ja | IATA-Ortscode |
scheduled_service | string | null | Nein | Ja | yes / no, sofern bekannt |
search_code | string | null | Nein | Ja | Echo des abgefragten Codes |
search_type | string | null | Nein | Ja | ICAO oder IATA |
runways | array | Ja | Nie | Datensätze der Start- und Landebahnen (kann [] sein) |
frequencies | array | Ja | Nie | Funkfrequenzen (kann [] sein) |
navaids | array | Ja | Nie | Funknavigationsanlagen in der Nähe (kann [] sein) |
country | object | null | Nein | Ja | Aufgelöste Ländermetadaten |
region | object | null | Nein | Ja | Aufgelöste Regionsmetadaten |
Werte von type (Flughafen)
| Wert | Bedeutung |
|---|---|
large_airport | Großer Verkehrsflughafen |
medium_airport | Regionaler Verkehrsflughafen |
small_airport | Allgemeine Luftfahrt |
heliport | Hubschrauberlandeplatz |
seaplane_base | Wasserflugzeugbasis |
closed | Geschlossene Anlage (weiterhin in der Datenbank) |
balloonport | Ballonstartplatz |
Objekt für Start- und Landebahnen (runways[])
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
length_ft | number | null | Nein | Ja | Länge der Bahn in Fuß |
width_ft | number | null | Nein | Ja | Breite der Bahn in Fuß |
surface | string | null | Nein | Ja | Belagscode — ASP (Asphalt), PEM (befestigte Oberfläche), GRS (Schotter) usw. |
lighted | integer | null | Nein | Ja | 1, wenn befeuert |
closed | integer | null | Nein | Ja | 1, wenn gesperrt |
le_ident | string | null | Nein | Ja | Bezeichnung des niedrigen Bahnendes |
he_ident | string | null | Nein | Ja | Bezeichnung des hohen Bahnendes |
Frequenzobjekt (frequencies[])
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
type | string | Ja | Diensttyp — ATIS (automatische Wetterdurchsage), GND (Rollkontrolle), TWR (Turm), APP (Anflug), DEP (Abflug) usw. |
description | string | null | Nein | Lesbare Bezeichnung |
frequency_mhz | number | Ja | Frequenz in MHz |
Navaid-Objekt (navaids[])
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
ident | string | Ja | Nie | Kennung der Funknavigationsanlage |
name | string | Ja | Nie | Name der Funknavigationsanlage |
type | string | Ja | Nie | z. B. VOR, VOR-DME, NDB |
frequency_khz | integer | null | Nein | Ja | Frequenz in kHz |
latitude_deg | number | Ja | Nie | Breitengrad der Anlage |
longitude_deg | number | Ja | Nie | Längengrad der Anlage |
associated_airport | string | null | Nein | Ja | ICAO des zugeordneten Flughafens, sofern bekannt |
Client-Typen
"""Airport lookup response types - matches airports.mdx field tables."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AirportLookupRequest: """Query input for GET /airports/search - provide icao or iata, not both.""" icao: str | None = None iata: str | None = None@dataclassclass Runway: id: int airport_ident: str length_ft: float | None width_ft: float | None surface: str | None lighted: int | None closed: int | None le_ident: str | None he_ident: str | None@dataclassclass Frequency: id: int type: str description: str | None frequency_mhz: float airport_ref: int@dataclassclass Navaid: ident: str name: str type: str frequency_khz: int | None latitude_deg: float longitude_deg: float associated_airport: str | None@dataclassclass CountryRef: code: str name: str@dataclassclass RegionRef: code: str name: str iso_country: str@dataclassclass AirportDetail: id: int ident: str type: str name: str latitude_deg: float longitude_deg: float elevation_ft: float | None municipality: str | None iso_country: str | None icao_code: str | None iata_code: str | None scheduled_service: str | None runways: list[Runway] frequencies: list[Frequency] navaids: list[Navaid] country: CountryRef | None = None region: RegionRef | None = None search_code: str | None = None search_type: str | None = None@dataclassclass AirportSummary: """Shape returned by airport_summary() in the lookup example.""" icao: str | None iata: str | None name: str municipality: str | None country: str | None latitude: float longitude: float elevation_ft: float | None airport_type: str longest_runway_ft: int | NoneIntegration
Lösen Sie einen Flughafen per ICAO auf und geben Sie UI-fertige Zusammenfassungsfelder einschließlich der längsten Start- und Landebahn zurück.
Das folgende Beispiel speichert jede Abfrage 24 Stunden lang im Cache, da sich Flughafenmetadaten selten ändern. Jeder HTTP-Aufruf verwendet Verbindungs- und Lese-Timeouts, damit ein langsamer Upstream Ihre Briefing-UI nicht blockieren kann.
import osimport timefrom dataclasses import dataclassfrom typing import Literalimport requests# AirportSummary - helper return type. Full wire types are in the Client types section.AirportType = Literal[ "large_airport", "medium_airport", "small_airport", "heliport", "seaplane_base", "closed", "balloonport",]HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}AIRPORT_TTL = 86_400 # 24 h - OurAirports metadata changes slowly@dataclassclass AirportSummary: icao: str | None iata: str | None name: str municipality: str | None country: str | None latitude: float longitude: float elevation_ft: float | None airport_type: str longest_runway_ft: int | Nonedef fetch_airport(*, 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 "" cache_key = f"airport:{icao or ''}:{iata or ''}" cached = CACHE.get(cache_key) if cached and time.time() < cached[1]: return cached[0] params: dict[str, str] = {} if icao: params["icao"] = icao else: params["iata"] = iata or "" try: r = requests.get( f"{BASE}/airports/search", headers=HEADERS, params=params, timeout=(10, 20), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching airport {code}") from exc if r.status_code == 404: return None r.raise_for_status() data = r.json() CACHE[cache_key] = (data, time.time() + AIRPORT_TTL) return datadef airport_summary(icao: str) -> AirportSummary | None: airport = fetch_airport(icao=icao) if not airport: return None runways = airport.get("runways") or [] longest = max((int(rw.get("length_ft") or 0) for rw in runways), default=0) country = airport.get("country") or {} return AirportSummary( icao=airport.get("icao_code"), iata=airport.get("iata_code"), name=airport["name"], municipality=airport.get("municipality"), country=country.get("code") if isinstance(country, dict) else airport.get("iso_country"), latitude=airport["latitude_deg"], longitude=airport["longitude_deg"], elevation_ft=airport.get("elevation_ft"), airport_type=airport["type"], longest_runway_ft=longest or None, )if __name__ == "__main__": import json from dataclasses import asdict summary = airport_summary("KJFK") print(json.dumps(asdict(summary), indent=2) if summary else "Airport not found")Hinweise zur Implementierung
Unvollständige Daten. GA-Plätze und Hubschrauberlandeplätze haben oft keine Angaben zu Start- und Landebahnen oder Frequenzen. Prüfen Sie die Array-Längen, bevor Sie Bahntabellen rendern.
Nachgelagerte Daten. Nachdem Sie hier die ICAO aufgelöst haben, fahren Sie mit demselben Code mit METAR, TAF, NOTAMs oder Flugplatzkarten fort.
Navaid-Overlays. Die eingebetteten Funknavigationsanlagen decken die Umgebung des Flughafens ab. Für Bbox- oder Typfilter über eine ganze Region verwenden Sie Funknavigationsanlagen.
ICAO vs. IATA und geschlossene FlughäfenAbschnitt aufklappen
ICAO vs. IATA. Bevorzugen Sie ICAO für die interne Speicherung — der Code ist weltweit eindeutig. Die IATA-Abfrage ist praktisch für passagierorientierte Codes (JFK → vollständiger Datensatz), kann aber regionsübergreifend kollidieren.
Geschlossene Flughäfen. Datensätze mit type: "closed" bleiben zu historischen Referenzzwecken in der Datenbank. Filtern Sie sie gegebenenfalls aus Auswahllisten für aktive Flughäfen heraus.
Fehlerantworten
Nur Endpoint-spezifische Fehler. Zu Authentifizierung, Validierung, Rate Limits und Serverfehlern siehe Fehlerbehandlung.
404 - Flughafen nicht gefunden
{
"detail": "Airport not found for ICAO code: XXXX"
}Der Code existiert nicht in der SkyLink-Flughafendatenbank.
400 - beide Codes angegeben
{
"detail": "Provide either ICAO or IATA code, not both"
}400 - kein Code angegeben
{
"detail": "Either ICAO or IATA code must be provided"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
4-letter ICAO airport code (e.g., KJFK, EGLL)
3-letter IATA airport code (e.g., JFK, LHR)
Any airport identifier as returned by the /airports/search/location, /airports/search/text or /airports/search/ip endpoints' ident field — including OurAirports pseudo-codes for airports without a real ICAO code (e.g., 'GB-0888')
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/airports/search"{
"id": 3682,
"ident": "KJFK",
"type": "large_airport",
"name": "John F Kennedy International Airport",
"latitude_deg": 40.63980103,
"longitude_deg": -73.77890015,
"elevation_ft": 13,
"continent": "NA",
"iso_country": "US",
"iso_region": "US-NY",
"municipality": "New York",
"scheduled_service": "yes",
"gps_code": "KJFK",
"iata_code": "JFK",
"local_code": "JFK",
"runways": [
{
"length_ft": 14511,
"width_ft": 150,
"surface": "ASP",
"lighted": 1,
"closed": 0,
"le_ident": "04L",
"he_ident": "22R"
}
],
"frequencies": [
{
"type": "TWR",
"description": "JFK TWR",
"frequency_mhz": 119.1
}
],
"navaids": [
{
"ident": "JFK",
"name": "Kennedy",
"type": "VOR-DME",
"frequency_khz": "115900"
}
],
"search_code": "KJFK",
"search_type": "ICAO"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Siehe auch: Flughafensuche · METAR · NOTAMs