Skip to content

Soaring profiles

Two endpoints return the whole column above a point for every forecast hour. Three credits each.

GET /v1/profile/xsection?lat=46.87&lon=-113.99&model=hrrr

Alias: /v1/xsection. Parameters: lat, lon, model (default hrrr), wind_speed_unit (default ms), timezone.

{
"time": ["2026-09-19T09:00", ""],
"levels_ft": [1000, 2000, "", 18000],
"wind_u": [[], ], "wind_v": [[], ],
"w": [[], ],
"top_of_lift": [null, 2440, 3350, ""],
"cloud_base": [null, null, 3900, ""],
"lcl": [ ], "cu_top": [ ], "bl_top": [ ],
"sfc_wind_u": [ ], "sfc_wind_v": [ ], "sfc_gust": [ ],
"sfc_precip": [ ], "sfc_cape": [ ],
"wstar": [ ],
"units": { "wind": "m/s", "w": "m/s", "usable_lift_min": 1.2 }
}

wind_u, wind_v and w are grid[t][level]. w is the updraft profile: the Lenschow shape scaled by wstar and the boundary-layer depth, so it peaks in the lower mixed layer and dies at bl_top. usable_lift_min is the climb rate the lift lines use.

Available for hrrr, rrfs, nam and gfs.

GET /v1/profile/airgram?lat=46.87&lon=-113.99&model=hrrr

Alias: /v1/airgram. The airgram view: relative humidity through the column to 40,000 ft, winds, freezing level, cloud base and cumulus top, and a surface strip.

{
"time": [""],
"levels_ft": [1000, "", 18000, 20000, "", 40000],
"rh": [[], ],
"wind_u": [[], ], "wind_v": [[], ],
"freezing_level": [ ], "cloud_base": [ ], "cu_top": [ ],
"sfc_temperature": [ ], "sfc_wind_speed": [ ], "sfc_precip": [ ]
}

Needs the humidity profile, so hrrr, rrfs and gfs only.

Both are meant to be drawn as time on the x-axis and altitude on the y-axis: fill w or rh as a heat map, draw top_of_lift and cloud_base as lines, and barb wind_u/wind_v at each level. The Vertex apps render exactly these payloads.