changedInput schema / properties / bbox / description
Previous value: -"Bounding box as \"minLon,minLat,maxLon,maxLat\" (west,south,east,north). Alternative to coordinates+radius for area sweeps. Results have no distance field (no center point)."New value: +"Bounding box as \"minLon,minLat,maxLon,maxLat\" (west,south,east,north), with minLon ≤ maxLon and minLat ≤ maxLat. Alternative to coordinates+radius for area sweeps. Results have no distance field (no center point)."
changedInput schema / properties / iso / description
Previous value: -"Restrict to a country by ISO 3166-1 alpha-2 code (e.g. \"US\", \"IN\", \"DE\"). Combine with bbox/coordinates to scope, or use alone for a country-wide list. Discover coverage with openaq_list_countries."New value: +"Restrict to a country by OpenAQ country code: ISO 3166-1 alpha-2 (e.g. \"US\", \"IN\", \"DE\"; either case), or \"-99\" where OpenAQ lists a country with no ISO code. Take codes from openaq_list_countries. Combine with bbox/coordinates to scope, or use alone for a country-wide list."
removedInput schema / properties / iso / maxLength
Removed value: -2
removedInput schema / properties / iso / minLength
Removed value: -2
addedInput schema / properties / iso / pattern
Added value: +"^(?:[A-Za-z]{2}|-99)$"
addedInput schema / properties / mobile
Added value: +{
+ "description": "Mobility filter: true returns only mobile stations, false only fixed ones. Omit for both.",
+ "type": "boolean"
+}
addedInput schema / properties / monitor
Added value: +{
+ "description": "Station class filter: true returns only reference-grade monitors, false only low-cost sensors. Omit for both.",
+ "type": "boolean"
+}
changedInput schema / properties / page / description
Previous value: -"Which page of results to return (1-based). Default 1. The only way past the 100-station cap: with limit 100, page 2 returns stations 101–200. Distance ordering applies within a page, not across pages, so paging is for iso/bbox sweeps — a near-me coordinates search should stay on page 1."New value: +"Which page of results to return (1-based). Default 1. The only way past the 100-station cap: with limit 100, page 2 returns stations 101–200. Distance ordering applies within a page, not across pages, so paging is for iso/bbox sweeps — a near-me coordinates search should stay on page 1. A page past the last one fails with page_exhausted."
addedInput schema / properties / parametersId / exclusiveMinimum
Added value: +0
removedInput schema / properties / parametersId / minimum
Removed value: --9007199254740991
addedInput schema / properties / providersId
Added value: +{
+ "description": "Only return stations from this OpenAQ provider (data network) id — read it from a previous result's providerId (e.g. 119 = AirNow).",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991,
+ "type": "integer"
+}
removedInput schema / properties / radius / default
Removed value: -12000
changedInput schema / properties / radius / description
Previous value: -"Search radius in metres around coordinates (1–25000; the API hard-caps at 25000). Default 12000 (~12km). Only used with coordinates."New value: +"Search radius in metres around coordinates (1–25000; the API hard-caps at 25000). Default 12000 (~12km). Requires coordinates — a radius sent with only bbox or iso is rejected."
changedOutput schema / properties / error / properties / data / properties / reason / description
Previous value: -"Machine-readable failure mode. Declared by this tool: `no_locations_found`: No monitoring stations match the given area or filters. `no_search_scope`: None of coordinates, bbox, or iso was provided. `upstream_error`: OpenAQ returned 5xx or an unreadable body on every retry. `rate_limited`: OpenAQ returned 429 — the request budget for this key is exhausted. `upstream_timeout`: OpenAQ did not respond within the request timeout on every retry. `invalid_api_key`: OpenAQ returned 401 — the configured OPENAQ_API_KEY is missing, invalid, or revoked. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_locations_found`: No monitoring stations match the given area or filters. `page_exhausted`: A page past the first returned no stations — the results end before it. `no_search_scope`: None of coordinates, bbox, or iso was provided. `invalid_search_scope`: coordinates and bbox were both provided, or radius was provided without coordinates. `upstream_error`: OpenAQ returned 5xx or an unreadable body on every retry. `rate_limited`: OpenAQ returned 429 — the request budget for this key is exhausted. `upstream_timeout`: OpenAQ did not respond within the request timeout on every retry. `invalid_api_key`: OpenAQ returned 401 — the configured OPENAQ_API_KEY is missing, invalid, or revoked. Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "no_locations_found",
- "no_search_scope",
- "upstream_error",
- "rate_limited",
- "upstream_timeout",
- "invalid_api_key"
-]New value: +[
+ "no_locations_found",
+ "page_exhausted",
+ "no_search_scope",
+ "invalid_search_scope",
+ "upstream_error",
+ "rate_limited",
+ "upstream_timeout",
+ "invalid_api_key"
+]
changedOutput schema / properties / locations / description
Previous value: -"Matching stations. Empty array means no monitoring coverage for the query — NOT clean air. Widen the radius, try openaq_list_countries, or use the modeled open-meteo air-quality tool."New value: +"Matching stations on this page, never empty: a query with no match fails with no_locations_found (no monitoring coverage, NOT clean air), and a page past the last with page_exhausted."
changedOutput schema / properties / locations / items / properties / country / properties / code / description
Previous value: -"ISO 3166-1 alpha-2 country code"New value: +"OpenAQ country code: ISO 3166-1 alpha-2, or \"-99\" where OpenAQ lists none"
addedOutput schema / properties / locations / items / properties / providerId
Added value: +{
+ "description": "OpenAQ provider id — pass as providersId to restrict a search to this network. Null when OpenAQ lists no provider.",
+ "type": [
+ "number",
+ "null"
+ ]
+}
changedOutput schema / properties / locations / items / required
Previous value: -[
- "id",
- "name",
- "locality",
- "country",
- "coordinates",
- "distanceMeters",
- "provider",
- "isMonitor",
- "isMobile",
- "parameters",
- "datetimeLast",
- "datetimeFirst"
-]New value: +[
+ "id",
+ "name",
+ "locality",
+ "country",
+ "coordinates",
+ "distanceMeters",
+ "provider",
+ "providerId",
+ "isMonitor",
+ "isMobile",
+ "parameters",
+ "datetimeLast",
+ "datetimeFirst"
+]
changedOutput schema / properties / notice / description
Previous value: -"Guidance when OpenAQ reports a lower-bound total without the result set hitting the limit."New value: +"Guidance on a full page: the next page to request, or how to narrow the search."
changedOutput schema / properties / totalCount / description
Previous value: -"Total matching stations before the limit. A floor (not an exact count) when totalCountIsLowerBound is true."New value: +"Stations counted through this page: (page − 1) × limit plus the stations returned. Exact on a page that came back short of the limit (the last page); a floor when totalCountIsLowerBound is true."
changedOutput schema / properties / totalCountIsLowerBound / description
Previous value: -"True when OpenAQ reported a lower bound (\">N\"): totalCount is a floor and more stations match than the count shown."New value: +"True when this page came back full: at least totalCount stations match, and the next page may hold more."
changedOutput schema / properties / truncated / description
Previous value: -"True when the station list was capped at the limit."New value: +"True when this page came back full (the limit was reached), so the next page may hold more stations."