Skip to main content
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. Hires forecasts cover a subset of stations: the US and Toronto under HRRR, several East Asian airports under JMA MSM, and a handful of Central European airports under ICON-D2. 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. 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.
Filter on local_day_complete before comparing any forecast values. Until a full local day has arrived, temp_max_c is only the maximum of the hours received so far, and the missing hours cannot lower it, so an incomplete day systematically under-reports the maximum and over-reports the minimum. This bias does not average out across many days. Treat local_day_complete: true (equivalently a status of day_complete or run_complete) as the signal that a measurement is final, and read available_through_forecast_hour to see how much of the day an incomplete event actually covers.

Next: Plans & Limits

Compare Sandbox, Starter and Pro, and see how channel limits are counted.