Base URL: https://api.wxalerts.org
The full forecast for a point: the National Blend of Models hour by hour, and
the HRRR nowcast beside it, with the model run behind every number.
GET /weather is the same data reduced for a screen;
this is the unreduced version.
GET /forecast?lat=35.2&lon=-97.4&units=si
GET /forecast?q=norman+ok&units=us
GET /forecast?lat=35.2&lon=-97.4&units=si&include=severe,upper_air
No authentication. CORS is open. Design against 60 requests a minute; the data changes hourly, so cache.
Two models, never blended
| resolution | horizon | updated | carries | |
|---|---|---|---|---|
hourly, daily |
NBM, about 10 km | about 11 days | hourly | the forecast: temperature, wind, sky, precipitation and its probabilities |
nowcast |
HRRR, about 6 km | 18 hours | hourly | the near term: radar reflectivity, pressure, and on request the severe and upper air fields below |
They are kept apart on purpose. When they disagree about the timing of rain,
that disagreement is information, and a blend would hide which model said
what. models names each run, its age and how far it reaches.
units is si (exactly what the model published: K, m/s, Pa, kg/m²),
metric, us, uk, or auto from your country. Pass a system explicitly if
you want a response a CDN can cache. Every response carries a units block
naming the unit of every field it contains.
Probabilities (NBM, hourly)
| field | meaning |
|---|---|
precip_probability |
chance of more than 0.01 in (0.254 mm) in the hour |
thunder_probability |
chance of a thunderstorm |
rain_probability, snow_probability, freezing_rain_probability, ice_pellet_probability |
chance the precipitation is each type. Four independent numbers, not a split of 100: an uncertain hour can be plausibly both rain and snow. CONUS and Alaska only. |
severe_probability |
chance the Craven-Wiedenfeld severe parameter exceeds 65, a significant severe signal. CONUS only. |
Probabilities are the highest value anywhere in the 10 km cell, so they answer “anywhere near here”, not “on average across it”.
include=severe
Added to each nowcast hour. From the HRRR at native resolution, averaged to
the 6 km cell; helicity and updraft helicity keep the cell’s peak instead.
| field | unit (si) | meaning |
|---|---|---|
cape, cin |
J/kg | surface based |
mlcape, mlcin |
J/kg | mixed layer, the lowest 90 hPa |
mucape, mucin |
J/kg | most unstable parcel in the lowest 255 hPa |
cape_0_3km |
J/kg | low-level CAPE |
lcl_height |
m above ground | lifted condensation level of a surface parcel |
lifted_index |
K | negative is unstable |
precipitable_water |
kg/m² (mm) | |
srh_0_1km, srh_0_3km |
m²/s² | storm-relative helicity, Bunkers right mover |
storm_motion_speed, storm_motion_direction |
m/s, degrees | HRRR’s Bunkers right mover, direction FROM |
bulk_shear_0_1km, bulk_shear_0_6km, bulk_shear_0_6km_direction |
m/s, degrees | bulk wind difference |
updraft_helicity |
m²/s² | hourly maximum 2 to 5 km; 0 at the analysis hour |
include=upper_air
Temperature, dewpoint and wind at 925, 850, 700 and 500 hPa, heights at 850 to
500 hPa, the 250 hPa jet, the 80 m wind and the boundary layer height:
temperature_850mb, dewpoint_850mb, height_850mb, wind_speed_850mb,
wind_direction_850mb and so on, plus wind_speed_80m, wind_direction_80m
and boundary_layer_height.
A level below the ground at that point (850 hPa over Denver, say) comes back
null: the model extrapolates under terrain and that number describes no air.
Winds aloft, shear and storm motion are in knots in every system but si,
because that is how soundings and hodographs read.
All directions are degrees from true north, reported as the direction a wind blows FROM. HRRR publishes its vectors relative to its own grid; they are turned to true north before they are stored.

