{"openapi":"3.1.0","info":{"title":"Hosted Weblate (BYOK) API","version":"0.1.0","description":"Hosted Weblate (BYOK) lets an AI assistant read your own Hosted Weblate data through the Hosted Weblate API with a key you supply (Weblate API token). Read-only: 12 tools (list_projects, get_project, get_project_statistics, list_project_languages, list_project_components, get_component, get_component_statistics, list_component_translations, get_translation, list_project_changes, search_units,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-weblate.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-weblate/docs"},"termsOfService":"https://connectorbay.com/byok-weblate/terms"},"servers":[{"url":"https://byok-weblate.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-weblate/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 translation projects the token can see on Hosted Weblate with their website links. Use for \"Which localization ","description":"List the translation projects the token can see on Hosted Weblate with their website links. Use for \"Which localization projects can I see on Hosted Weblate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"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 project's name, website and the links to its components, changes and reports. Use for \"Show the details of the W","description":"Get one project's name, website and the links to its components, changes and reports. Use for \"Show the details of the Weblate project hello\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"}},"required":["project"],"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/get_project_statistics":{"post":{"operationId":"get_project_statistics","summary":"Get translation progress totals for a project: strings, words, translated, fuzzy, failing checks and approved shares. Us","description":"Get translation progress totals for a project: strings, words, translated, fuzzy, failing checks and approved shares. Use for \"How much of the Weblate project hello is translated\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"}},"required":["project"],"title":"get_project_statisticsArguments","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_languages":{"post":{"operationId":"list_project_languages","summary":"List per-language translation progress for a project (strings, words and percentages per language). Use for \"Which langu","description":"List per-language translation progress for a project (strings, words and percentages per language). Use for \"Which languages of the Weblate project hello are least translated\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"required":["project"],"title":"list_project_languagesArguments","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_components":{"post":{"operationId":"list_project_components","summary":"List the components (translatable files or repositories) of one project with VCS, branch, file format and license. Use f","description":"List the components (translatable files or repositories) of one project with VCS, branch, file format and license. Use for \"What components does the Weblate project hello have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"required":["project"],"title":"list_project_componentsArguments","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_component":{"post":{"operationId":"get_component","summary":"Get one component's repository branch, file mask, file format, license and source language. Use for \"Show the settings o","description":"Get one component's repository branch, file mask, file format, license and source language. Use for \"Show the settings of component android in Weblate project hello\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"component":{"description":"Component URL slug within the project, for example 'android'.","maxLength":200,"title":"Component","type":"string"}},"required":["project","component"],"title":"get_componentArguments","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_component_statistics":{"post":{"operationId":"get_component_statistics","summary":"List translation progress for every language of one component, with strings, words, failing checks and approvals. Use fo","description":"List translation progress for every language of one component, with strings, words, failing checks and approvals. Use for \"How complete is each language of component android in project hello\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"component":{"description":"Component URL slug within the project, for example 'android'.","maxLength":200,"title":"Component","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"required":["project","component"],"title":"get_component_statisticsArguments","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_component_translations":{"post":{"operationId":"list_component_translations","summary":"List a component's translations (one per language) with string counts, percentages and last change time. Use for \"Which ","description":"List a component's translations (one per language) with string counts, percentages and last change time. Use for \"Which translations does component android of project hello have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"component":{"description":"Component URL slug within the project, for example 'android'.","maxLength":200,"title":"Component","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"required":["project","component"],"title":"list_component_translationsArguments","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_translation":{"post":{"operationId":"get_translation","summary":"Get one translation (a component in one language): totals, translated and fuzzy strings, failing checks and last change.","description":"Get one translation (a component in one language): totals, translated and fuzzy strings, failing checks and last change. Use for \"How far along is the Czech translation of android in project hello\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"component":{"description":"Component URL slug within the project, for example 'android'.","maxLength":200,"title":"Component","type":"string"},"language":{"description":"Language code as Weblate uses it, for example 'cs' or 'pt_BR'.","maxLength":200,"title":"Language","type":"string"}},"required":["project","component","language"],"title":"get_translationArguments","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_changes":{"post":{"operationId":"list_project_changes","summary":"List recent changes in a project (translation edits, completions, suggestions), optionally after a time or by action id.","description":"List recent changes in a project (translation edits, completions, suggestions), optionally after a time or by action id. Use for \"What changed recently in Weblate project hello\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project URL slug, for example 'hello'.","maxLength":200,"title":"Project","type":"string"},"timestamp_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only changes after this ISO 8601 time, for example 2026-10-01T00:00:00Z.","title":"Timestamp After"},"timestamp_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only changes before this ISO 8601 time.","title":"Timestamp Before"},"action":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Numeric change action id to filter by.","title":"Action"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"required":["project"],"title":"list_project_changesArguments","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/search_units":{"post":{"operationId":"search_units","summary":"Search translation strings with Weblate search syntax, returning source and target text, state and approval flags. Use f","description":"Search translation strings with Weblate search syntax, returning source and target text, state and approval flags. Use for \"Find strings containing 'Hello' in Weblate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Weblate search query, for example 'source:Hello' or 'state:<translated'.","maxLength":300,"title":"Q","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Results per page (1 to 10000, default 100).","title":"Page Size"}},"required":["q"],"title":"search_unitsArguments","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_languages":{"post":{"operationId":"list_languages","summary":"List the languages known to Weblate with code, name, writing direction and number of speakers. Use for \"Which languages ","description":"List the languages known to Weblate with code, name, writing direction and number of speakers. Use for \"Which languages does Weblate know\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Results per page (1 to 1000, default 50).","title":"Page Size"}},"title":"list_languagesArguments","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}}}}