NOTAMs
Rufen Sie aktuell gültige Notices to Air Missions (NOTAMs — maßgebliche betriebliche Hinweise, die einen Ort oder Luftraum betreffen) für jeden ICAO-Flughafencode weltweit ab. Verwenden Sie diesen Endpoint in Briefing-Workflows, Dispatch-Dashboards und Vorflug-Checklisten, wenn Sie betriebliche Hinweise benötigen, ohne einen eigenen NOTAM-Feed zu pflegen.
Wichtig: US-Ortskennungen mit drei Buchstaben (z. B. JFK) erhalten automatisch das Präfix K. Ein leeres notams-Array ist eine normale 200-Antwort, wenn keine aktiven Hinweise vorliegen — kein Fehler.
Jeder Eintrag enthält den vollständigen NOTAM-Text im ICAO-Standardformat (raw), gegebenenfalls ICAO- und nationale Kennungen, Beginn und Ende der Gültigkeit, die einzeln geparsten Items sowie optionale Metadaten zum Geltungsbereich. Filtern Sie clientseitig nach scope und type oder verwenden Sie exclude_qcode/exclude_scope, um NOTAM-Kategorien serverseitig auszuschließen und die Antwortgröße zu verringern, bevor sie bei Ihnen ankommt.
Routenplanung mit mehr Vorlauf? Standardmäßig werden nur NOTAMs zurückgegeben, die bereits in Kraft sind — entsprechend einem Live-AIS-Briefing. Ein NOTAM, das für ein künftiges Gültigkeitsdatum veröffentlicht wurde (z. B. wenn ein Flughafen eine Flugplanänderung zwei Wochen im Voraus bekannt gibt), erscheint erst, wenn dieses Datum erreicht ist. Übergeben Sie include_future=true, um diese bevorstehenden NOTAMs schon jetzt zu sehen. Sie sind mit status: "FUTURE" gekennzeichnet, sodass Sie sie von den heute aktiven unterscheiden können.
Anfrage
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →https://data.skylinkapi.com/v3.1/notams/{icao}exclude_qcode und exclude_scope filtern serverseitig; scope und type bleiben in der Antwort für zusätzliche clientseitige Filterung verfügbar.
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
icao | string | Ja | 4-stelliger ICAO-Flughafencode (z. B. KJFK, EGLL). Dreistellige US-Codes erhalten automatisch das Präfix K |
exclude_qcode | string (query) | Nein | Kommagetrennte ICAO-Q-Code-Präfixe, die serverseitig ausgeschlossen werden, z. B. QK (gesamte Themenkategorie — schließt jedes Checklisten-NOTAM QK* aus) oder QKKKK (nur exakt dieser Code) |
exclude_scope | string (query) | Nein | Kommagetrennte scope-Werte, die serverseitig ausgeschlossen werden: AERODROME, FIR |
include_future | boolean (query) | Nein | Gibt zusätzlich NOTAMs zurück, deren Gültigkeitsbeginn noch in der Zukunft liegt, gekennzeichnet mit status: "FUTURE". Der Standardwert false liefert nur aktuell aktive NOTAMs. Abgelaufene NOTAMs werden in keinem Fall zurückgegeben |
Beispiel für serverseitige Filterung: GET /notams/EGLL?exclude_qcode=QK&exclude_scope=FIR schließt monatliche Checklisten-NOTAMs (Q-Code-Thema QK*, z. B. QKKKK) sowie FIR-weite administrative bzw. En-Route-Hinweise aus und gibt nur flugplatzspezifische Einträge für EGLL zurück.
Antwort
{
"icao": "KJFK",
"notams": [
{
"raw": "A0373/26 NOTAMN\nQ) KZNY/QMXLC/IV/M/A/000/999/4038N07346W005\nA) KJFK\nB) 2603241038\nC) 2608311800\nE) TWY D HLDG PSN MARKINGS FOR RWY 13L/31R NORTH SIDE NOT STD",
"notam_id": "A0373/2026",
"notam_id_domestic": "03/0373",
"type": "N",
"location": "KJFK",
"effective": "202603241038",
"expiration": "202608311800",
"body": "TWY D HLDG PSN MARKINGS FOR RWY 13L/31R NORTH SIDE NOT STD",
"schedule": null,
"lower_limit": null,
"upper_limit": null,
"affected_fir": "KZNY",
"q_code": "QMXLC",
"qline": "KZNY/QMXLC/IV/M/A/000/999/4038N07346W005",
"scope": "AERODROME",
"status": "ACTIVE"
}
],
"total": 1
}raw ist ein mehrzeiliger String (durch \n getrennt), der den Hinweis genau so enthält, wie ihn ein AIS-Briefing veröffentlicht. Siehe ICAO-Format weiter unten.
Felder der obersten Ebene
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
icao | string | Ja | Aufgelöster ICAO-Code der Anfrage |
notams | array | Ja | Aktive NOTAM-Einträge (kann leer sein) |
total | integer | Nein | Anzahl der Elemente in notams (Standardwert 0) |
NOTAM-Element (notams[])
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
raw | string | Ja | Nie | Vollständiger NOTAM-Text im ICAO-Standardformat (mehrzeilig, durch \n getrennt) |
notam_id | string | Nein | Ja | ICAO-NOTAM-Kennung (z. B. 373/2026) |
notam_id_domestic | string | Nein | Ja | Nationale FAA-Kennung (z. B. 03/373) |
type | string | Nein | Ja | N (neu), R (Ersatz), C (Aufhebung) |
location | string | Nein | Ja | Kennung des betroffenen Orts |
effective | string | Nein | Ja | Beginn der Gültigkeit (UTC, Format des Anbieters) |
expiration | string | Nein | Ja | Ende der Gültigkeit (UTC, Format des Anbieters) |
body | string | Nein | Ja | NOTAM-Text (Item E) ohne Kopfzeile |
schedule | string | Nein | Ja | Aktivierungszeitplan (Item D), z. B. MON-FRI 0600-1800 |
lower_limit | string | Nein | Ja | Untere Höhengrenze (z. B. SFC, FL050) |
upper_limit | string | Nein | Ja | Obere Höhengrenze (z. B. FL195, UNL) |
affected_fir | string | Nein | Ja | FIR/ARTCC, unter der das NOTAM veröffentlicht wurde |
q_code | string | Nein | Ja | ICAO-NOTAM-Q-Code, sofern vorhanden — kann bei nationalen FAA-Hinweisen null sein |
qline | string | Nein | Ja | Vollständige ICAO-Q-Zeile, sofern geliefert |
scope | string | Nein | Ja | AERODROME (Flughafeneinrichtung) oder FIR (Luftraum auf der Strecke) |
status | string | Nein | Ja | ACTIVE (aktuell gültig) oder FUTURE (Gültigkeitsdatum noch nicht erreicht — nur vorhanden, wenn include_future=true angefragt wurde) |
raw ist immer vorhanden. Die meisten Metadatenfelder können null sein, je nachdem, wie die Upstream-Meldung kodiert wurde.
Wichtig: Hinweise mit scope: "AERODROME" betreffen den Flughafen direkt — zeigen Sie diese in Briefing-Panels gut sichtbar an. Hinweise mit scope: "FIR" sind Einträge zum Luftraum auf der Strecke, die ebenfalls in der Antwort erscheinen — zeigen Sie sie in einem separaten Abschnitt an oder klappen Sie sie standardmäßig ein. Behandeln Sie ebenso Hinweise mit status: "FUTURE" als bevorstehend und nicht als aktuell — die meisten Briefing-Oberflächen sollten sie getrennt von den heute aktiven Hinweisen auflisten.
ICAO-Format
raw enthält den Hinweis im ICAO-Standardlayout, das Piloten zu lesen gelernt haben — die Identifikationszeile, gefolgt von den mit Buchstaben gekennzeichneten Items. Stellen Sie ihn in einem Monospace-Block ohne erneuten Zeilenumbruch dar:
A0373/26 NOTAMN
Q) KZNY/QMXLC/IV/M/A/000/999/4038N07346W005
A) KJFK
B) 2603241038
C) 2608311800
E) TWY D HLDG PSN MARKINGS FOR RWY 13L/31R NORTH SIDE NOT STD| Item | Bedeutung | Zugehöriges Feld |
|---|---|---|
| Q) | Q-Zeile — FIR, Q-Code, Verkehrsart, Zweck, Geltungsbereich, Grenzen, Mittelpunkt/Radius | qline, q_code, affected_fir |
| A) | Ort, für den der Hinweis gilt | location |
| B) | Gültig ab (YYMMDDHHMM, UTC) | effective |
| C) | Gültig bis oder PERM | expiration |
| D) | Aktivierungszeitplan, wenn der Hinweis nur zeitweise gilt | schedule |
| E) | Der eigentliche Hinweistext | body |
| F) / G) | Untere und obere vertikale Grenze | lower_limit, upper_limit |
Hat die herausgebende Behörde eine eigene ICAO-Übersetzung veröffentlicht, gibt raw diese Byte für Byte wieder; andernfalls wird der Text aus den oben genannten geparsten Items zusammengesetzt.
Items erscheinen wie veröffentlicht. Ein Item ist nur vorhanden, wenn der Herausgeber es angegeben hat:
- Q) — internationale Hinweise enthalten eine vollständige Q-Zeile. Viele nationale US-Hinweise werden ganz ohne Q-Code veröffentlicht, daher fehlen bei ihnen
Q),q_codeundqline. - D) — nur bei Hinweisen mit Aktivierungszeitplan; die meisten gelten durchgehend zwischen B) und C).
- F)/G) — nur bei Luftraum- und Navigationshinweisen, die ein vertikales Band angeben.
Parsen Sie raw für die Anzeige und die einzelnen Felder für die Logik — setzen Sie nicht voraus, dass jedes Item vorhanden ist.
Client-Typen
"""NOTAM response models for GET /notams/{icao}."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass NotamEntry: raw: str notam_id: str | None = None notam_id_domestic: str | None = None type: str | None = None location: str | None = None effective: str | None = None expiration: str | None = None body: str | None = None schedule: str | None = None lower_limit: str | None = None upper_limit: str | None = None affected_fir: str | None = None q_code: str | None = None qline: str | None = None scope: str | None = None@dataclassclass NotamResponse: icao: str notams: list[NotamEntry] total: int = 0@dataclassclass NotamSummary: notam_id: str | None type: str | None body: str | None effective: str | None expiration: str | None scope: str | NoneIntegration
Fragen Sie aktive NOTAMs für einen Abflughafen regelmäßig ab und zeigen Sie in einer Briefing-Oberfläche eine kompakte Übersichtsliste an.
Das folgende Beispiel cacht NOTAM-Antworten 5 Minuten lang, da sich Hinweise in betrieblich aktiven Zeitfenstern häufig ändern können. Jede Anfrage verwendet ein Lese-Timeout von 30 s, um große NOTAM-Bestände an stark frequentierten Drehkreuzen zu bewältigen. Die Hilfsfunktion bildet Einträge für die Listendarstellung auf ein gekürztes NotamSummary ab und behält raw für Detailansichten bei.
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]] = {}NOTAM_TTL = 300 # 5 min@dataclassclass NotamSummary: notam_id: str | None type: str | None body: str | None effective: str | None expiration: str | None scope: str | Nonedef fetch_notams(icao: str) -> dict: icao = icao.upper().strip() if len(icao) == 3: icao = f"K{icao}" key = f"notams:{icao}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] try: r = requests.get(f"{BASE}/notams/{icao}", headers=HEADERS, timeout=(10, 30)) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching NOTAMs for {icao}") from exc r.raise_for_status() data = r.json() CACHE[key] = (data, time.time() + NOTAM_TTL) return datadef notam_summaries(icao: str) -> list[NotamSummary]: data = fetch_notams(icao) return [ NotamSummary( notam_id=item.get("notam_id"), type=item.get("type"), body=item.get("body"), effective=item.get("effective"), expiration=item.get("expiration"), scope=item.get("scope"), ) for item in data.get("notams", []) ]if __name__ == "__main__": import json summaries = notam_summaries("KJFK") print(json.dumps(summaries[:5], indent=2, default=str))Hinweise zur Implementierung
Caching mit kurzer TTL. Verwenden Sie im Produktivbetrieb Cache-Zeitfenster von 2–5 Minuten; umgehen Sie den Cache innerhalb der letzten Stunde vor dem Abflug bei Workflows für die Allgemeine Luftfahrt und Charterflüge.
Umgang mit Aufhebungen. Einträge mit type: "C" heben ein früheres NOTAM auf — verfolgen Sie sie über notam_id, wenn Sie einen lokalen Zustand führen.
Präfix für US-Codes. Akzeptieren Sie JFK von Nutzern; die API löst den Code zu KJFK auf.
Routenplanung über den heutigen Tag hinaus. Für Flugplanungstools, die einen Flughafen Tage oder Wochen im Voraus prüfen, fragen Sie ?include_future=true an und verzweigen Sie anhand von status — zeigen Sie ACTIVE-Hinweise als aktuelle Bedingungen und FUTURE-Hinweise als bevorstehende Änderungen an, die die Besatzung vor dem Flug kennen sollte.
Fehlerantworten
Gemeinsame Plattformfehler: Fehlerbehandlung. Endpoint-spezifisch:
422 — ungültige Länge des ICAO-Codes
{
"detail": [
{
"type": "string_too_short",
"loc": ["path", "icao"],
"msg": "String should have at least 4 characters"
}
]
}Wird zurückgegeben, wenn der Pfadparameter kürzer als vier Zeichen ist und nicht normalisiert werden kann.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
4-letter ICAO airport code (e.g. KJFK, EGLL)
4 <= length <= 4Query Parameters
Comma-separated ICAO Q-code prefixes to exclude, e.g. QKKKK (exact code) or QK (whole subject category — drops every QK* checklist NOTAM).
Comma-separated scopes to exclude: AERODROME, FIR. exclude_scope=FIR drops en-route/FIR-wide administrative notices.
Also include NOTAMs whose effective start date is still in the future (not yet active), tagged with status=FUTURE. Default false returns only currently-active NOTAMs, matching a live AIS briefing.
falseResponse Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/notams/KJFK"{
"icao": "OMDB",
"notams": [
{
"raw": "A2161/26 NOTAMN\nQ) OMAE/QMRLC/IV/NBO/A/000/999/2515N05521E005\nA) OMDB B) 2607162130 C) 2607302215\nE) RWY 12L/30R CLSD",
"notam_id": "A2161/2026",
"notam_id_domestic": "07/2161",
"type": "N",
"location": "OMDB",
"effective": "202607162130",
"expiration": "202607302215",
"body": "RWY 12L/30R CLSD",
"qline": "OMAE/QMRLC/IV/NBO/A/000/999/2515N05521E005",
"scope": "AERODROME"
}
],
"total": 1
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Siehe auch: Flugbriefing · FAA-Verspätungen · METAR