{"openapi":"3.1.0","info":{"title":"IQAir (BYOK) API","version":"0.1.0","description":"IQAir (BYOK) lets an AI assistant read your own IQAir data through the IQAir API with a key you supply (IQAir API key). Read-only: 8 tools (list_countries, list_states, list_cities, get_city_air_quality, get_nearest_city_air_quality, list_stations, get_station_air_quality, get_nearest_station_air_quality). The BYOK key travels with each request, is used for that one call only and is never stored,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-iqair.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-iqair/docs"},"termsOfService":"https://connectorbay.com/byok-iqair/terms"},"servers":[{"url":"https://byok-iqair.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-iqair/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_countries":{"post":{"operationId":"list_countries","summary":"List the countries that have active air quality stations. Use for \"Which countries does IQAir cover\".","description":"List the countries that have active air quality stations. Use for \"Which countries does IQAir cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_countriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_states":{"post":{"operationId":"list_states","summary":"List the states or regions of a country that have active stations. Use for \"Which states in USA does IQAir cover\".","description":"List the states or regions of a country that have active stations. Use for \"Which states in USA does IQAir cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"description":"Country name in English as returned by list_countries, for example USA.","maxLength":80,"title":"Country","type":"string"}},"required":["country"],"title":"list_statesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_cities":{"post":{"operationId":"list_cities","summary":"List the cities of a state that have active stations. Use for \"Which cities in California does IQAir cover\".","description":"List the cities of a state that have active stations. Use for \"Which cities in California does IQAir cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"State name in English as returned by list_states, for example California.","maxLength":80,"title":"State","type":"string"},"country":{"description":"Country name in English as returned by list_countries, for example USA.","maxLength":80,"title":"Country","type":"string"}},"required":["state","country"],"title":"list_citiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_city_air_quality":{"post":{"operationId":"get_city_air_quality","summary":"Get the current air quality (US AQI and China AQI, main pollutant) and weather of a city. Detail depends on the key's pl","description":"Get the current air quality (US AQI and China AQI, main pollutant) and weather of a city. Detail depends on the key's plan. Use for \"What is the air quality in Los Angeles right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"city":{"description":"City name in English as returned by list_cities, for example Los Angeles.","maxLength":80,"title":"City","type":"string"},"state":{"description":"State name in English as returned by list_states, for example California.","maxLength":80,"title":"State","type":"string"},"country":{"description":"Country name in English as returned by list_countries, for example USA.","maxLength":80,"title":"Country","type":"string"}},"required":["city","state","country"],"title":"get_city_air_qualityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_nearest_city_air_quality":{"post":{"operationId":"get_nearest_city_air_quality","summary":"Get the current air quality and weather of the nearest city to coordinates. Use for \"What is the air quality near 34.05,","description":"Get the current air quality and weather of the nearest city to coordinates. Use for \"What is the air quality near 34.05,-118.24\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude between -90 and 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude between -180 and 180.","maximum":180,"minimum":-180,"title":"Lon","type":"number"}},"required":["lat","lon"],"title":"get_nearest_city_air_qualityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_stations":{"post":{"operationId":"list_stations","summary":"List the active air quality stations of a city with their coordinates. Use for \"Which air quality stations are in Seoul\"","description":"List the active air quality stations of a city with their coordinates. Use for \"Which air quality stations are in Seoul\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"city":{"description":"City name in English as returned by list_cities, for example Los Angeles.","maxLength":80,"title":"City","type":"string"},"state":{"description":"State name in English as returned by list_states, for example California.","maxLength":80,"title":"State","type":"string"},"country":{"description":"Country name in English as returned by list_countries, for example USA.","maxLength":80,"title":"Country","type":"string"}},"required":["city","state","country"],"title":"list_stationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_station_air_quality":{"post":{"operationId":"get_station_air_quality","summary":"Get the current air quality and weather of one station, for example for the monitoring point closest to you. Use for \"Wh","description":"Get the current air quality and weather of one station, for example for the monitoring point closest to you. Use for \"What is the air quality at the Gangnam-gu station in Seoul\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"station":{"description":"Station name in English as returned by list_stations, for example Gangnam-gu.","maxLength":120,"title":"Station","type":"string"},"city":{"description":"City name in English as returned by list_cities, for example Los Angeles.","maxLength":80,"title":"City","type":"string"},"state":{"description":"State name in English as returned by list_states, for example California.","maxLength":80,"title":"State","type":"string"},"country":{"description":"Country name in English as returned by list_countries, for example USA.","maxLength":80,"title":"Country","type":"string"}},"required":["station","city","state","country"],"title":"get_station_air_qualityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_nearest_station_air_quality":{"post":{"operationId":"get_nearest_station_air_quality","summary":"Get the current air quality and weather of the nearest station to coordinates. Use for \"What is the air quality at the m","description":"Get the current air quality and weather of the nearest station to coordinates. Use for \"What is the air quality at the monitoring station nearest 37.50,127.00\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude between -90 and 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude between -180 and 180.","maximum":180,"minimum":-180,"title":"Lon","type":"number"}},"required":["lat","lon"],"title":"get_nearest_station_air_qualityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}