Save up to 17% with yearly billing

See pricing

Höhenwinde

Höhenwind-Vorhersagen beschreiben die erwartete Windrichtung, Windgeschwindigkeit und Temperatur in Standardhöhenstufen für die Flugplanung in den USA. FB Winds (Winds and Temperatures Aloft) werden nach einem festen Zeitplan herausgegeben und decken Stationen im gesamten US-Festland ab; dieser Endpoint liefert jede Station, deren Koordinaten innerhalb Ihres Begrenzungsrahmens (Bounding Box) liegen. Verwenden Sie ihn zusammen mit METAR und TAF, wenn Sie Windkomponenten in Reiseflughöhe für die Kraftstoff- und Zeitplanung benötigen — nicht die Bodenbedingungen an einem einzelnen Flughafen. Die Abdeckung umfasst nur die USA: Abfragen für Gebiete außerhalb der USA liefern 404 ohne Stationen.

Anfrage

Voraussetzungen

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

Senden Sie eine GET-Anfrage mit einem geografischen Begrenzungsrahmen. Optionale Query-Flags wählen den Vorhersagezeitraum und das Höhenband aus.

GEThttps://data.skylinkapi.com/v3.1/weather/winds-aloft
ParameterTypErforderlichStandardBeschreibung
bboxstringJa-Begrenzungsrahmen als lat1,lon1,lat2,lon2 — südwestliche Ecke zuerst, nordöstliche als zweite. Beispiel: 40,-80,42,-73 (Raum New York)
forecastintegerNein12Vorhersagezeitraum in Stunden — 6, 12 oder 24
levelstringNeinlowHöhenband: low (3.000–39.000 ft MSL) oder high (6.000–45.000 ft MSL)

Tipps zum Begrenzungsrahmen. Legen Sie den Rahmen eng um Ihre Route — kleinere Gebiete liefern weniger Stationen und schnellere Antworten. Koordinaten werden in Dezimalgrad angegeben (WGS-84). Längengrade westlich des Nullmeridians sind negativ (z. B. -73.78 für JFK).

Antwort

{
  "bbox": "40.0,-80.0,42.0,-73.0",
  "forecast_hour": 12,
  "level": "low",
  "valid_time": "131800Z",
  "stations": [
    {
      "station": "JFK",
      "latitude": 40.6413,
      "longitude": -73.7781,
      "winds": [
        {
          "altitude_ft": 3000,
          "wind_direction": 310,
          "wind_speed_kt": 7,
          "temperature_c": null,
          "light_and_variable": false,
          "raw": "3107"
        },
        {
          "altitude_ft": 18000,
          "wind_direction": 270,
          "wind_speed_kt": 35,
          "temperature_c": -9,
          "light_and_variable": false,
          "raw": "2735-09"
        }
      ],
      "raw_text": "JFK 3107 3215+13 2926+08 2827+06 2735-09 2645-23 255637 256344 255852"
    }
  ],
  "total": 1
}
FeldTypErforderlichBeschreibung
bboxstringJaWiedergabe des abgefragten Begrenzungsrahmens
forecast_hourintegerJaAngewendeter Vorhersagezeitraum (6, 12 oder 24)
levelstringJaAngewendetes Höhenband (low oder high)
valid_timestring | nullJa (Schlüssel immer vorhanden)Gültigkeitszeit der Vorhersage (UTC), z. B. 131800Z. null, wenn nicht angegeben
stationsarrayJaFB-Winds-Stationen innerhalb der bbox. [], wenn keine passt — in der Regel zusammen mit 404
totalintegerJaAnzahl der Stationen in stations

Höhenbänder

levelTypischerweise gelieferte Höhen (ft MSL)
low3.000 / 6.000 / 9.000 / 12.000 / 18.000 / 24.000 / 30.000 / 34.000 / 39.000
high6.000 / 9.000 / 12.000 / 18.000 / 24.000 / 30.000 / 34.000 / 39.000 / 45.000

Die genauen Höhenstufen pro Station hängen vom FB-Produkt ab — nicht jede Station liefert jede Höhe.

Objektschemas und Nullbarkeit

Jeder Schlüssel in einem Stationsobjekt ist immer vorhanden. Jeder Schlüssel in einem Windstufenobjekt ist immer vorhanden, sobald das Objekt existiert. Verwenden Sie null, 0 oder [] gemäß den folgenden Mustern — prüfen Sie niemals auf fehlende Schlüssel.

SituationWas Sie erhaltenNicht so
Niedrige Höhenstufe ohne Temperaturtemperature_c: null0, Schlüssel fehlt
Windgruppe nicht dekodiertwind_direction: null, wind_speed_kt: nullSchlüssel fehlt oder 0
Schwache, umlaufende Windelight_and_variable: true, wind_direction kann null seinnull für light_and_variable
Station ohne dekodierte Höhenstufenwinds: []null, Schlüssel fehlt
Keine rohe FB-Zeile für die Stationraw_text: nullSchlüssel fehlt
Vorgelagerte Quelle lässt die Gültigkeitszeit wegvalid_time: nullSchlüssel fehlt
Keine Stationen innerhalb der bboxstations: [] + HTTP 404null
Schemas für Station und WindstufeAbschnitt aufklappen

Station

JSON-Pfad: stations[]. Jedes Element steht für eine FB-Winds-Station innerhalb der bbox.

FeldTypErforderlichNull?Beschreibung
stationstringJaNieDreistellige Kennung der FB-Winds-Station (entspricht oft einem nahegelegenen Flughafen, z. B. JFK)
latitudenumberJaNieBreitengrad der Station (Dezimalgrad)
longitudenumberJaNieLängengrad der Station (Dezimalgrad)
windsarrayJaNieWind-/Temperaturstufen für diese Station. [], wenn keine Stufen dekodiert wurden
raw_textstring | nullJa (Schlüssel immer vorhanden)JaVollständige rohe FB-Winds-Zeile für diese Station. null, wenn nicht angegeben

Windstufe

JSON-Pfad: stations[].winds[]. Jedes Element steht für eine Höhenstufe der übergeordneten Station.

FeldTypErforderlichNull?Beschreibung
altitude_ftintegerJaNieHöhe dieser Stufe in Fuß MSL
wind_directioninteger | nullJa (Schlüssel immer vorhanden)JaGrad rechtweisend (0–360). null, wenn nicht dekodiert
wind_speed_ktinteger | nullJa (Schlüssel immer vorhanden)JaGeschwindigkeit in Knoten. null, wenn nicht dekodiert
temperature_cinteger | nullJa (Schlüssel immer vorhanden)JaTemperatur in °C. In den niedrigsten Stufen (3.000–6.000 ft) oft null
light_and_variablebooleanJaNietrue bei schwachen, umlaufenden Winden (< 5 kt). Standard false
rawstringJaNieKodiertes Wind-Token für diese Stufe, z. B. 2735-09 (270°/35 kt, −9 °C)

Schwach und umlaufend. Ist light_and_variable gleich true, liegen die Winde unter 5 Knoten ohne bestimmte Richtung — wind_direction und wind_speed_kt können null oder null sein.

Client-Typen

"""Winds aloft response types - matches winds-aloft field tables."""from dataclasses import dataclassfrom typing import Literal@dataclassclass WindLevel:    altitude_ft: int    wind_direction: int | None    wind_speed_kt: int | None    temperature_c: int | None    light_and_variable: bool    raw: str@dataclassclass WindsAloftStation:    station: str    latitude: float    longitude: float    winds: list[WindLevel]    raw_text: str | None@dataclassclass WindsAloftResponse:    bbox: str    forecast_hour: int    level: str    valid_time: str | None    stations: list[WindsAloftStation]    total: int@dataclassclass CruiseWindSummary:    station: str    altitude_ft: int    direction_deg: int | None    speed_kt: int | None    temperature_c: int | None

Integration

Winde für den Begrenzungsrahmen einer Route abrufen und die Höhenstufe wählen, die Ihrer geplanten Reiseflughöhe am nächsten liegt.

Das Beispiel fragt einen Rahmen um den Raum New York ab, speichert die Antwort eine Stunde im Cache (FB-Produkte werden nach einem festen Zeitplan aktualisiert) und liefert die Windstufe, die einer Zielhöhe am nächsten liegt. Bei 404 gibt die Hilfsfunktion null zurück, und der Aufrufer zeigt einen leeren Zustand statt eines Fehlers an.

import osimport timefrom typing import TypedDictimport requests# CruiseWindSummary - helper return type. Full wire types are in the Client types section.class WindLevel(TypedDict):    altitude_ft: int    wind_direction: int | None    wind_speed_kt: int | None    temperature_c: int | None    light_and_variable: bool    raw: strclass Station(TypedDict):    station: str    latitude: float    longitude: float    winds: list[WindLevel]    raw_text: str | Noneclass WindsAloftResponse(TypedDict):    bbox: str    forecast_hour: int    level: str    valid_time: str | None    stations: list[Station]    total: intclass CruiseWindSummary(TypedDict):    station: str    altitude_ft: int    direction_deg: int | None    speed_kt: int | None    temperature_c: int | NoneHEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[WindsAloftResponse, float]] = {}WINDS_TTL = 3600  # 1 h - FB products update on a fixed scheduledef fetch_winds_aloft(bbox: str, forecast: int = 12, level: str = "low") -> WindsAloftResponse | None:    cache_key = f"winds:{bbox}:{forecast}:{level}"    cached = CACHE.get(cache_key)    if cached and time.time() < cached[1]:        return cached[0]    try:        r = requests.get(            f"{BASE}/weather/winds-aloft",            headers=HEADERS,            params={"bbox": bbox, "forecast": forecast, "level": level},            timeout=(10, 20),        )    except requests.Timeout as exc:        raise RuntimeError(f"SkyLink timeout fetching winds aloft for {bbox}") from exc    if r.status_code == 404:        return None    r.raise_for_status()    data: WindsAloftResponse = r.json()    CACHE[cache_key] = (data, time.time() + WINDS_TTL)    return datadef nearest_cruise_wind(    bbox: str,    target_altitude_ft: int = 18_000,    forecast: int = 12,) -> CruiseWindSummary | None:    """Pick the wind level closest to target altitude from the first station in the bbox."""    payload = fetch_winds_aloft(bbox, forecast=forecast, level="low")    if not payload or not payload["stations"]:        return None    station = payload["stations"][0]    levels = station["winds"]    if not levels:        return None    best = min(levels, key=lambda w: abs(w["altitude_ft"] - target_altitude_ft))    return {        "station": station["station"],        "altitude_ft": best["altitude_ft"],        "direction_deg": best["wind_direction"],        "speed_kt": best["wind_speed_kt"],        "temperature_c": best["temperature_c"],    }if __name__ == "__main__":    import json    from dataclasses import asdict    bbox = "-74.5,40.3,-73.5,41.0"    cruise = nearest_cruise_wind(bbox, target_altitude_ft=18_000)    print(json.dumps(asdict(cruise), indent=2) if cruise else "No winds data")

Hinweise zur Implementierung

Nur US-Abdeckung. FB Winds sind ein US-Produkt. Eine bbox über Europa oder dem Ozean ohne US-Stationen liefert 404 — keinen Authentifizierungs- oder Kontingentfehler. Bilden Sie Ihre bbox aus den Wegpunkten von US-Routen.

Leer vs. 404. Liegen keine Stationsmittelpunkte innerhalb der bbox, liefert die API 404 mit einer detail-Meldung, die Vorhersage und Höhenstufe nennt. Erweitern Sie die bbox leicht oder verschieben Sie sie entlang der Route.

Wahl von level. Verwenden Sie low für den typischen Reiseflug von Fluggesellschaften unterhalb von FL390. Verwenden Sie high, wenn Sie Daten für FL390–FL450 benötigen. Ist der Dienst für eine Höhenstufe vorübergehend nicht verfügbar, erhalten Sie möglicherweise 503 — wiederholen Sie die Anfrage mit Backoff.

Fehlende Temperaturen in niedrigen Höhen. Die Stufe 3.000 ft und manchmal auch 6.000 ft lassen die Temperatur häufig weg (temperature_c: null). Verwenden Sie Windrichtung und -geschwindigkeit für die Planung; behandeln Sie eine fehlende Temperatur als „in dieser Höhenstufe nicht gemeldet“.

Fehlerantworten

Nur endpoint-spezifische Fehler. Fehler bei Authentifizierung, Validierung, Rate Limits und Serverfehler, die alle Endpoints gemeinsam haben, finden Sie unter Fehlerbehandlung.

404 — keine Stationen in der bbox

{
  "detail": "No FB winds stations found in the given bounding box for forecast=12h, level=low"
}

Häufige Ursachen: bbox außerhalb der US-Abdeckung, bbox zu klein zwischen den Stationen oder Koordinaten außerhalb der USA. Erweitern Sie den Rahmen oder prüfen Sie, ob die Route über den USA verläuft.

400 — ungültiges bbox-Format

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

503 — vorgelagerter Dienst nicht verfügbar

{
  "detail": "Winds aloft service temporarily unavailable"
}

Wiederholen Sie die Anfrage nach einem kurzen Backoff. Besteht das Problem fort, versuchen Sie den anderen level-Wert oder eine andere forecast-Stunde.

GET
/weather/winds-aloft
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)

forecast?Forecast

Forecast period in hours (6, 12, or 24)

Default12
Range6 <= value <= 24
level?Level

Altitude range: 'low' (3K-39K ft) or 'high' (6K-45K ft)

Default"low"
Match^(low|high)$

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/weather/winds-aloft?bbox=string"
{
  "bbox": "40,-80,42,-73",
  "forecast_hour": 12,
  "level": "low",
  "valid_time": "130000Z",
  "stations": [
    {
      "station": "JFK",
      "latitude": 40.6413,
      "longitude": -73.7781,
      "winds": [
        {
          "altitude_ft": 3000,
          "wind_direction": 270,
          "wind_speed_kt": 9,
          "light_and_variable": false,
          "raw": "2709"
        }
      ],
      "raw_text": "JFK      2709 3012+08 ..."
    }
  ],
  "total": 1
}
Empty
Empty
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Siehe auch: Wetter-Übersicht · METAR · TAF · Anwendungsfall Reiseflugwind