Soaring profiles
Two endpoints return the whole column above a point for every forecast hour. Three credits each.
Cross-section
Section titled “Cross-section”GET /v1/profile/xsection?lat=46.87&lon=-113.99&model=hrrrAlias: /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.
Airgram
Section titled “Airgram”GET /v1/profile/airgram?lat=46.87&lon=-113.99&model=hrrrAlias: /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.
Drawing them
Section titled “Drawing them”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.