Current US air quality by ZIP: worst AQI now, the pollutant driving it, and a GOOD to HAZA
Current US air quality by ZIP: worst AQI now, the pollutant driving it, and a GOOD to HAZARDOUS verdict.
20000 (raw units)
price
2
calls / 30d
1
unique payers
2026-09-16
updated
Provider
loonie-toll.onrender.com · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xb531320805C5BED1D46AEaDcF4F008FDF172DBDa",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "20000",
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "DUPiupXtuox38dcGoXUKer5mAydCzmaHjrbQ66qeEm8s",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "20000",
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:137",
"payTo": "0xb531320805C5BED1D46AEaDcF4F008FDF172DBDa",
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"amount": "20000",
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:42161",
"payTo": "0xb531320805C5BED1D46AEaDcF4F008FDF172DBDa",
"asset": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"amount": "20000",
"maxTimeoutSeconds": 300
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"method": "GET",
"queryParams": {
"zip": "37201"
},
"type": "http"
},
"output": {
"example": {
"disclaimer": "Advisory only, provided as is without warranty of accuracy or completeness. AQI observations are hourly and can lag rapidly changing conditions such as wildfire smoke. Not affiliated with or endorsed …",
"observations": [
{
"aqi": 42,
"category": "Good",
"observedAtLocal": "2026-09-08 18:00 CST",
"pollutant": "O3",
"reportingArea": "Nashville",
"state": "TN"
},
{
"aqi": 46,
"category": "Good",
"observedAtLocal": "2026-09-08 18:00 CST",
"pollutant": "PM2.5",
"reportingArea": "Nashville",
"state": "TN"
}
],
"query": {
"distanceMiles": 50,
"zip": "37201"
},
"reasons": [
"Worst current AQI is 46 (Good) from PM2.5 in Nashville.",
"All monitored pollutants are in the Good range.",
"…1 more"
],
"retrievedAt": "2026-09-09T00:51:55.854Z",
"source": "EPA AirNow (airnowapi.org)",
"verdict": "GOOD",
"worstPollutant": {
"aqi": 46,
"category": "Good",
"observedAtLocal": "2026-09-08 18:00 CST",
"pollutant": "PM2.5",
"reportingArea": "Nashville",
"state": "TN"
}
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"properties": {
"distance": {
"description": "Search radius in miles if the ZIP has no monitor, default 50",
"type": "integer"
},
"zip": {
"description": "5-digit US ZIP code",
"type": "string"
}
},
"required": [
"zip"
],
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"disclaimer": {
"type": "string"
},
"observations": {
"items": {
"properties": {
"aqi": {
"type": "integer"
},
"category": {
"type": "string"
},
"observedAtLocal": {
"type": "string"
},
"pollutant": {
"type": "string"
},
"reportingArea": {
"type": "string"
},
"state": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"query": {
"properties": {
"distanceMiles": {
"type": "integer"
},
"zip": {
"type": "string"
}
},
"type": "object"
},
"reasons": {
"items": {
"type": "string"
},
"type": "array"
},
"retrievedAt": {
"type": "string"
},
"source": {
"type": "string"
},
"verdict": {
"type": "string"
},
"worstPollutant": {
"properties": {
"aqi": {
"type": "integer"
},
"category": {
"type": "string"
},
"observedAtLocal": {
"type": "string"
},
"pollutant": {
"type": "string"
},
"reportingArea": {
"type": "string"
},
"state": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://loonie-toll.onrender.com/airquality" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://loonie-toll.onrender.com/airquality");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://loonie-toll.onrender.com/airquality")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/7839.json, and this resource appears in /discovery/resources and /discovery/search.