Skip to main content
POST
Import a translation memory
This is how you create a translation memory: there is no endpoint that creates an empty one. Importing a TMX file creates the translation memory and fills it in a single job. The request body describes the file you intend to upload; it does not carry the file. DeepL returns a signed upload_url, you upload the file to that URL, and processing starts automatically once the upload finishes.

Importing a file

1

Create the import job

Send the file’s name and size in bytes. The response returns the job_id, the upload_url, and the expires_at deadline for the upload.
2

Upload the TMX file

PUT the file to upload_url before expires_at. The URL is already signed, so this request carries no DeepL credentials.
A successful upload returns no DeepL response body. Processing begins on its own, so there is no call to confirm the upload.
3

Poll the job

Check the job until status is completed or failed.
On completion, the job result carries the translation_memory_id of the new translation memory.

Common mistakes

content_length must be greater than 0 and at most 1 GB. An oversize value is rejected as 400 Bad Request with a message pointing at source_file.content_length. file_name accepts at most 100 characters and content_type at most 127, both rejected as 400 Bad Request if longer. TMX is the only supported format, so leave content_type unset or set it to application/xml. A 202 Accepted means the job exists, not that a translation memory does. Until the upload completes and the job reports completed, no translation memory has been created and there is no ID to reference. If expires_at passes before you upload, the signed URL stops working. Create a new import job to get a fresh URL rather than retrying the old one. A non-zero skipped_segment_count on a completed import is not a failure. Some segments were not stored, for example because they were malformed or duplicated an existing segment, but the rest imported normally. Check the value if you are reconciling segment counts against your source file. If your account has reached its translation memory limit, the request returns 456. Delete a translation memory before importing another.

Authorizations

Authorization
string
header
default:DeepL-Auth-Key
required

Authentication with Authorization header and DeepL-Auth-Key authentication scheme. Example: DeepL-Auth-Key <api-key>

Body

application/json
source_file
object
required
parameters
object

Response

The import job was created. Upload the file to upload_url before expires_at.

job_id
string<uuid>
required

The identifier of the import job. Use it to poll the job's status.

Example:

"0f8b6c1e-4d2a-4c77-9a3e-1b5d8c9e2f40"

upload_url
string<uri>
required

A signed URL to PUT the TMX file to. Do not send your Authorization header with the upload request.

Example:

"https://assets.deepl.com/upload/0f8b6c1e-4d2a-4c77-9a3e-1b5d8c9e2f40"

expires_at
string<date-time>
required

The time the upload_url stops accepting uploads, in the ISO 8601-1:2019 format. After this time, create a new import job.

Example:

"2026-08-06T15:34:25.223Z"