metar.forecast.<tier>.<icao> carries what a numerical weather model expects, as opposed to what a station measured. Each event carries the forecast maximum and minimum for one station over one local calendar day, and is re-sent whenever newly published forecast hours change it.
Two tiers
High-resolution models only cover their own region, so forecasts are split into two tiers.
Basic forecasts cover all streamed stations, since the underlying global models cover the whole planet. ECMWF IFS runs as a second global center alongside GFS, but only through ECMWF’s open-data feed: 0.25° resolution on a 3-hourly step (6-hourly past forecast hour 144). The 9 km hourly HRES product is a paid feed and isn’t published on data.ecmwf.int, so it isn’t available here.
Hires forecasts cover a subset of stations — 31 of 49 streamed airports as of the latest model rollout: the US and Toronto under HRRR, several East Asian airports under JMA MSM, a handful of Central European airports under ICON-D2, and now also LEMD, LLBG, LTAC, LTFM, OEJN and UUWW under Météo-France ARPEGE Europe, its first regional coverage on this channel. NOAA NBM runs hourly through forecast hour 48 and then 3-hourly through hour 192 (fetched the same way as HRRR, via
.idx + byte-range requests); it doesn’t add new stations beyond HRRR’s, but extends hourly-resolution coverage through D+1 and D+2 where HRRR itself stops at hour 18, and runs Toronto (CYYZ) on its native 1.4 km grid. Stations outside these regions have no high-resolution model; their metar.forecast.hires.* channel exists but stays silent, which is not an error.
Temperatures, deltas and coordinates are decimal strings rather than JSON numbers, so no binary float rounding happens in transit.
Timestamps and status
Three timestamps describe the lifecycle of a forecast:run_utc is when the model was initialised, source_available_utc is when the provider published the file, and receipt_time is when metar.ws finished decoding it.
The status field moves through detected, partial and day_complete as forecast hours arrive; corrected means the provider replaced a file that had already been used. day_complete is determined by forecast-hour coverage — the widest gap in received hours is 6 hours or less — rather than by a raw sample count, so the day a model’s step changes from hourly to 3-hourly (forecast hour 48 for NBM, hour 120 for GFS) is no longer marked incomplete by default.
grid_point.distance_km is the distance from the airport to the model grid cell actually used. A 2 km model typically lands within about 1.5 km of the station; a 25 km global model can be as far as 15 km away. Check this value before treating a forecast as strictly local.
Next: Plans & Limits
Compare Sandbox, Starter and Pro, and see how channel limits are counted.
