Docs/APIs/Air Quality

Air Quality

Get air quality data

OperationalCredits 5 per callp50 921msWeatherStar

Overview

Air Quality works by retrieving the air quality data from various reliable sources and providing it in a structured format. You can expect accurate and up-to-date information.

Endpoint

One host, one path per API. The block below shows this call in four languages; every one of them is the same HTTP request. Making requests covers the timeouts, retries and parameter rules that apply to all of them. The SDKs wrap the same call in a typed client.

GEThttps://api.apiverve.com/v1/airquality
curl "https://api.apiverve.com/v1/airquality?city=San%20Francisco" \
  -H "x-api-key: your_api_key_here"
const res = await fetch('https://api.apiverve.com/v1/airquality?city=San%20Francisco', {
  headers: { 'x-api-key': 'your_api_key_here' },
});

if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);

const { data } = await res.json();
console.log(data);
import requests

res = requests.get(
    "https://api.apiverve.com/v1/airquality?city=San%20Francisco",
    headers={"x-api-key": "your_api_key_here"},
    timeout=15,
)
res.raise_for_status()

print(res.json()["data"])
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.apiverve.com/v1/airquality?city=San%20Francisco", nil)
	req.Header.Set("x-api-key", "your_api_key_here")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}

Replace your_api_key_here with the key from your dashboard. When the inputs arrive as a list rather than one at a time, batch requests run up to 200 of them through this same API in a single call.

Authentication

Send your key in the x-api-key header. That is the only auth step — there is no token exchange and no per-endpoint scope to configure. Authentication covers creating, rotating and revoking keys.

401 is the only auth verdict

A 401 means the key is missing, invalid or expired. A 403 means the key is valid but not permitted here — blocked by a key restriction or an IP allow-list. Running out of credits is a 429.

Parameters

Sent in the query string. Premium parameters are accepted on every plan but only take effect on plans that include them.

ParameterTypeDescription
cityRequiredstringThe city name for which you want to get the air quality data (e.g., New York)

Response

Every API returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape. Response format covers the envelope, the other output formats and how premium fields are withheld.

Sample response
{
  "status": "ok",
  "error": null,
  "data": {
    "pm2_5": 16.75,
    "pm10": 18.85,
    "carbonMonoxide": 387.85,
    "ozone": 9,
    "nitrogenDioxide": 38.55,
    "sulfurdioxide": 5.95,
    "usEpaIndex": 2,
    "gbDefraIndex": 2,
    "recommendation": "The air quality in San Francisco is good. It is safe to go outside.",
    "city": "San Francisco"
  }
}

Response fields

Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.

FieldTypeExampleDescription
pm2_5number16.75Fine particulate matter concentration in micrograms per cubic meter
pm10number18.85Coarse particulate matter concentration in micrograms per cubic meter
carbonMonoxidePremiumnumber387.85Carbon monoxide concentration level in parts per billion
ozonePremiumnumber9Ground-level ozone concentration in parts per billion
nitrogenDioxidePremiumnumber38.55Nitrogen dioxide concentration level in parts per billion
sulfurdioxidePremiumnumber5.95Sulfur dioxide concentration level in parts per billion
usEpaIndexPremiumnumber2US EPA air quality index rating from one to six scale
gbDefraIndexPremiumnumber2UK DEFRA air quality index rating from one to ten scale
recommendationstring"The air quality in San Francisco is good. It is safe to go outside."Air quality assessment and health recommendation for the city
citystring"San Francisco"The city name for which air quality data was retrieved

Errors

Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change. Error handling covers the full status list and which of them are worth retrying.

StatusMeaningWhat to do
400Input was rejectedRead error; it names the parameter.
401Key missing or invalidCheck the header name and the key value.
403Key valid, but not permittedA key restriction or IP allow-list; see key scoping.
429Rate limited, or out of creditsRead error to tell them apart; see rate limits.

Use cases

Health Monitoring
Monitor air quality by using the Air Quality API to get real-time air quality data. Use the data to track pollution levels and protect your users' health
Environmental Analysis
Analyze environmental conditions by using the Air Quality API to get air quality data. Use the data to study pollution levels and their impact on the environment
Weather Forecasting
Forecast weather conditions by using the Air Quality API to get air quality data. Use the data to predict air pollution levels and plan outdoor activities
City Planning
Plan urban development by using the Air Quality API to get air quality data. Use the data to assess pollution levels and make informed decisions on city planning

Other ways to use Air Quality

Set up Air Quality on APIVerve, or reach the same source a different way. Your APIVerve account and credits work on all of them — one key, one balance.

Give it to an AI agentConnect over MCP and your agent calls it as a native tool — Claude, Cursor, ChatGPT.VerveKitReference →
Use it in Google Sheets or ExcelA =VERVE() formula fills a column — no script, no export, recalculates in place.VerveSheetsReference →
Ground an agent on itA cited, machine-checkable fact your model can't produce on its own.VerveContextReference →

More in Weather:

Was this page helpful?