Save up to 17% with yearly billing

See pricing

AIRMET/SIGMET

AIRMETs und SIGMETs sind offizielle Flugwetterwarnungen für gefährliche Bedingungen auf der Strecke. AIRMET (Airmen's Meteorological Information) umfasst mäßige Gefahren; SIGMET (Significant Meteorological advisory) umfasst Ereignisse höherer Intensität. Dieser Endpoint liefert jede aktive Warnmeldung, deren betroffenes Gebiet Ihren Begrenzungsrahmen (Bounding Box) schneidet — verwenden Sie ihn für Overlays mit Gefahren auf der Strecke in Karten und für Briefings vor dem Flug. Filtern Sie mit type=airmet oder type=sigmet, wenn Sie nur eine Intensitätsklasse benötigen. Leere Ergebnisse (keine aktiven Warnmeldungen) sind normal und bei gutem Wetter sehr häufig.

Anfrage

Voraussetzungen

Auth
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →

Senden Sie eine GET-Anfrage mit einem geografischen Begrenzungsrahmen und einem optionalen Typfilter.

GEThttps://data.skylinkapi.com/v3.1/weather/airsigmet
ParameterTypErforderlichStandardBeschreibung
bboxstringJa-Begrenzungsrahmen als lat1,lon1,lat2,lon2 — südwestliche Ecke zuerst. Beispiel: 38,-90,45,-80 (Korridor im Mittleren Westen)
typestringNeinallFilter: airmet oder sigmet. Weglassen, um beide zu erhalten

Tipps zum Begrenzungsrahmen. Halten Sie die Rahmen in Routengröße — sehr große bboxes können die vorgelagerte Verarbeitung belasten. Ein leeres reports-Array bedeutet, dass keine aktiven Warnmeldungen das Gebiet schneiden (häufig bei schönem Wetter).

Antwort

{
  "bbox": "38.0,-90.0,45.0,-80.0",
  "filter_type": "airmet",
  "reports": [
    {
      "raw": "WAUS46 KKCI 151445 WA6S AIRMET SIERRA ...",
      "bulletin_type": "AIRMET",
      "report_type": "AIRMET",
      "country": "US",
      "issuer": "KKCI",
      "area": "S",
      "region": "KZAU",
      "start_time": "2025-01-15T14:45:00Z",
      "end_time": "2025-01-15T20:45:00Z",
      "body": "AIRMET IFR...",
      "observation": {
        "type": "IFR",
        "intensity": null,
        "floor": "SFC",
        "ceiling": "FL180",
        "coords": [
          { "lat": 41.5, "lon": -87.5 },
          { "lat": 42.0, "lon": -86.0 }
        ],
        "movement": null
      },
      "forecast": null
    }
  ],
  "total": 1
}

Wenn keine Warnmeldungen die bbox schneiden, liefert die API "reports": [] und "total": 0.

FeldTypErforderlichBeschreibung
bboxstringJaEcho des abgefragten Begrenzungsrahmens
reportsarrayJaPassende Warnmeldungen (kann leer sein)
totalintegerJaAnzahl der Einträge in reports
filter_typestring | nullJa (Schlüssel immer vorhanden)Angewendeter Filter: "airmet", "sigmet" oder null ohne Filter

Meldung

JSON-Pfad: reports[]. Nur raw ist garantiert nicht null. Alle dekodierten Felder sind null, wenn sie nicht aus der Warnmeldung geparst wurden.

FeldTypErforderlichNull?Beschreibung
rawstringJaNieVollständiger Text der Warnmeldung wie herausgegeben
bulletin_typestring | nullJa (Schlüssel immer vorhanden)Ja"AIRMET" oder "SIGMET"
report_typestring | nullJa (Schlüssel immer vorhanden)JaArt der Warnmeldung, z. B. "AIRMET", "SIGMET", "CONVECTIVE SIGMET"
countrystring | nullJa (Schlüssel immer vorhanden)JaLändercode des herausgebenden Landes, z. B. "US"
issuerstring | nullJa (Schlüssel immer vorhanden)JaKennung der herausgebenden Stelle, z. B. "KKCI"
areastring | nullJa (Schlüssel immer vorhanden)JaKennung des betroffenen Gebiets, z. B. "S" (Sierra)
regionstring | nullJa (Schlüssel immer vorhanden)JaFluginformationsgebiet (FIR) oder Regionscode, z. B. "KZAU"
start_timestring | nullJa (Schlüssel immer vorhanden)JaGültig ab (UTC, ISO 8601)
end_timestring | nullJa (Schlüssel immer vorhanden)JaGültig bis (UTC, ISO 8601)
bodystring | nullJa (Schlüssel immer vorhanden)JaMenschenlesbarer Text der Warnmeldung
observationobject | nullJa (Schlüssel immer vorhanden)JaDetails zur beobachteten Gefahr — siehe Beobachtung und Vorhersage
forecastobject | nullJa (Schlüssel immer vorhanden)JaDetails zur vorhergesagten Gefahr — gleiche Struktur wie observation. null, wenn nicht vorhanden

Objektschemas und Nullbarkeit

Jeder Schlüssel in einem Meldungsobjekt ist immer vorhanden — nichts wird weggelassen, wenn ein Abschnitt nicht dekodiert wird. Die Objekte observation und forecast selbst können null sein, aber wenn sie vorhanden sind, ist jeder Schlüssel darin immer enthalten.

SituationWas Sie erhaltenNicht dies
Kein Gefahrenpolygon dekodiertobservation.coords: []null, fehlender Schlüssel
Kein Vorhersageabschnittforecast: nullfehlender Schlüssel
Kein Beobachtungsabschnittobservation: nullfehlender Schlüssel
Warnmeldung ohne Höhenuntergrenzeobservation.floor: nullfehlender Schlüssel oder "0"
Keine Angaben zur Verlagerungobservation.movement: null{}, fehlender Schlüssel
Keine aktiven Warnmeldungenreports: [], total: 0null, HTTP-Fehler
Anfrage ohne Filterfilter_type: nullfehlender Schlüssel

AIRMET-Familien

FamilieAbgedeckte Gefahren
SIERRAIFR-Bedingungen, Verdeckung von Bergen
TANGOMäßige Turbulenz, starke Bodenwinde
ZULUMäßige Vereisung, Nullgradgrenzen

SIGMETs umfassen Gefahren höherer Intensität auf der Strecke. Konvektive SIGMETs werden für schwere Gewitter, Hagel und Tornados über den zusammenhängenden USA herausgegeben.

Schemas für Beobachtung und VorhersageAbschnitt aufklappen

JSON-Pfad: reports[].observation und reports[].forecast (gleiche Struktur). Vorhanden, wenn aus der Warnmeldung dekodiert; andernfalls null.

FeldTypErforderlichNull?Beschreibung
typestring | nullJa (Schlüssel immer vorhanden)JaArt des Phänomens — IFR (Instrumentenbedingungen), TURB (Turbulenz), ICE (Vereisung), VA (Vulkanasche)
intensitystring | nullJa (Schlüssel immer vorhanden)JaIntensitätskennung, z. B. "MOD", "SEV"
floorstring | nullJa (Schlüssel immer vorhanden)JaUntere Höhengrenze, z. B. "SFC", "FL100"
ceilingstring | nullJa (Schlüssel immer vorhanden)JaObere Höhengrenze, z. B. "FL180", "FL450"
coordsarrayJaNiePolygoneckpunkte für die Kartendarstellung. [], wenn keine Begrenzung dekodiert wurde
coords[].latnumberJa (pro Element)NieBreitengrad des Eckpunkts
coords[].lonnumberJa (pro Element)NieLängengrad des Eckpunkts
movementobject | nullJa (Schlüssel immer vorhanden)JaVerlagerung der Warnmeldung — Strings direction und speed, falls vorhanden; null, wenn stationär oder nicht gemeldet

Client-Typen

"""AIRMET/SIGMET response types - matches airsigmet field tables."""from dataclasses import dataclass, field@dataclassclass AirSigmetCoord:    lat: float    lon: float@dataclassclass AirSigmetObservation:    type: str | None = None    intensity: str | None = None    floor: str | None = None    ceiling: str | None = None    coords: list[AirSigmetCoord] = field(default_factory=list)    movement: dict | None = None@dataclassclass AirSigmetReport:    raw: str    bulletin_type: str | None = None    report_type: str | None = None    start_time: str | None = None    end_time: str | None = None    body: str | None = None    observation: AirSigmetObservation | None = None    forecast: AirSigmetObservation | None = None@dataclassclass AirSigmetResponse:    bbox: str    reports: list[AirSigmetReport]    total: int    filter_type: str | None = None

Integration

Rufen Sie aktive Warnmeldungen für die bbox einer Route ab und erstellen Sie Polygon-Overlays.

Das Beispiel fragt die bbox eines Korridors ab, speichert das Ergebnis 15 Minuten im Cache (Warnmeldungen werden nach einem festen Zeitplan aktualisiert) und extrahiert Polygone der Warnmeldungen mit ihren Gültigkeitszeitfenstern für die Kartendarstellung. Leere Ergebnisse sind bei VFR-Bedingungen zu erwarten — zeigen Sie „keine aktiven Warnmeldungen“ an, keinen Fehler.

import osimport timeimport 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]] = {}AIRSIG_TTL = 900  # 15 mindef fetch_airsigmets(bbox: str, advisory_type: str | None = None) -> dict:    cache_key = f"airsig:{bbox}:{advisory_type or 'all'}"    cached = CACHE.get(cache_key)    if cached and time.time() < cached[1]:        return cached[0]    params: dict[str, str] = {"bbox": bbox}    if advisory_type:        params["type"] = advisory_type    r = requests.get(        f"{BASE}/weather/airsigmet",        headers=HEADERS,        params=params,        timeout=(10, 25),    )    r.raise_for_status()    data = r.json()    CACHE[cache_key] = (data, time.time() + AIRSIG_TTL)    return datadef active_polygons(bbox: str) -> list[list[tuple[float, float]]]:    """Return coord rings for map overlays (may be empty)."""    payload = fetch_airsigmets(bbox, advisory_type="airmet")    rings: list[list[tuple[float, float]]] = []    for report in payload.get("reports", []):        obs = report.get("observation") or {}        coords = obs.get("coords") or []        if coords:            rings.append([(c["lat"], c["lon"]) for c in coords])    return ringsif __name__ == "__main__":    import json    bbox = "-74.5,40.3,-73.5,41.0"    payload = fetch_airsigmets(bbox, "airmet")    print(json.dumps(payload, indent=2, default=str)[:3000])

Hinweise zur Implementierung

Leer ist normal. Routen bei schönem Wetter liefern oft total: 0. Ihre Kartenebene kann Overlays ausblenden, wenn das Ergebnis leer ist.

Gültigkeitszeitfenster. Verwenden Sie start_time und end_time, um Polygone clientseitig ablaufen zu lassen. Zeigen Sie Warnmeldungen nach end_time nicht mehr an, auch wenn sie im Cache liegen. Ist end_time gleich null, behandeln Sie die Warnmeldung bis zur nächsten Abfrage als aktiv.

Polygondarstellung. Zeichnen Sie observation.coords (oder forecast.coords) als geschlossene Polygone. Wenn coords gleich [] ist, zeigen Sie den Text aus body in einer Listenansicht statt in einem Karten-Overlay an. Schließen Sie den Polygonring immer (letzter Eckpunkt → erster Eckpunkt), bevor Sie ihn an eine Kartenbibliothek übergeben.

Gezielt filtern. Oberflächen für Briefings vor dem Flug rufen häufig type=airmet für die Flugdisposition und type=sigmet für Overlays höherer Intensität ab. Lassen Sie type weg, wenn Sie das Gesamtbild benötigen.

Große bboxes. Bemessen Sie die Abfrage auf Ihre Route plus einen moderaten Puffer (etwa 1–2° Breite/Länge) und teilen Sie lange Routen bei Bedarf in Segmente auf.

Fehlerantworten

Nur endpoint-spezifische Fehler. Zu Authentifizierung, Validierung, Rate Limits und Serverfehlern siehe Fehlerbehandlung.

400 — ungültiges bbox-Format

{
  "detail": "Invalid bounding box format. Expected 'lat1,lon1,lat2,lon2'"
}

503 — vorgelagerter Dienst nicht verfügbar

Wird zurückgegeben, wenn der Feed mit den Warnmeldungen vorübergehend nicht erreichbar ist oder die bbox für die vorgelagerte Verarbeitung zu groß ist. Wiederholen Sie die Anfrage mit exponentiellem Backoff und einer kleineren bbox.

{
  "detail": "Upstream AIRMET/SIGMET service unavailable"
}
GET
/weather/airsigmet
x-api-key<token>

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

In: header

Query Parameters

bbox*Bbox

Bounding box as 'lat1,lon1,lat2,lon2' (SW corner → NE corner)

type?|

Filter by type: 'airmet' or 'sigmet'

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/weather/airsigmet?bbox=string"
{
  "bbox": "38,-90,45,-80",
  "reports": [
    {
      "raw": "WAUS46 KKCI 151445 WA6S AIRMET SIERRA ...",
      "bulletin_type": "AIRMET",
      "report_type": "AIRMET",
      "area": "S",
      "body": "AIRMET IFR...",
      "observation": {
        "type": "IFR",
        "floor": "SFC",
        "ceiling": "FL180"
      }
    }
  ],
  "total": 1
}
Empty
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Siehe auch: Wetter-Übersicht · PIREPs · METAR · Anwendungsfall AIRMET auf der Route