Score a location, forecast a day's air quality, or enrich a route you supply. Responses speak the AirTrack Clean Air Score (100 = cleanest, 0 = worst) and — for routes — the AirTrack Air Quality Health Index (AAL AQHI) and inhaled dose, alongside raw pollutant concentrations in µg/m³.
Score
A connection's air-quality poll: a location signal in, a score out.
Resolves the location (explicit lat/lon or a Wi-Fi scan), looks up air quality, and
returns a tiny {score, ttl} payload. 401 if the token is bad, 403 for a
missing scope or non-premium owner, 422 if no location can be resolved, 429 if
rate-limited or over the credit quota (monthly pool or daily burst), 503 if
upstreams are unavailable.
Score › Request Body
Wi-Fi scan to resolve server-side, strongest first.
WGS-84 latitude.
WGS-84 longitude.
Optional caller self-identification for usage attribution (e.g. synthetic_probe). Recognised labels are attributed as client:<name>; unrecognised ones fall back to the endpoint's own label. Never affects the answer.
Score › Responses
Successful Response
scoreClean Air Score: 100 = cleanest, 0 = worst.
ttlSeconds until the client should poll again.
Forecast
A connection's air-quality forecast: hourly Clean Air Score + pollutant concentrations for a date at a location.
Returns a shared timestamps axis plus measures (a map of measure to a
parallel value list). If latitude/longitude are omitted, an approximate
location is resolved from the caller's IP country. The window spans 4 days.
401 if the token is bad, 403 for a missing scope or non-premium owner,
429 if rate-limited or over the credit quota (monthly pool or daily burst),
400 for an invalid date.
Forecast › Request Body
datetimezoneIANA timezone name for the date.
WGS-84 latitude. Omit both coordinates to use the caller's IP location.
WGS-84 longitude.
activity_typeenvironment_typeForecast › Responses
Successful Response
locationHuman-readable name of the forecast location.
Shared time axis, epoch seconds (parallel to each measure).
Map of measure name to a list of hourly values parallel to timestamps (element i is the value at timestamps[i]). Keys are clean_air_score (0-100, higher is cleaner) and pollutant concentrations in µg/m³ — typically pm25, pm10, no2, o3 and so2. Only measures with data for this location appear; null entries mark hours a measure has no value for.
Enrich Route
Enrich an ordered route of waypoints with air quality: per-waypoint measures
plus a route-level summary (banded clean-air-score, relative inhaled dose,
average pollutants).
Provide a time on every waypoint (a recorded track), or on none of them with a
request start_time (durations are then estimated from distance and activity speed).
400 if the times fall outside the window air-quality data exists for, 401 bad
token, 403 missing scope or non-premium owner, 429 if rate-limited or over the
credit quota (monthly pool or daily burst), 503 if no air-quality data is
available for the route.
Enrich Route › Request Body
Required when the waypoints carry no timestamps; used with the activity's estimated speed to derive per-waypoint times.
activity_typeenvironment_typeEnrich Route › Responses
Successful Response
waypoints[lat, lon] per waypoint.
Route-level air-quality summary.
One health metric only — the Clean Air Score, banded with the same vocabulary the AirTrack app shows (Excellent … Very Poor). The AQHI the score derives from stays internal: publishing both invited misreading, since the two run in opposite directions (score: higher is cleaner; AQHI: higher is worse).
Map of measure name to a list of values parallel to waypoints (element i describes waypoints[i] at its point in time). Keys are clean_air_score (0-100, higher is cleaner, adjusted for the request's activity and environment) and pollutant concentrations in µg/m³ — typically pm25, pm10, no2 and o3. Only measures with data for this route appear; null entries mark waypoints a measure could not be computed for.

