snapdata
Datasets

Air quality

IN (India). Latest pollutant concentrations from every reporting CPCB monitoring station, by city and state.

What this is

Near-real-time pollutant readings from the Central Pollution Control Board, mirrored via data.gov.in. Around 3,570 readings across 268 cities and 31 states.

curl -s https://snapdata.dev/api/v1/aqi/in/city/delhi.json

These are concentrations, not an AQI number. CPCB publishes what each station measured, per pollutant. Collapsing that into a single AQI figure requires CPCB's sub-index breakpoints plus a rule about how many pollutants must be reporting before the index is meaningful — a derivation with real judgement in it. We publish the measurement and leave the index to whoever wants to compute it.

Endpoints

PathWhat it returns
/api/v1/aqi/in/latest.jsonEvery reporting station, every pollutant
/api/v1/aqi/in/index.jsonEvery city and state, with its slug
/api/v1/aqi/in/city/{slug}.jsonOne city, all its stations
/api/v1/aqi/in/state/{slug}.jsonOne state

Slugs are lower-cased and hyphenated. Read them from index.json rather than guessing: Navi Mumbai (MIDC) becomes navi-mumbai-midc, which is not obvious.

Units and nulls

Values are µg/m³, except CO which is mg/m³. Showing one unit for all of them would misstate CO by three orders of magnitude.

min, max and avg are null when the station reported NA. That is never a zero — a station that did not report is not a station reading clean air, and the difference matters for anyone averaging across a city.

Time

updated_at is RFC 3339 UTC. The upstream publishes DD-MM-YYYY HH:MM:SS in IST with no offset in the string, so it is converted rather than relabelled; emitting it unchanged would place every reading five and a half hours into the future.

The date is read day-first. 13-08-2026 settles the ambiguity, since there is no thirteenth month.

Not a price series

Reference-shaped, like tickers. A station reading has no trading day and no settling window, so there are no series/30d windows, no is_trading_day and no dated snapshots. It takes no selector and no format negotiation: JSON only.

Cadence

Refreshed on the normal three-hourly run. Unlike the ticker universe this is only a few hundred files and the readings genuinely change through the day.

Licence

Government Open Data Licence — India (GODL). Free to republish with attribution to the Central Pollution Control Board.

On this page