Environment — entry 010 of 18

OpenAQ

Verified Jul 2026

OpenAQ is a nonprofit, community-run aggregator of government and research air-quality monitoring data from thousands of stations worldwide, unified into one API. Access requires a free API key (registered via the OpenAQ site) but the service itself carries no paid tier.

air-qualityopen-datanonprofitenvironmentpollution
AuthenticationAPI KeySign up with the provider to obtain credentials.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score84out of 100
Authentication15/25API key required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 84 on greatapis.com
<a href="https://greatapis.com/api/openaq/"><img src="https://greatapis.com/badge/openaq.svg" alt="Scored 84 on greatapis.com"></a>

Auth quickstart

  1. Sign up with the provider to get an API key.
  2. Send it on every request as a headerX-API-Key: <key>
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Endpoints

Auth
APIKeyHeader
v339
GET/v3/countriesGet countries
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
providers_idqueryno
parameters_idqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseCountriesResponse
422Validation ErrorHTTPValidationError
GET/v3/countries/{countries_id}Get a country by ID
Parameters
NameInRequiredType
countries_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseCountriesResponse
422Validation ErrorHTTPValidationError
GET/v3/instrumentsGet instruments
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseInstrumentsResponse
422Validation ErrorHTTPValidationError
GET/v3/instruments/{instruments_id}Get an instrument by ID
Parameters
NameInRequiredType
instruments_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseInstrumentsResponse
422Validation ErrorHTTPValidationError
GET/v3/licensesGet licenses
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseLicensesResponse
422Validation ErrorHTTPValidationError
GET/v3/licenses/{licenses_id}Get a license by ID
Parameters
NameInRequiredType
licenses_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseLicensesResponse
422Validation ErrorHTTPValidationError
GET/v3/locationsGet locations
Parameters
NameInRequiredType
coordinatesqueryno
radiusqueryno
providers_idqueryno
parameters_idqueryno
limitquerynointeger
pagequerynointeger
owner_contacts_idqueryno
manufacturers_idqueryno
order_byqueryno
sort_orderqueryno
licenses_idqueryno
monitorqueryno
mobilequeryno
instruments_idqueryno
isoqueryno
countries_idqueryno
bboxqueryno
Responses
StatusDescriptionSchema
200Successful ResponseLocationsResponse
422Validation ErrorHTTPValidationError
GET/v3/locations/{locations_id}Get a location by ID
Parameters
NameInRequiredType
locations_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseLocationsResponse
422Validation ErrorHTTPValidationError
GET/v3/locations/{locations_id}/flagsGet flags by location ID
Parameters
NameInRequiredType
locations_idpathyesinteger
limitquerynointeger
pagequerynointeger
datetime_fromqueryno
datetime_toqueryno
Responses
StatusDescriptionSchema
200Successful ResponseLocationFlagsResponse
422Validation ErrorHTTPValidationError
GET/v3/locations/{locations_id}/latestGet a location's latest measurements
Parameters
NameInRequiredType
locations_idpathyesinteger
limitquerynointeger
pagequerynointeger
datetime_minqueryno
Responses
StatusDescriptionSchema
200Successful ResponseLatestResponse
422Validation ErrorHTTPValidationError
GET/v3/locations/{locations_id}/sensorsGet sensors by location ID
Parameters
NameInRequiredType
locations_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseSensorsResponse
422Validation ErrorHTTPValidationError
GET/v3/manufacturersGet manufacturers
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseManufacturersResponse
422Validation ErrorHTTPValidationError
GET/v3/manufacturers/{manufacturers_id}Get a manufacturer by ID
Parameters
NameInRequiredType
manufacturers_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseManufacturersResponse
422Validation ErrorHTTPValidationError
GET/v3/manufacturers/{manufacturers_id}/instrumentsGet instruments by manufacturer ID
Parameters
NameInRequiredType
manufacturers_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseInstrumentsResponse
422Validation ErrorHTTPValidationError
GET/v3/ownersGet owners
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseOwnersResponse
422Validation ErrorHTTPValidationError
GET/v3/owners/{owners_id}Get a owner by ID
Parameters
NameInRequiredType
owners_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseOwnersResponse
422Validation ErrorHTTPValidationError
GET/v3/parametersGet a parameters
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
parameter_typequeryno
coordinatesqueryno
radiusqueryno
bboxqueryno
isoqueryno
countries_idqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseParametersResponse
422Validation ErrorHTTPValidationError
GET/v3/parameters/{parameters_id}Get a parameter by ID
Parameters
NameInRequiredType
parameters_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseParametersResponse
422Validation ErrorHTTPValidationError
GET/v3/parameters/{parameters_id}/latestGet latest measurements by parameters ID
Parameters
NameInRequiredType
parameters_idpathyesinteger
limitquerynointeger
pagequerynointeger
datetime_minqueryno
Responses
StatusDescriptionSchema
200Successful ResponseLatestResponse
422Validation ErrorHTTPValidationError
GET/v3/providersGet providers
Parameters
NameInRequiredType
order_byqueryno
sort_orderqueryno
parameters_idqueryno
monitorqueryno
isoqueryno
countries_idqueryno
bboxqueryno
coordinatesqueryno
radiusqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseProvidersResponse
422Validation ErrorHTTPValidationError
GET/v3/providers/{providers_id}Get a provider by ID
Parameters
NameInRequiredType
providers_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseProvidersResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensor_id}/flagsGet flags by sensor ID
Parameters
NameInRequiredType
sensor_idpathyesinteger
limitquerynointeger
pagequerynointeger
datetime_fromqueryno
datetime_toqueryno
Responses
StatusDescriptionSchema
200Successful ResponseLocationFlagsResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}Get a sensor by ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
Responses
StatusDescriptionSchema
200Successful ResponseSensorsResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/daysGet measurements aggregated to day by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
date_toqueryno
date_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseDailyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/days/dayofweekGet measurements aggregated from day to day of week by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
date_toqueryno
date_fromqueryno
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/days/monthlyGet measurements aggregated from day to month by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
date_toqueryno
date_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/days/monthofyearGet measurements aggregated from day to month of year by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
date_toqueryno
date_fromqueryno
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/days/yearlyGet measurements aggregated from day to year by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
date_toqueryno
date_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hoursGet precomputed hourly measurements by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hours/dailyGet measurements aggregated from hour to day by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hours/dayofweekGet measurements aggregated from hour to day of week by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hours/hourofdayGet measurements aggregated from hour to hour of day by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hours/monthlyGet measurements aggregated from hour to month by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hours/monthofyearGet measurements aggregated from hour to month of year by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/hours/yearlyGet measurements aggregated from hour to year by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseHourlyDataResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/measurementsGet measurements by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseMeasurementsResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/measurements/dailyGet measurements aggregated to days by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseMeasurementsResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/measurements/hourlyGet measurements aggregated to hours by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
datetime_toqueryno
datetime_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseMeasurementsResponse
422Validation ErrorHTTPValidationError
GET/v3/sensors/{sensors_id}/yearsGet measurements aggregated to year by sensor ID
Parameters
NameInRequiredType
sensors_idpathyesinteger
date_toqueryno
date_fromqueryno
limitquerynointeger
pagequerynointeger
Responses
StatusDescriptionSchema
200Successful ResponseAnnualDataResponse
422Validation ErrorHTTPValidationError

Try it

Developer reference

Base URLhttps://api.openaq.org
Rate limit

OpenAQ's free tier allows 60 requests/minute and 2,000 requests/hour by default (higher limits available on request); every response carries x-ratelimit-limit/x-ratelimit-used/x-ratelimit-remaining/x-ratelimit-reset headers, and exceeding either window returns HTTP 429 (docs.openaq.org/using-the-api/rate-limits).

Key endpoints
  • GET/v3/locations
  • GET/v3/locations/{locations_id}
  • GET/v3/parameters
  • GET/v3/locations/{locations_id}/latest
  • GET/v3/sensors/{sensors_id}/measurements