Docsbook
Overview

Upload translation

MCPupload_translationWRITE$0.02 / call

Upload or replace a translation for a workspace document. Creates a draft by default. This is how an EXTERNAL translator returns its work: the translation webhook notifies you, you translate, you call this. Pass back the source_blob_sha the webhook gave you as source_hash and set origin 'external_api', or the freshness surfaces cannot tell which commit your translation belongs to. REQUIRES PRO or higher. BEFORE WRITING, call docsbook_expert with what you are trying to achieve: it answers what this page has to do, what to read before touching it, and what would make the result wrong — and it will tell you when the evidence is too thin to write from yet. One call, cheapest on the server, changes nothing.

Arguments
workspace_idstringrequired

Numeric workspace id — OR the project as the user names it: 'owner/repo', the repo name alone, the site's display name, its docs URL or custom domain. Text is resolved server-side; an ambiguous name returns the candidates instead of guessing, so pass what the user said rather than calling list_workspaces first.

source_pathstringrequired

Source document path (e.g. 'guides/quick-start.md')

languagestringrequired

Target language code (e.g. 'es', 'fr')

contentstringrequired

Translated content

statusstringoptional

Status (default: draft) One of: draft, published, outdated.

source_hashstringoptional

Git blob sha (40 hex) of the SOURCE file this was translated FROM — pass the source_blob_sha the translation webhook delivered, verbatim. This is what makes 'is this commit translated?' answerable: without it the row records only a hash of your own output, which no commit can ever match. Omit for a hand-written translation whose freshness is a person's call.

originstringoptional

Who produced it: 'external_api' for a machine translator answering the webhook (compared against the repo like any machine translation), 'manual_upload' for a person's own words (never reported as stale). Default 'manual_upload'. One of: manual_upload, external_api.

Call it#

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "upload_translation",
    "arguments": {
      "workspace_id": "<workspace_id>",
      "source_path": "<source_path>",
      "language": "<language>",
      "content": "<content>",
      "status": "draft",
      "origin": "manual_upload"
    }
  }
}
curl -X POST 'https://docsbook.io/api/mcp/server' \
  -H 'Authorization: Bearer dbk_YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"upload_translation","arguments":{"workspace_id":"<workspace_id>","source_path":"<source_path>","language":"<language>","content":"<content>","status":"draft","origin":"manual_upload"}}}'

Try it over REST#

The same tool is callable as a plain HTTP request, no MCP client required. It runs on the same server, at the same price.

Your workspace is resolved from the API key, so workspace_id is decided server-side here and anything you send for it is ignored.

POST/api/v1/tools/upload_translation
Authorization
Authorizationstringrequired

Your API key, sent as Authorization: Bearer dbk_YOUR_API_KEY.Sent as the Authorization header. Your key is used only by your browser for this request — it is never sent to Docsbook or stored.

Body
argsobjectrequired

The arguments above, as one JSON object.

Request
curl -X POST 'https://docsbook.io/api/v1/tools/upload_translation' \
  -H 'Authorization: Bearer dbk_YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"args":{"workspace_id":"<workspace_id>","source_path":"<source_path>","language":"<language>","content":"<content>","status":"draft","origin":"manual_upload"}}'

Updated

Was this page helpful?