{"openapi":"3.1.0","info":{"title":"Cloudflare IP Firewall (BYOK) API","version":"0.1.0","description":"Cloudflare IP Firewall (BYOK) lets an AI assistant read your own Cloudflare IP Firewall data through the Cloudflare IP Firewall API with a key you supply (Cloudflare API token with Firewall Services read permission). Read-only: 9 tools (list_zone_access_rules, list_account_access_rules, get_zone_access_rule, get_account_access_rule, list_lockdown_rules, get_lockdown_rule, list_user_agent_rules,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-cloudflare-ip-firewall.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-cloudflare-ip-firewall/docs"},"termsOfService":"https://connectorbay.com/byok-cloudflare-ip-firewall/terms"},"servers":[{"url":"https://byok-cloudflare-ip-firewall.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-cloudflare-ip-firewall/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_zone_access_rules":{"post":{"operationId":"list_zone_access_rules","summary":"List the IP Access rules of a zone (block, challenge or allow by IP, range, ASN or country) with notes and dates. Use fo","description":"List the IP Access rules of a zone (block, challenge or allow by IP, range, ASN or country) with notes and dates. Use for \"Which IPs or countries are blocked on my Cloudflare zone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"mode":{"anyOf":[{"enum":["block","challenge","whitelist","js_challenge","managed_challenge"],"type":"string"},{"type":"null"}],"default":null,"description":"Only rules with this action.","title":"Mode"},"target":{"anyOf":[{"enum":["ip","ip_range","asn","country"],"type":"string"},{"type":"null"}],"default":null,"description":"Only rules for this kind of target.","title":"Target"},"value":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules for this IP, range, ASN or country code.","title":"Value"},"notes":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules whose note contains this text.","title":"Notes"},"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 1000).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; result_info.total_count says how many exist.","title":"Page"}},"required":["zone_id"],"title":"list_zone_access_rulesArguments","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_account_access_rules":{"post":{"operationId":"list_account_access_rules","summary":"List the account-level IP Access rules (block, challenge or allow by IP, range, ASN or country) with notes and dates. Us","description":"List the account-level IP Access rules (block, challenge or allow by IP, range, ASN or country) with notes and dates. Use for \"Which IP Access rules apply to my whole Cloudflare account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Cloudflare account id (32-character hex string shown in the dashboard URL, or from the Cloudflare connector's list_accounts).","maxLength":40,"title":"Account Id","type":"string"},"mode":{"anyOf":[{"enum":["block","challenge","whitelist","js_challenge","managed_challenge"],"type":"string"},{"type":"null"}],"default":null,"description":"Only rules with this action.","title":"Mode"},"target":{"anyOf":[{"enum":["ip","ip_range","asn","country"],"type":"string"},{"type":"null"}],"default":null,"description":"Only rules for this kind of target.","title":"Target"},"value":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules for this IP, range, ASN or country code.","title":"Value"},"notes":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules whose note contains this text.","title":"Notes"},"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 1000).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; result_info.total_count says how many exist.","title":"Page"}},"required":["account_id"],"title":"list_account_access_rulesArguments","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_zone_access_rule":{"post":{"operationId":"get_zone_access_rule","summary":"Get one zone IP Access rule by id. Use for \"What does IP Access rule 92f17202 do\".","description":"Get one zone IP Access rule by id. Use for \"What does IP Access rule 92f17202 do\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"rule_id":{"description":"IP Access rule id (32-character hex string), as returned by the list tools.","maxLength":40,"title":"Rule Id","type":"string"}},"required":["zone_id","rule_id"],"title":"get_zone_access_ruleArguments","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_account_access_rule":{"post":{"operationId":"get_account_access_rule","summary":"Get one account-level IP Access rule by id. Use for \"What does account IP Access rule 92f17202 do\".","description":"Get one account-level IP Access rule by id. Use for \"What does account IP Access rule 92f17202 do\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Cloudflare account id (32-character hex string shown in the dashboard URL, or from the Cloudflare connector's list_accounts).","maxLength":40,"title":"Account Id","type":"string"},"rule_id":{"description":"IP Access rule id (32-character hex string), as returned by the list tools.","maxLength":40,"title":"Rule Id","type":"string"}},"required":["account_id","rule_id"],"title":"get_account_access_ruleArguments","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_lockdown_rules":{"post":{"operationId":"list_lockdown_rules","summary":"List Zone Lockdown rules (URLs restricted to allowed IPs) with description, URLs, allowed IP configurations and paused f","description":"List Zone Lockdown rules (URLs restricted to allowed IPs) with description, URLs, allowed IP configurations and paused flag. Use for \"Which URLs are locked down to specific IPs on my zone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"description_search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules whose description contains this text.","title":"Description Search"},"ip_search":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules that include this IP.","title":"Ip Search"},"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 1000).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; result_info.total_count says how many exist.","title":"Page"}},"required":["zone_id"],"title":"list_lockdown_rulesArguments","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_lockdown_rule":{"post":{"operationId":"get_lockdown_rule","summary":"Get one Zone Lockdown rule. Use for \"Which IPs may reach the locked down admin URL\".","description":"Get one Zone Lockdown rule. Use for \"Which IPs may reach the locked down admin URL\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"lock_downs_id":{"description":"Zone Lockdown rule id, as returned by list_lockdown_rules.","maxLength":40,"title":"Lock Downs Id","type":"string"}},"required":["zone_id","lock_downs_id"],"title":"get_lockdown_ruleArguments","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_user_agent_rules":{"post":{"operationId":"list_user_agent_rules","summary":"List User Agent blocking rules of a zone with the matched user agent, action and paused flag. Use for \"Which user agents","description":"List User Agent blocking rules of a zone with the matched user agent, action and paused flag. Use for \"Which user agents are blocked on my zone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"user_agent":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules matching this user agent text.","title":"User Agent"},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for paused rules only, false for active ones.","title":"Paused"},"per_page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 1000).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; result_info.total_count says how many exist.","title":"Page"}},"required":["zone_id"],"title":"list_user_agent_rulesArguments","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_firewall_rules":{"post":{"operationId":"list_firewall_rules","summary":"List the legacy Firewall Rules of a zone (action, description, priority, paused flag). Filter expressions are not includ","description":"List the legacy Firewall Rules of a zone (action, description, priority, paused flag). Filter expressions are not included; use the rulesets API for current WAF rules. Use for \"Which legacy firewall rules does my zone have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"action":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules with this action, for example block or challenge.","title":"Action"},"description":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only rules whose description matches this text.","title":"Description"},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for paused rules only, false for active ones.","title":"Paused"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; result_info.total_count says how many exist.","title":"Page"}},"required":["zone_id"],"title":"list_firewall_rulesArguments","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_page_rules":{"post":{"operationId":"list_page_rules","summary":"List the Page Rules of a zone (targets and actions) in priority order. Use for \"Which page rules does my Cloudflare zone","description":"List the Page Rules of a zone (targets and actions) in priority order. Use for \"Which page rules does my Cloudflare zone have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Cloudflare zone id (32-character hex string, from the Cloudflare connector's list_zones).","maxLength":40,"title":"Zone Id","type":"string"},"status":{"anyOf":[{"enum":["active","disabled"],"type":"string"},{"type":"null"}],"default":null,"description":"Only rules in this status.","title":"Status"},"order":{"anyOf":[{"enum":["status","priority"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Order"},"direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction.","title":"Direction"}},"required":["zone_id"],"title":"list_page_rulesArguments","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}}}}