{"openapi":"3.1.0","info":{"title":"Cloudflare Pages (BYOK) API","version":"0.1.0","description":"Cloudflare Pages (BYOK) lets an AI assistant read your own Cloudflare Pages data through the Cloudflare Pages API with a key you supply (Cloudflare API token with Pages read permission). Read-only: 6 tools (list_projects, get_project, list_deployments, get_deployment, get_deployment_logs, list_project_domains). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-cloudflare-pages.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-cloudflare-pages/docs"},"termsOfService":"https://connectorbay.com/byok-cloudflare-pages/terms"},"servers":[{"url":"https://byok-cloudflare-pages.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-cloudflare-pages/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_projects":{"post":{"operationId":"list_projects","summary":"List Cloudflare Pages projects with subdomain, custom domains, production branch, framework, build command and the lates","description":"List Cloudflare Pages projects with subdomain, custom domains, production branch, framework, build command and the latest deployment status. Environment variables and analytics tokens are not returned. Use for \"Which Cloudflare Pages projects do I have and did the latest deploys succeed\".","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":25,"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_projectsArguments","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_project":{"post":{"operationId":"get_project","summary":"Get one Pages project: subdomain, domains, production branch, framework, build settings and latest deployment status. Us","description":"Get one Pages project: subdomain, domains, production branch, framework, build settings and latest deployment status. Use for \"What are the build settings of my Pages project my-site\".","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"},"project_name":{"description":"Name of the Cloudflare Pages project, as returned by list_projects.","maxLength":58,"title":"Project Name","type":"string"}},"required":["account_id","project_name"],"title":"get_projectArguments","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_deployments":{"post":{"operationId":"list_deployments","summary":"List the deployments of a Pages project, newest first, with environment, URL, branch, commit message and stage status. E","description":"List the deployments of a Pages project, newest first, with environment, URL, branch, commit message and stage status. Environment variables are not returned. Use for \"What were the last deployments of my Pages project\".","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"},"project_name":{"description":"Name of the Cloudflare Pages project, as returned by list_projects.","maxLength":58,"title":"Project Name","type":"string"},"env":{"anyOf":[{"enum":["production","preview"],"type":"string"},{"type":"null"}],"default":null,"description":"Only deployments of this environment.","title":"Env"},"per_page":{"anyOf":[{"maximum":100,"minimum":5,"type":"integer"},{"type":"null"}],"default":25,"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","project_name"],"title":"list_deploymentsArguments","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_deployment":{"post":{"operationId":"get_deployment","summary":"Get one Pages deployment with environment, URL, aliases, trigger (branch and commit) and the latest stage status. Use fo","description":"Get one Pages deployment with environment, URL, aliases, trigger (branch and commit) and the latest stage status. Use for \"Did Pages deployment f64788e9 succeed and which commit was it\".","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"},"project_name":{"description":"Name of the Cloudflare Pages project, as returned by list_projects.","maxLength":58,"title":"Project Name","type":"string"},"deployment_id":{"description":"Pages deployment id (UUID), as returned by list_deployments.","maxLength":64,"title":"Deployment Id","type":"string"}},"required":["account_id","project_name","deployment_id"],"title":"get_deploymentArguments","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_deployment_logs":{"post":{"operationId":"get_deployment_logs","summary":"Get the build and deploy log lines of one Pages deployment with timestamps. Use for \"Why did my last Pages build fail? S","description":"Get the build and deploy log lines of one Pages deployment with timestamps. Use for \"Why did my last Pages build fail? Show the log\".","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"},"project_name":{"description":"Name of the Cloudflare Pages project, as returned by list_projects.","maxLength":58,"title":"Project Name","type":"string"},"deployment_id":{"description":"Pages deployment id (UUID), as returned by list_deployments.","maxLength":64,"title":"Deployment Id","type":"string"}},"required":["account_id","project_name","deployment_id"],"title":"get_deployment_logsArguments","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_project_domains":{"post":{"operationId":"list_project_domains","summary":"List the custom domains attached to a Pages project with their verification status and certificate authority. Use for \"A","description":"List the custom domains attached to a Pages project with their verification status and certificate authority. Use for \"Are the custom domains of my Pages project active\".","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"},"project_name":{"description":"Name of the Cloudflare Pages project, as returned by list_projects.","maxLength":58,"title":"Project Name","type":"string"}},"required":["account_id","project_name"],"title":"list_project_domainsArguments","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}}}}