{"openapi":"3.1.0","info":{"title":"Cloudflare Custom Hostnames (BYOK) API","version":"0.1.0","description":"Cloudflare Custom Hostnames (BYOK) lets an AI assistant read your own Cloudflare Custom Hostnames data through the Cloudflare Custom Hostnames API with a key you supply (Cloudflare API token with SSL and Certificates read permission). Read-only: 6 tools (list_custom_hostnames, get_custom_hostname, get_fallback_origin, get_custom_hostname_quota, list_hostname_tls_settings,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-cloudflare-custom-hostnames.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-cloudflare-custom-hostnames/docs"},"termsOfService":"https://connectorbay.com/byok-cloudflare-custom-hostnames/terms"},"servers":[{"url":"https://byok-cloudflare-custom-hostnames.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-cloudflare-custom-hostnames/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_custom_hostnames":{"post":{"operationId":"list_custom_hostnames","summary":"List a zone's custom hostnames (customer domains served through the zone) with hostname status, origin settings and cert","description":"List a zone's custom hostnames (customer domains served through the zone) with hostname status, origin settings and certificate status, method, authority and expiry. Certificate keys and validation tokens are not returned. Use for \"Which customer hostnames are pending certificate validation 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"},"hostname":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only hostnames containing this text.","title":"Hostname"},"hostname_exact":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only the hostname equal to this value.","title":"Hostname Exact"},"hostname_starts_with":{"anyOf":[{"maxLength":253,"type":"string"},{"type":"null"}],"default":null,"description":"Only hostnames starting with this text.","title":"Hostname Starts With"},"ssl_status":{"anyOf":[{"enum":["initializing","pending_validation","deleted","pending_issuance","pending_deployment","pending_deletion","pending_expiration","expired","active","initializing_timed_out"],"type":"string"},{"type":"null"}],"default":null,"description":"Only hostnames whose certificate has this status.","title":"Ssl Status"},"hostname_status":{"anyOf":[{"enum":["active","pending","active_redeploying","moved","pending_deletion","deleted","pending_blocked","pending_migration","pending_provisioned","test_pending"],"type":"string"},{"type":"null"}],"default":null,"description":"Only hostnames with this status.","title":"Hostname Status"},"certificate_authority":{"anyOf":[{"enum":["google","lets_encrypt","ssl_com"],"type":"string"},{"type":"null"}],"default":null,"description":"Only certificates from this authority.","title":"Certificate Authority"},"wildcard":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True or false: only wildcard or non-wildcard hostnames.","title":"Wildcard"},"order":{"anyOf":[{"enum":["ssl","ssl_status"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by ssl or ssl_status.","title":"Order"},"direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction.","title":"Direction"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (5 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_custom_hostnamesArguments","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_custom_hostname":{"post":{"operationId":"get_custom_hostname","summary":"Get one custom hostname with status, origin override, certificate details and verification errors. Certificate keys and ","description":"Get one custom hostname with status, origin override, certificate details and verification errors. Certificate keys and validation tokens are not returned. Use for \"Show custom hostname 0d89c70d-ad9f-4843-b99f-6cc0252067e9\".","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"},"custom_hostname_id":{"description":"Custom hostname id (UUID), as returned by list_custom_hostnames.","maxLength":64,"title":"Custom Hostname Id","type":"string"}},"required":["zone_id","custom_hostname_id"],"title":"get_custom_hostnameArguments","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_fallback_origin":{"post":{"operationId":"get_fallback_origin","summary":"Get the fallback origin that serves custom hostnames without their own origin, with its deployment status. Use for \"What","description":"Get the fallback origin that serves custom hostnames without their own origin, with its deployment status. Use for \"What is the fallback origin for my custom hostnames\".","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_fallback_originArguments","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_custom_hostname_quota":{"post":{"operationId":"get_custom_hostname_quota","summary":"Show the custom hostname quota of a zone: allocated, hard cap, used and whether it is exceeded. Use for \"How many custom","description":"Show the custom hostname quota of a zone: allocated, hard cap, used and whether it is exceeded. Use for \"How many custom hostnames can my zone have and how many are used\".","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_custom_hostname_quotaArguments","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_hostname_tls_settings":{"post":{"operationId":"list_hostname_tls_settings","summary":"List the per-hostname TLS settings of one kind (ciphers, min_tls_version or http2) with value and status per hostname. U","description":"List the per-hostname TLS settings of one kind (ciphers, min_tls_version or http2) with value and status per hostname. Use for \"What minimum TLS version is set for each custom hostname\".","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"},"setting_id":{"description":"Which per-hostname TLS setting: ciphers, min_tls_version or http2.","enum":["ciphers","min_tls_version","http2"],"title":"Setting Id","type":"string"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (5 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","setting_id"],"title":"list_hostname_tls_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_hostname_tls_setting":{"post":{"operationId":"get_hostname_tls_setting","summary":"Get one per-hostname TLS setting (ciphers, min_tls_version or http2) for a hostname. Use for \"What min TLS version does ","description":"Get one per-hostname TLS setting (ciphers, min_tls_version or http2) for a hostname. Use for \"What min TLS version does shop.customer.example use\".","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"},"setting_id":{"description":"Which per-hostname TLS setting: ciphers, min_tls_version or http2.","enum":["ciphers","min_tls_version","http2"],"title":"Setting Id","type":"string"},"hostname":{"description":"Hostname the setting applies to, for example 'shop.customer.example'.","maxLength":253,"title":"Hostname","type":"string"}},"required":["zone_id","setting_id","hostname"],"title":"get_hostname_tls_settingArguments","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}}}}