Winds aloft
Beta
POST /v1/weather/winds/route, GET /v1/weather/winds
The wind and temperature a flight meets at its levels and times, from the official winds and temperatures aloft forecasts (FB) of aviationweather.gov, the forecast a standard briefing gives: the United States, Alaska, Hawaii and the Pacific, 3,000 to 53,000 ft, issued four times a day for 6, 12 and 24 hours ahead, every issue kept so a past briefing replays with what was issued by then. FB forecasts are point forecasts for about 220 stations: each value here is interpolated between the stations nearest the point (inverse-distance weighting of up to four within 400 NM, the wind as components) and between the levels either side, from the forecast whose period of use holds the time. It is not a gridded model: what happens between stations, such as a jet stream core or mountain waves, is not resolved, and the caveats say so.
Request: the flight object (see Flight object) and:
step_nm(default 25, 5 to 200): distance between samples along the track; every fix is sampled too.tas_kt(50 to 650): true airspeed. Adds the ground speed at each sample and the flight's time with the wind against still air. The flight's times still come from its waypoints,departureandspeed_kt.as_of: replay: only the forecasts issued by then.
{
"waypoints": [
{ "id": "KLAS", "lat": 36.08, "lon": -115.1522, "alt_ft": 2181 },
{ "id": "TOC", "lat": 35.75, "lon": -115.75, "fl": 250 },
{ "id": "TOD", "lat": 34.35, "lon": -117.6, "fl": 250 },
{ "id": "KLAX", "lat": 33.9425, "lon": -118.4081, "alt_ft": 128 }
],
"departure": "2026-10-14T03:00:00Z",
"speed_kt": 380,
"tas_kt": 440,
"step_nm": 50
}
Response (shortened; live on 14 Oct):
{
"summary": "Over 206 NM at its levels the flight meets an average tailwind component of 15 kt; the strongest wind is 338° 61 kt at 35 NM (FL250); temperatures average ISA +8 °C; at 440 kt TAS it takes 27 min with the wind against 28 min in still air.",
"points": [
{ "chainage_nm": 35.2, "fix": "TOC", "time": "2026-10-14T03:05:33Z", "level_ft": 25000, "track_deg": 228, "wind_dir_deg": 338, "wind_kt": 61, "temp_c": -28, "isa_dev_c": 6.5, "headwind_kt": -21, "crosswind_kt": 57, "ground_speed_kt": 457, "light_and_variable": false, "available": true, "reason": null, "notes": [] }
],
"legs": [ { "from": "TOC", "to": "TOD", "from_nm": 35.2, "to_nm": 159, "avg_headwind_kt": -15.6, "max_wind_kt": 61, "avg_temp_c": -26, "avg_isa_dev_c": 8.5 } ],
"totals": {"avg_headwind_kt": -14.6, "max_wind": {"kt": 61, "dir_deg": 338, "chainage_nm": 35.2, "level_ft": 25000}, "avg_isa_dev_c": 7.7, "time_minutes": 27.3, "still_air_minutes": 28.1, "available_pct": 100},
"flight": { "length_nm": 206, "departure": "2026-10-14T03:00:00Z", "arrival": "2026-10-14T03:32:32Z", "sample_step_nm": 50, "tas_kt": 440, "fixes": [] },
"meta": { "as_of": { "time": "..." }, "forecasts": [ { "region": "us", "level_set": "low", "based_on": "...", "valid": "2026-10-14T06:00:00Z", "for_use_from": "2026-10-14T03:00:00Z", "for_use_to": "2026-10-14T12:00:00Z" } ], "sources": { "windtemp": { "last_poll": "...", "stale": false } }, "caveats": [] }
}
points[]: each sample with its distance along the track, time and level, the true course of the great circle there (track_deg), the wind (wind_dir_degtrue, where it blows from, 1 to 360, null when light and variable;wind_kt), the temperature, ISA and the deviation from ISA,headwind_kt(positive a headwind, negative a tailwind) andcrosswind_kt(positive from the right), and withtas_ktthe ground speed. A point with no forecast within reach hasavailable: falseand areason.notessay when a value was held or carried down below a station's lowest forecast level.legs[]: from fix to fix, the distance-weighted average headwind, the strongest wind, the average temperature and ISA deviation.totals: the same over the flight, the strongest wind with where and at what level, the share of the flight with a forecast, and withtas_ktthe minutes with the wind and in still air.meta.forecasts: the bulletins the answer used, with their period of use.meta.sources.windtemp: when the forecasts were last polled (stalewhen late) and the newest issue.meta.caveats: read them; they say how the values were made.- Levels are compared in feet as published: flight levels as pressure altitude, FB levels as true altitude up to 12,000 ft and pressure altitude from 18,000 ft. FB leaves the levels near a station's ground blank and 3,000 ft has no temperature, so below a station's lowest forecast its lowest wind is held and its deviation from ISA is carried down.
GET /v1/weather/winds?lat=36.08&lon=-115.15&fl=250&at=2026-10-14T03:00:00Z answers one point the same way (alt_ft instead of fl for an altitude), with the stations used: id, name, position, distance, weights and their published values at the levels either side.