openaqi docs

Metrics

Every metric, its canonical unit, the units it accepts, and the published standard it is graded against.

34 metrics, covering what consumer and prosumer air quality hardware actually reports. 19 are graded against a cited published standard. 15 are deliberately ungraded — no standard exists, and inventing bands would be worse than saying so.

This table is generated from the same catalogue the API enforces, so it cannot drift from the behaviour. Machine-readable at /v1/meta.

Grading

Severity is anchored to published thresholds, never to the range of values currently on screen. A relative scale would paint the worst reading red on a day when everything is fine — on a public map that is a false alarm, not a cosmetic choice.

Two threshold shapes:

  • rising — more is worse. The first step whose upTo the value does not exceed wins; anything past the last step is critical.
  • comfort — two-sided, where both too little and too much are worse. Humidity is the only one.

Particulate

KeyUnitRangeAlso acceptsGraded against
pm1p0µg/m³01000mg/m3No PM1 standard — PM2.5 bands used as a proxy
pm2p5µg/m³01000mg/m3US EPA 24-hour PM2.5 breakpoints
pm4p0µg/m³01000mg/m3No PM4 standard — PM10 bands used as a proxy
pm10p0µg/m³02000mg/m3US EPA 24-hour PM10 breakpoints
pc0p3#/L050000000#/dL, #/cm3, #/0.1Lungraded — No health standard — raw sensor counts
pc0p5#/L050000000#/dL, #/cm3, #/0.1Lungraded — No health standard — raw sensor counts
pc1p0#/L050000000#/dL, #/cm3, #/0.1Lungraded — No health standard — raw sensor counts
pc2p5#/L050000000#/dL, #/cm3, #/0.1Lungraded — No health standard — raw sensor counts
pc5p0#/L050000000#/dL, #/cm3, #/0.1Lungraded — No health standard — raw sensor counts
pc10p0#/L050000000#/dL, #/cm3, #/0.1Lungraded — No health standard — raw sensor counts

The pc* metrics are raw optical counts per litre. No health standard exists for counts, but they are the rawest thing the sensor knows and discarding them would throw away the evidence behind the mass estimate.

Gases

KeyUnitRangeAlso acceptsGraded against
co2ppm040000ASHRAE / common IAQ guidance (sensor range 0-40,000 ppm)
eco2ppm060000Estimated value — not a measurement. CO₂ bands shown for orientation only
coppm01000ppb, mg/m3, ug/m3US EPA AQI 8-hour CO breakpoints
no2ppb05000ppm, ug/m3US EPA AQI 1-hour NO₂ breakpoints
noppb05000ppm, ug/m3ungraded — No health standard — NO is a precursor and is regulated as NO₂
noxppb010000ppm, ug/m3ungraded — No combined standard — graded via NO₂ where available
o3ppb01000ppm, ug/m3US EPA AQI 8-hour ozone breakpoints
so2ppb05000ppm, ug/m3US EPA AQI 1-hour SO₂ breakpoints
nh3ppb0100000ppm, ug/m3ungraded — No ambient health standard — occupational limits only (ACGIH 25 ppm TWA)
h2sppb050000ppm, ug/m3WHO air quality guideline, 24-hour (150 µg/m³ ≈ 107 ppb)
hchoppb010000ppm, ug/m3, mg/m3WHO indoor guideline, 30-minute (100 µg/m³ ≈ 81 ppb)
benzeneppb010000ppm, ug/m3EU Directive 2008/50/EC annual limit 5 µg/m³ (~1.6 ppb); WHO states no safe level
tvoc_ppbppb060000ppm, mg/m3ungraded — No single published standard — vendors differ on what TVOC includes
radonBq/m³020000pCi/LWHO Handbook on Indoor Radon (reference level 100 Bq/m³; US EPA action level 148)

Two things called TVOC

tvoc is an index — a relative scale against the sensor's own baseline, which is what UniFi and Sensirion report. tvoc_ppb is a concentration, which is what Awair and SGP30-class parts report. They are not convertible, and conflating them would attach ppb-scale health thresholds to an index-scale reading.

eco2 is likewise kept separate from co2: it is estimated from a VOC sensor rather than measured by an NDIR one. It tracks occupancy but is not interchangeable.

Indices

KeyUnitRangeAlso acceptsGraded against
aqiindex0500US EPA AQI categories (sensor range 0-500)
vocidx1500UniFi spec: VOC Index 1-500 (Sensirion scale)
nox_indexidx1500ungraded — No health standard — index scale only (Sensirion SGP41)
tvocidx01000ungraded — UniFi spec: index scale, no published health mapping

Environment

KeyUnitRangeAlso acceptsGraded against
temperature°C-4085F, Kungraded — Comfort range only — not a health threshold
humidity%0100EPA / ASHRAE indoor humidity guidance
pressurehPa8001200Pa, kPa, inHg, mbarungraded — No health threshold
noisedBA0140WHO Environmental Noise Guidelines (road traffic, Lden 53 dB)
illuminancelx0200000ungraded — No health threshold
uv_indexidx020WHO Global Solar UV Index

Not air quality, but the same sensors report them and they matter for interpretation — low-cost particulate sensors read high in high humidity, which is the sensor rather than the air.

Units

Gas conversions between mixing ratios (ppb, ppm) and mass concentrations (µg/m³, mg/m³) assume EPA reference conditions:

25 °C, 1 atm — molar volume 24.45 L/mol

At 0 °C the molar volume is 22.41 and the same reading converts about 9% differently. The assumption is stated rather than implied, because a converted number that does not state its reference conditions is not a measurement.

Aliases

Metric names are forgiving on the way in. pm25, PM2.5, pm2_5 and pm2p5 are the same metric; so are temp and temperature, rh and humidity, ozone and o3. An agent written against another vocabulary lands in the right column instead of being rejected or creating a parallel metric nobody charts.

The canonical key is always what comes back out.