Hourly Smoke/AQI Forecast

Hourly PM2.5 and AQI smoke forecast out to 120 hours, combined from three internal forecast tiers (primary, fallback and backstop) into one hourly series.

Hourly PM2.5 and AQI smoke forecast out to 120 hours, combined from three internal forecast tiers (primary, fallback and backstop) into one hourly series.

Coverage. The contiguous US (20-52.9N, -130 to -60.1W). A point no forecast covers gets a 400 with code: LOCATION_OUT_OF_BOUNDS; a covered point whose forecast is briefly missing gets a 503 DATA_UNAVAILABLE.

forecast starts at the current UTC hour (fhr 0) and is sorted by fhr. Each tier's hours are matched to the series by valid_time, so it can be treated as a single series without needing to know which tier produced which hour. Every hour carries its own valid_time.

How far it reaches. Each tier runs on its own schedule, so the series ends where the furthest-reaching fresh tier ends: usually the backstop, whose run can be up to about 36 hours old, so expect roughly 84-110 hours. max_fhr gives the last hour returned.

Gaps. Where a higher tier has no value for an hour, the next tier fills it. If no tier has a value, pm25_ugm3 and aqi are null for that hour. If the backstop is briefly unavailable, the series ends where the primary and fallback tiers end, and an hour none of them covers is left out, so read fhr or valid_time rather than relying on list position.

Total-column smoke mass (colmd_kgm2) is only available from the primary and fallback tiers and is null elsewhere.

GET
/forecast/smoke/point/

Authorization

Authorization<token>

Token-based authentication with required prefix "Token"

In: header

Query Parameters

lat*number

Latitude in decimal degrees (Northern Hemisphere only).

Formatfloat
lon*number

Longitude in decimal degrees.

Formatfloat

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/forecast/smoke/point/?lat=32.78&lon=-96.8"
{  "location": {    "property1": null,    "property2": null  },  "primary_run": "string",  "fallback_run": "string",  "backstop_run": "string",  "hours": 0,  "max_fhr": 0,  "model_note": "string",  "forecast": [    {      "fhr": 0,      "valid_time": "string",      "source": "primary",      "pm25_ugm3": 0,      "aqi": 0,      "aqi_category": "string",      "aqi_color": "string",      "colmd_kgm2": 0    }  ]}