{"openapi":"3.1.0","info":{"title":"Read the Docs (BYOK) API","version":"0.1.0","description":"Read the Docs (BYOK) lets an AI assistant read your own Read the Docs data through the Read the Docs API with a key you supply (Read the Docs API token). Read-only: 8 tools (list_projects, get_project, list_versions, get_version, list_builds, get_build, list_subprojects, list_redirects). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached;...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-readthedocs.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-readthedocs/docs"},"termsOfService":"https://connectorbay.com/byok-readthedocs/terms"},"servers":[{"url":"https://byok-readthedocs.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-readthedocs/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 the documentation projects of the token's account (Read the Docs Community) with language, repository, default vers","description":"List the documentation projects of the token's account (Read the Docs Community) with language, repository, default version and docs URL. Use for \"Which documentation projects do I host on Read the Docs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only projects with this exact name.","title":"Name"},"slug":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only the project with this slug.","title":"Slug"},"language":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Language code of the documentation, for example en or es.","title":"Language"},"programming_language":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Programming language code, for example py or js.","title":"Programming Language"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to return per page (the default is 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to skip, as used in the next-page links of the response.","title":"Offset"}},"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 Read the Docs project: repository, default version and branch, languages, tags, privacy level and docs URLs. Use","description":"Get one Read the Docs project: repository, default version and branch, languages, tags, privacy level and docs URLs. Use for \"What repository and default version does the pip docs project use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"}},"required":["project_slug"],"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_versions":{"post":{"operationId":"list_versions","summary":"List the documentation versions of a project with whether each is built and active, its type (branch or tag) and docs UR","description":"List the documentation versions of a project with whether each is built and active, its type (branch or tag) and docs URL. Use for \"Which versions of the pip docs are active and built\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only active versions, false for inactive ones.","title":"Active"},"built":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only versions with at least one successful build.","title":"Built"},"type":{"anyOf":[{"enum":["branch","tag"],"type":"string"},{"type":"null"}],"default":null,"description":"Only versions of this type.","title":"Type"},"slug":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only the version with this slug.","title":"Slug"},"verbose_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only versions with this name.","title":"Verbose Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to return per page (the default is 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to skip, as used in the next-page links of the response.","title":"Offset"}},"required":["project_slug"],"title":"list_versionsArguments","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_version":{"post":{"operationId":"get_version","summary":"Get one documentation version of a project: commit identifier, build and active flags, privacy level and download links.","description":"Get one documentation version of a project: commit identifier, build and active flags, privacy level and download links. Use for \"Is the latest version of the pip docs built and where is it hosted\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"},"version_slug":{"description":"Slug of the version, for example 'latest' or 'stable'.","maxLength":100,"title":"Version Slug","type":"string"}},"required":["project_slug","version_slug"],"title":"get_versionArguments","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_builds":{"post":{"operationId":"list_builds","summary":"List recent documentation builds of a project with version, state, success flag, duration, commit and error message. Use","description":"List recent documentation builds of a project with version, state, success flag, duration, commit and error message. Use for \"Did the latest documentation build of my project succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"},"commit":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of this commit hash.","title":"Commit"},"running":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only builds that are running now.","title":"Running"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to return per page (the default is 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to skip, as used in the next-page links of the response.","title":"Offset"}},"required":["project_slug"],"title":"list_buildsArguments","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_build":{"post":{"operationId":"get_build","summary":"Get one documentation build by its numeric ID: state, success, duration, commit and error text. Use for \"Why did Read th","description":"Get one documentation build by its numeric ID: state, success, duration, commit and error text. Use for \"Why did Read the Docs build 8592686 of pip fail\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"},"build_id":{"description":"Numeric ID of the build.","title":"Build Id","type":"integer"}},"required":["project_slug","build_id"],"title":"get_buildArguments","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_subprojects":{"post":{"operationId":"list_subprojects","summary":"List the subprojects nested under a project, with each alias and the child project slug. Use for \"Which subprojects are ","description":"List the subprojects nested under a project, with each alias and the child project slug. Use for \"Which subprojects are attached to my docs project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to return per page (the default is 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to skip, as used in the next-page links of the response.","title":"Offset"}},"required":["project_slug"],"title":"list_subprojectsArguments","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_redirects":{"post":{"operationId":"list_redirects","summary":"List the URL redirects configured for a project: source and target paths, type, HTTP status and whether each is enabled.","description":"List the URL redirects configured for a project: source and target paths, type, HTTP status and whether each is enabled. Use for \"What redirects are configured for my docs project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_slug":{"description":"Slug of the Read the Docs project, for example 'pip'.","maxLength":100,"title":"Project Slug","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to return per page (the default is 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many results to skip, as used in the next-page links of the response.","title":"Offset"}},"required":["project_slug"],"title":"list_redirectsArguments","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}}}}