Open-Meteo Air Quality API
Free air quality API with no key: PM2.5, PM10, ozone, nitrogen dioxide, European and US AQI plus pollen forecasts worldwide. Tested curl example included.
Endpoint tested and returned HTTP 200 on 19 Aug 2026
What is the Open-Meteo Air Quality API?
The Open-Meteo Air Quality API is a free, key-free API returning current and forecast air pollution data — PM2.5, PM10, ozone, nitrogen dioxide, carbon monoxide, European and US AQI, and pollen counts — for any coordinates worldwide.
Air quality data is normally locked behind paid environmental data providers, which makes this endpoint unusually valuable. It exposes the Copernicus Atmosphere Monitoring Service (CAMS) model output through the same clean, key-free interface as Open-Meteo's weather forecast API.
Two AQI scales are available and they are not interchangeable: `european_aqi` and `us_aqi` use different breakpoints and different pollutant weightings, so the same air can score very differently on each. Pick the one your audience recognises and label it explicitly in your UI.
Quick facts
- Base URL
https://air-quality-api.open-meteo.com/v1- Authentication
- No API key required. Same fair-use policy as the main Open-Meteo forecast API.
- Rate limit
- Approximately 10,000 requests per day per IP on the free tier.
- Pricing
- Free including commercial use below the daily limit.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Open-Meteo Air Quality API
Every request below was executed against the live API on 19 Aug 2026, and the response shown is the real body it returned — not an illustration.
1. Current PM10 and PM2.5 for Berlin
GET https://air-quality-api.open-meteo.com/v1/air-quality?latitude=52.52&longitude=13.41¤t=pm10,pm2_5
curl 'https://air-quality-api.open-meteo.com/v1/air-quality?latitude=52.52&longitude=13.41¤t=pm10,pm2_5'const res = await fetch("https://air-quality-api.open-meteo.com/v1/air-quality?latitude=52.52&longitude=13.41¤t=pm10,pm2_5");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://air-quality-api.open-meteo.com/v1/air-quality?latitude=52.52&longitude=13.41¤t=pm10,pm2_5", timeout=20)
res.raise_for_status()
print(res.json()){
"latitude": 52.5,
"longitude": 13.400002,
"generationtime_ms": 0.10263919830322266,
"utc_offset_seconds": 0,
"timezone": "GMT",
"timezone_abbreviation": "GMT",
"elevation": 38.0,
"current_units": {
"time": "iso8601",
"interval": "seconds",
"pm10": "μg/m³",
"pm2_5": "μg/m³"
},
"current": {
"time": "2026-08-19T13:00",
"interval": 3600,
"pm10": 8.1,
"pm2_5": 5.7
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
latitude | float | Required | Latitude in decimal degrees. 52.52 |
longitude | float | Required | Longitude in decimal degrees. 13.41 |
current | string | Optional | Pollutants to return for the current hour. pm10,pm2_5,us_aqi |
hourly | string | Optional | Hourly pollutant series, up to 7 days ahead. pm2_5,ozone,nitrogen_dioxide |
timezone | string | Optional | IANA timezone or `auto`. auto |
Response fields
current.pm2_5float- Fine particulate matter under 2.5 microns, in micrograms per cubic metre — the pollutant most associated with health impact.
current.pm10float- Coarse particulate matter under 10 microns, in micrograms per cubic metre.
current.european_aqiinteger- European Air Quality Index, 0-100+ where under 20 is good. Only returned if requested.
current.us_aqiinteger- United States AQI, 0-500 where under 50 is good. Uses different breakpoints to the European index.
current_unitsobject- Unit strings for every returned variable.
What you can build with the Open-Meteo Air Quality API
- Display a live air quality badge for a city on a health or travel site
- Warn users with asthma or allergies when PM2.5 crosses a threshold
- Add pollen forecasts to a gardening or allergy-tracking app
- Correlate air quality with fitness or outdoor-activity recommendations
- Build environmental dashboards without paying for a commercial data feed
Common errors and how to fix them
400
Missing coordinates or an unknown pollutant name.
Fix: Pollutant names are snake_case, e.g. `pm2_5` not `pm25` — the underscore placement is the usual mistake.
429
Daily allowance exhausted for your IP.
Fix: Air quality changes hourly at most; cache aggressively.
Open-Meteo Air Quality API — frequently asked questions
Is there a free air quality API with no API key?
Yes — the Open-Meteo Air Quality API needs no key or signup and returns PM2.5, PM10, ozone, nitrogen dioxide and both European and US AQI values for any coordinates.
What is the difference between European AQI and US AQI?
They use different pollutant breakpoints and averaging periods. The US AQI runs 0-500 and is driven largely by PM2.5 and ozone; the European AQI runs on a different band scheme. The same air will produce different numbers, so never present them interchangeably.
Does this API provide pollen data?
Yes, for Europe. Alder, birch, grass, mugwort, olive and ragweed pollen are available as hourly variables, sourced from the CAMS European air quality forecast.
How far back does the air quality data go?
The API serves current conditions and forecasts, with a limited historical window. For long historical air quality series you need the CAMS reanalysis datasets directly.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
Alternatives to Open-Meteo Air Quality API
If Open-Meteo Air Quality does not fit, these weather apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| Open-Meteo | Free weather forecast API with no API key and no signup. Hourly and daily forecasts worldwide, free for commercial use. Working curl example and live response. | No key | Yes | 19 Aug 2026 |
| wttr.in | wttr.in is a free console-oriented weather API with no key. Get weather as plain text, ASCII art, PNG or full JSON with one curl command. Live example included. | No key | Yes | 19 Aug 2026 |
| Open-Meteo Geocoding | Free geocoding API with no key: convert a city or place name into latitude and longitude, with population, country and timezone. Tested curl example and live JSON. | No key | Yes | 19 Aug 2026 |
| MET Norway Locationforecast | Free Norwegian Meteorological Institute weather API with no key: hourly global forecasts with temperature, wind, pressure and precipitation. Tested example. | No key | Yes | 20 Aug 2026 |
| openSenseMap | Free citizen weather station API with no key: read any senseBox's sensors and their latest measurements, from temperature and humidity to particulates. Tested example included. | No key | Yes | 21 Aug 2026 |
| RainViewer | Free weather radar API with no key: a manifest of past and forecast radar frames worldwide, each resolving to standard map tiles you can overlay. Tested example included. | No key | Yes | 21 Aug 2026 |
Open-Meteo Air Quality is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 19 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.