{"openapi":"3.1.0","info":{"title":"EPA AQS (BYOK) API","version":"0.1.0","description":"EPA AQS (BYOK) lets an AI assistant read your own EPA AQS data through the EPA AQS API with a key you supply (AQS API key). Read-only: 10 tools (list_states, list_counties, list_sites, list_parameter_classes, list_parameters, list_monitors_in_county, get_daily_summary_by_county, get_daily_summary_by_state, get_annual_summary_by_county, get_annual_summary_by_state). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-epaaqs.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-epaaqs/docs"},"termsOfService":"https://connectorbay.com/byok-epaaqs/terms"},"servers":[{"url":"https://byok-epaaqs.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-epaaqs/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_states":{"post":{"operationId":"list_states","summary":"List U.S. states with their two-digit FIPS codes used by the other AQS tools. Use for \"What is the AQS state code for Te","description":"List U.S. states with their two-digit FIPS codes used by the other AQS tools. Use for \"What is the AQS state code for Texas\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_counties":{"post":{"operationId":"list_counties","summary":"List the counties of one state with their three-digit codes. Use for \"Which county codes does North Carolina have in AQS","description":"List the counties of one state with their three-digit codes. Use for \"Which county codes does North Carolina have in AQS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"}},"required":["state"],"title":"list_countiesArguments","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_sites":{"post":{"operationId":"list_sites","summary":"List the AQS monitoring site numbers in one county. Use for \"Which AQS monitoring sites are in Durham County, North Caro","description":"List the AQS monitoring site numbers in one county. Use for \"Which AQS monitoring sites are in Durham County, North Carolina\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"},"county":{"description":"Three-digit county FIPS code with leading zeros, for example 063 (list_counties gives them for a state).","maxLength":3,"title":"County","type":"string"}},"required":["state","county"],"title":"list_sitesArguments","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_parameter_classes":{"post":{"operationId":"list_parameter_classes","summary":"List the classes (groups) of pollutant parameters, such as CRITERIA or HAPS. Use for \"What groups of air pollutants does","description":"List the classes (groups) of pollutant parameters, such as CRITERIA or HAPS. Use for \"What groups of air pollutants does AQS cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_parameter_classesArguments","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_parameters":{"post":{"operationId":"list_parameters","summary":"List parameter codes (pollutants and measurements) in one class; ALL lists every parameter. Use for \"What is the AQS par","description":"List parameter codes (pollutants and measurements) in one class; ALL lists every parameter. Use for \"What is the AQS parameter code for ozone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pc":{"description":"Parameter class code from list_parameter_classes, or ALL.","maxLength":40,"title":"Pc","type":"string"}},"required":["pc"],"title":"list_parametersArguments","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_monitors_in_county":{"post":{"operationId":"list_monitors_in_county","summary":"List the monitors (samplers) in a county that operated in a date window, with site, parameter, operating dates and agenc","description":"List the monitors (samplers) in a county that operated in a date window, with site, parameter, operating dates and agency. Answer has a Header (status, row count) and a Body of rows. Please keep to the EPA limit of about 10 requests per minute. Use for \"Which ozone monitors operated in Durham County, NC during 2023\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"},"county":{"description":"Three-digit county FIPS code with leading zeros, for example 063 (list_counties gives them for a state).","maxLength":3,"title":"County","type":"string"},"bdate":{"description":"Begin date YYYYMMDD, for example 20230101.","maximum":21991231,"minimum":19000101,"title":"Bdate","type":"integer"},"edate":{"description":"End date YYYYMMDD, in the same calendar year as bdate for summary data, for example 20231231.","maximum":21991231,"minimum":19000101,"title":"Edate","type":"integer"},"param":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Optional AQS parameter code(s): 5-digit codes, up to 5 separated by commas, for example 44201.","title":"Param"}},"required":["state","county","bdate","edate"],"title":"list_monitors_in_countyArguments","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_daily_summary_by_county":{"post":{"operationId":"get_daily_summary_by_county","summary":"Get daily summary values (such as mean and maximum) of one to five pollutants for a county. bdate and edate must fall in","description":"Get daily summary values (such as mean and maximum) of one to five pollutants for a county. bdate and edate must fall in the same year. Answer has a Header (status, row count) and a Body of rows. Please keep to the EPA limit of about 10 requests per minute. Use for \"What were the daily ozone readings in Durham County, NC in July 2023\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"},"county":{"description":"Three-digit county FIPS code with leading zeros, for example 063 (list_counties gives them for a state).","maxLength":3,"title":"County","type":"string"},"param":{"description":"AQS parameter code(s): 5-digit codes, up to 5 separated by commas, for example 44201 (ozone) or 88101 (PM2.5). list_parameters shows codes.","maxLength":40,"title":"Param","type":"string"},"bdate":{"description":"Begin date YYYYMMDD, for example 20230101.","maximum":21991231,"minimum":19000101,"title":"Bdate","type":"integer"},"edate":{"description":"End date YYYYMMDD, in the same calendar year as bdate for summary data, for example 20231231.","maximum":21991231,"minimum":19000101,"title":"Edate","type":"integer"}},"required":["state","county","param","bdate","edate"],"title":"get_daily_summary_by_countyArguments","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_daily_summary_by_state":{"post":{"operationId":"get_daily_summary_by_state","summary":"Get daily summary values of one to five pollutants for every monitor in a state. bdate and edate must fall in the same y","description":"Get daily summary values of one to five pollutants for every monitor in a state. bdate and edate must fall in the same year; keep the window short, results are large. Answer has a Header (status, row count) and a Body of rows. Please keep to the EPA limit of about 10 requests per minute. Use for \"Show the daily PM2.5 summaries for Oregon for one week in 2023\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"},"param":{"description":"AQS parameter code(s): 5-digit codes, up to 5 separated by commas, for example 44201 (ozone) or 88101 (PM2.5). list_parameters shows codes.","maxLength":40,"title":"Param","type":"string"},"bdate":{"description":"Begin date YYYYMMDD, for example 20230101.","maximum":21991231,"minimum":19000101,"title":"Bdate","type":"integer"},"edate":{"description":"End date YYYYMMDD, in the same calendar year as bdate for summary data, for example 20231231.","maximum":21991231,"minimum":19000101,"title":"Edate","type":"integer"}},"required":["state","param","bdate","edate"],"title":"get_daily_summary_by_stateArguments","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_annual_summary_by_county":{"post":{"operationId":"get_annual_summary_by_county","summary":"Get yearly summary statistics (mean, maxima, percentiles, observation counts) of one to five pollutants for a county. bd","description":"Get yearly summary statistics (mean, maxima, percentiles, observation counts) of one to five pollutants for a county. bdate and edate must fall in the same year. Answer has a Header (status, row count) and a Body of rows. Please keep to the EPA limit of about 10 requests per minute. Use for \"What was the annual average PM2.5 in Los Angeles County in 2022\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"},"county":{"description":"Three-digit county FIPS code with leading zeros, for example 063 (list_counties gives them for a state).","maxLength":3,"title":"County","type":"string"},"param":{"description":"AQS parameter code(s): 5-digit codes, up to 5 separated by commas, for example 44201 (ozone) or 88101 (PM2.5). list_parameters shows codes.","maxLength":40,"title":"Param","type":"string"},"bdate":{"description":"Begin date YYYYMMDD, for example 20230101.","maximum":21991231,"minimum":19000101,"title":"Bdate","type":"integer"},"edate":{"description":"End date YYYYMMDD, in the same calendar year as bdate for summary data, for example 20231231.","maximum":21991231,"minimum":19000101,"title":"Edate","type":"integer"}},"required":["state","county","param","bdate","edate"],"title":"get_annual_summary_by_countyArguments","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_annual_summary_by_state":{"post":{"operationId":"get_annual_summary_by_state","summary":"Get yearly summary statistics of one to five pollutants for every monitor in a state. bdate and edate must fall in the s","description":"Get yearly summary statistics of one to five pollutants for every monitor in a state. bdate and edate must fall in the same year. Answer has a Header (status, row count) and a Body of rows. Please keep to the EPA limit of about 10 requests per minute. Use for \"Compare the annual ozone summaries of all monitors in Colorado for 2022\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"state":{"description":"Two-digit state FIPS code with leading zero, for example 06 for California (list_states gives all).","maxLength":2,"title":"State","type":"string"},"param":{"description":"AQS parameter code(s): 5-digit codes, up to 5 separated by commas, for example 44201 (ozone) or 88101 (PM2.5). list_parameters shows codes.","maxLength":40,"title":"Param","type":"string"},"bdate":{"description":"Begin date YYYYMMDD, for example 20230101.","maximum":21991231,"minimum":19000101,"title":"Bdate","type":"integer"},"edate":{"description":"End date YYYYMMDD, in the same calendar year as bdate for summary data, for example 20231231.","maximum":21991231,"minimum":19000101,"title":"Edate","type":"integer"}},"required":["state","param","bdate","edate"],"title":"get_annual_summary_by_stateArguments","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}}}}