APIBeta
Documents

Download a translation of a document

GET
/v1/documents/{id}/translations/{code}/download

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.

Authorization

apiKey
headerAuthorizationBearer <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).

Path Parameters

id*integer

Identifier of the document

Range1 <= value <= 2147483647
code*string

Code of the target language, as in the language of the translation, e.g. it or pt-BR. Not case sensitive

Match^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{1,8})*$

Response Body

A URL to download the translated file

application/json
  1. response
url*string

Download 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

Formaturi
expiresAt*string

When the URL stops working. Ask for a new one after that

Formatdate-time
filename*string

The 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

Example Request
curl -X GET 'https://api.redokun.com/v1/documents/1/translations/string/download'
Example Response
{  "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`.