Download a translation of a document
A URL to download the translated file of one language of the document. The translation must be GENERATED: check its status with GET /v1/documents/{id}/translations/{code}. The file is stored a few seconds after the translation becomes GENERATED, and until then the call answers 409.
The answer does not hold the file. Download it with a GET to url, with no Authorization header, before expiresAt: the URL works for 15 minutes. Ask for a new URL after that. Anyone who holds the URL can download the file, so do not share or log it.
An id that belongs to an older revision of the document answers 303 and points to the download of the same language in the latest revision. Following the redirect is a second call, and counts against the rate limit like any other.
apiKeyAuthorizationBearer <token>The key the team leader created in Redokun, sent as Authorization: Bearer rdk_.... A read key is rejected on every call that writes (any method other than GET, HEAD or OPTIONS).
id*integerIdentifier of the document
1 <= value <= 2147483647code*stringCode of the target language, as in the language of the translation, e.g. it or pt-BR. Not case sensitive
^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{1,8})*$A URL to download the translated file
application/json- response
url*stringDownload the translated file with a GET to this URL, with no Authorization header. Anyone who holds the URL can download the file until it expires, so do not share or log it
uriexpiresAt*stringWhen the URL stops working. Ask for a new one after that
date-timefilename*stringThe name the file is saved under: the name of the original file followed by the target language
links*array<>The resources related to this one. Follow these links instead of building the URLs yourself, so a change of path does not break the client
curl -X GET 'https://api.redokun.com/v1/documents/1/translations/string/download'{ "url": "https://redokun-documents.s3.eu-west-1.amazonaws.com/documents/981/translated/it/a1b2c3.docx?X-Amz-Expires=900&X-Amz-Signature=...", "expiresAt": "2026-09-16T11:55:00+00:00", "filename": "brochure-Italian.docx", "links": [ { "rel": "self", "href": "https://api.redokun.com/v1/documents/981/translations/it/download" }, { "rel": "translation", "href": "https://api.redokun.com/v1/documents/981/translations/it" }, { "rel": "translations", "href": "https://api.redokun.com/v1/documents/981/translations" }, { "rel": "document", "href": "https://api.redokun.com/v1/documents/981" } ]}Add or update a translation of a document PUT
Adds a target language to the document, or changes the translators of a language it already has. The `translators` of the body replace the current ones: a translator left out is removed from the language, and an empty list assigns the language to you. Sending the same body again changes nothing. An address of a member of the team (a manager, you included, or a translator) is assigned as it is. Any other address is invited to the team as a translator, within the translator seats of the plan, and receives the invitation by email. A translator invited by a call that fails later stays invited. Each translator who is not you gets a translation job by email, like an assignment from the app. The document can be `UPLOADED` or `INDEXED`. A new language of an indexed document can be translated at once. The translators of a translation can change whatever its status.
Generate a translation of a document POST
Generates the translated file of one language of the document. The document must be `INDEXED`, and the translation must be `CONFIRMED`, or `CREATED` with `confirm=true`, which confirms it first. The generation runs in the background. The answer holds the translation, now `GENERATING`. Poll its `self` link, the same as `GET /v1/documents/{id}/translations/{code}`, every 10 to 30 seconds until the translation is `GENERATED`, then follow the `download` link of this answer. Generating spends words of the plan. When the plan has not enough words left, the call answers 402 and the generation does not start. A translation confirmed by the same call stays `CONFIRMED`: once words are added, call again without `confirm`.