{"openapi":"3.1.0","info":{"title":"Cloudflare DNS Services (BYOK) API","version":"0.1.0","description":"Cloudflare DNS Services (BYOK) lets an AI assistant read your own Cloudflare DNS Services data through the Cloudflare DNS Services API with a key you supply (Cloudflare API token with DNS read permission). Read-only: 11 tools (get_zone_dns_settings, get_account_dns_settings, get_dnssec, get_dns_analytics_report, get_dns_analytics_by_time, list_dns_firewall_clusters, get_dns_firewall_cluster,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-cloudflare-dns-services.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-cloudflare-dns-services/docs"},"termsOfService":"https://connectorbay.com/byok-cloudflare-dns-services/terms"},"servers":[{"url":"https://byok-cloudflare-dns-services.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-cloudflare-dns-services/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/get_zone_dns_settings":{"post":{"operationId":"get_zone_dns_settings","summary":"Get the DNS settings of a zone: zone mode, CNAME flattening, multi-provider, secondary overrides, NS TTL and SOA values.","description":"Get the DNS settings of a zone: zone mode, CNAME flattening, multi-provider, secondary overrides, NS TTL and SOA values. Use for \"How is DNS configured for 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"}},"required":["zone_id"],"title":"get_zone_dns_settingsArguments","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_dns_settings":{"post":{"operationId":"get_account_dns_settings","summary":"Get the account-level DNS defaults applied to new zones: zone mode, flattening, NS TTL, SOA and whether DNS-only is enfo","description":"Get the account-level DNS defaults applied to new zones: zone mode, flattening, NS TTL, SOA and whether DNS-only is enforced. Use for \"What DNS defaults does my Cloudflare account apply to new zones\".","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"}},"required":["account_id"],"title":"get_account_dns_settingsArguments","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_dnssec":{"post":{"operationId":"get_dnssec","summary":"Get the DNSSEC status of a zone with algorithm, digest type, key tag, DS record and flags (public key and DS record are ","description":"Get the DNSSEC status of a zone with algorithm, digest type, key tag, DS record and flags (public key and DS record are public data). Use for \"Is DNSSEC active 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"}},"required":["zone_id"],"title":"get_dnssecArguments","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_dns_analytics_report":{"post":{"operationId":"get_dns_analytics_report","summary":"Get a DNS analytics report for a zone: query metrics grouped by dimensions over a period. Read-only and free. Use for \"H","description":"Get a DNS analytics report for a zone: query metrics grouped by dimensions over a period. Read-only and free. Use for \"How many DNS queries did my Cloudflare zone get by record type yesterday\".","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"},"metrics":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated metrics to query, for example queryCount,uncachedCount.","title":"Metrics"},"dimensions":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated dimensions to group by, for example queryType or responseCode.","title":"Dimensions"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period in ISO 8601 format, for example 2026-01-01T00:00:00Z.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period in ISO 8601 format.","title":"Until"},"limit":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of rows returned.","title":"Limit"},"sort":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated dimensions to sort by, each prefixed by + (ascending) or - (descending), for example -queryCount.","title":"Sort"},"filters":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Segmentation filter in 'attribute operator value' form, for example responseCode==NOERROR,queryType==A.","title":"Filters"}},"required":["zone_id"],"title":"get_dns_analytics_reportArguments","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_dns_analytics_by_time":{"post":{"operationId":"get_dns_analytics_by_time","summary":"Get a DNS analytics report for a zone broken down by time interval (hour, day and so on). Use for \"Show hourly DNS query","description":"Get a DNS analytics report for a zone broken down by time interval (hour, day and so on). Use for \"Show hourly DNS query counts for 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"},"metrics":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated metrics to query, for example queryCount,uncachedCount.","title":"Metrics"},"dimensions":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated dimensions to group by, for example queryType or responseCode.","title":"Dimensions"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the period in ISO 8601 format, for example 2026-01-01T00:00:00Z.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the period in ISO 8601 format.","title":"Until"},"limit":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of rows returned.","title":"Limit"},"sort":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated dimensions to sort by, each prefixed by + (ascending) or - (descending), for example -queryCount.","title":"Sort"},"filters":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Segmentation filter in 'attribute operator value' form, for example responseCode==NOERROR,queryType==A.","title":"Filters"},"time_delta":{"anyOf":[{"enum":["all","auto","year","quarter","month","week","day","hour","dekaminute","minute"],"type":"string"},{"type":"null"}],"default":"hour","description":"Unit of time to group data by.","title":"Time Delta"}},"required":["zone_id"],"title":"get_dns_analytics_by_timeArguments","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_dns_firewall_clusters":{"post":{"operationId":"list_dns_firewall_clusters","summary":"List the DNS Firewall clusters of an account with upstream IPs, Cloudflare-assigned IPs, cache TTLs, rate limit and atta","description":"List the DNS Firewall clusters of an account with upstream IPs, Cloudflare-assigned IPs, cache TTLs, rate limit and attack mitigation. Use for \"Which DNS Firewall clusters do I have on Cloudflare\".","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"},"per_page":{"anyOf":[{"maximum":100,"minimum":5,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (5 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":["account_id"],"title":"list_dns_firewall_clustersArguments","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_dns_firewall_cluster":{"post":{"operationId":"get_dns_firewall_cluster","summary":"Get one DNS Firewall cluster with upstream IPs, assigned IPs, cache TTLs, rate limit and attack mitigation settings. Use","description":"Get one DNS Firewall cluster with upstream IPs, assigned IPs, cache TTLs, rate limit and attack mitigation settings. Use for \"How is DNS Firewall cluster corp-resolver configured\".","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"},"dns_firewall_id":{"description":"DNS Firewall cluster id (from list_dns_firewall_clusters).","maxLength":40,"title":"Dns Firewall Id","type":"string"}},"required":["account_id","dns_firewall_id"],"title":"get_dns_firewall_clusterArguments","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_secondary_dns_peers":{"post":{"operationId":"list_secondary_dns_peers","summary":"List the secondary DNS peers of an account with IP, port, IXFR setting and the linked TSIG id (never the TSIG secret). U","description":"List the secondary DNS peers of an account with IP, port, IXFR setting and the linked TSIG id (never the TSIG secret). Use for \"Which secondary DNS peers are set up on Cloudflare\".","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"}},"required":["account_id"],"title":"list_secondary_dns_peersArguments","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_secondary_dns_acls":{"post":{"operationId":"list_secondary_dns_acls","summary":"List the secondary DNS ACLs of an account with name and allowed IP range. Use for \"Which IP ranges may transfer my Cloud","description":"List the secondary DNS ACLs of an account with name and allowed IP range. Use for \"Which IP ranges may transfer my Cloudflare secondary DNS zones\".","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"}},"required":["account_id"],"title":"list_secondary_dns_aclsArguments","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_secondary_zone_config":{"post":{"operationId":"get_secondary_zone_config","summary":"Get the incoming zone transfer (secondary) configuration of a zone: peers, refresh interval, SOA serial and last check t","description":"Get the incoming zone transfer (secondary) configuration of a zone: peers, refresh interval, SOA serial and last check time. Use for \"Is my Cloudflare zone configured as a secondary 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"}},"required":["zone_id"],"title":"get_secondary_zone_configArguments","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_custom_nameservers":{"post":{"operationId":"list_custom_nameservers","summary":"List the account custom nameservers with name, set number, verification status and glue records. Use for \"Which custom n","description":"List the account custom nameservers with name, set number, verification status and glue records. Use for \"Which custom nameservers does my Cloudflare account have\".","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"}},"required":["account_id"],"title":"list_custom_nameserversArguments","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}}}}