DeepL

App · Translation · 16 actions

Translate text and whole documents with DeepL, keeping layout and formatting intact. Build glossaries so your product names and house terms always come out the same way, and check what the account has left to translate; all of it on DeepL's free API plan.

Actions

ActionWhat it does
Add or replace a glossary language pairSet the terms for one language pair inside a glossary.
Check a document's translation statusAsk DeepL how far along an uploaded document is: queued, translating with an estimate of the seconds left, done, or failed.
Check usage and limitsReport how much of this DeepL account's allowance is used in the current billing period, and what is left.
Create a glossaryCreate a glossary so DeepL always translates your terms the same way: product names, job titles, anything with a house translation.
Delete a glossaryDelete a glossary and every language pair in it.
Delete a glossary language pairRemove one language pair from a glossary, leaving its other pairs in place.
Download a translated documentDownload a document DeepL has finished translating and save it, so a later step can email, upload, or store it.
Get a glossaryGet one glossary's name, language pairs, and how many terms each pair holds.
Get a glossary's termsRead the term pairs a glossary holds for one language pair, both as a list a later step can loop over and as the original text block.
List glossariesList the glossaries on this DeepL account with the language pairs each one covers, without their terms.
List language featuresList every part of DeepL and the optional features it offers (formality, glossaries, tag handling, tone, and the rest), and whether a feature depends on the source language, the target language, or both.
List supported languagesList the languages DeepL supports for translating text, for translating documents, or in a glossary, and whether each one can be a source, a target, or both.
Rename or edit a glossaryRename a glossary, replace the terms for one of its language pairs, or both.
Translate a documentTranslate a whole file and save the result: Word, PowerPoint, Excel, PDF, HTML, text, subtitles, XLIFF, InDesign, XML, JSON, DITA, FrameMaker, and images.
Translate textTranslate text into another language with DeepL.
Upload a document to translateHand a file to DeepL and get back the ID and key that track it, without waiting for the translation.

Add or replace a glossary language pair

Set the terms for one language pair inside a glossary. If the glossary does not cover that pair yet it is added; if it does, its terms are replaced.

Inputs

Glossaryglossary_idtextRequired
The glossary to act on.
Terms are written insource_langtextRequired
The language the glossary's source terms are written in.
Terms translate intotarget_langtextRequired
The language the glossary's target terms are written in.
TermsentriestextRequired
The term pairs, one per line, with the original term and its translation separated by a tab (or a comma if you switch the format below). For example: 'shuttle<tab>Zubringer'.
Separated byentries_formattext
What separates each term from its translation.One of: tsv (One pair per line, separated by a tab (default)), csv (One pair per line, separated by a comma). Default: tsv.

Outputs

entry_countnumber
How many terms the pair now holds.
glossary_idtext
source_langtext
target_langtext
Example output
{
  "entry_count": 24,
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "source_lang": "en",
  "target_lang": "fr"
}

Check a document's translation status

Ask DeepL how far along an uploaded document is: queued, translating with an estimate of the seconds left, done, or failed.

Inputs

Document IDdocument_idtextRequired
The document ID from the 'Upload a document' step.
Document keydocument_keytextRequired
The document key from the 'Upload a document' step. DeepL encrypts the document with it and cannot look it up again, so chain it from that step.

Outputs

billed_charactersnumber
Characters the document is billed for.
document_idtext
The document's ID.
donetrue/false
True once the translation can be downloaded.
error_messagetext
Why the translation failed, when it did.
seconds_remainingnumber
DeepL's estimate while it is translating.
statustext
'queued', 'translating', 'done', or 'error'.
Example output
{
  "billed_characters": 5120,
  "document_id": "45A9C1BE5B0C4C9EA1D2F3B4C5D6E7F8",
  "done": true,
  "error_message": null,
  "seconds_remaining": null,
  "status": "done"
}

Check usage and limits

Report how much of this DeepL account's allowance is used in the current billing period, and what is left. Use it to warn someone before a workflow runs out of characters.

Inputs

None.

Outputs

api_key_character_countnumber
api_key_character_limitnumber
character_countnumber
Characters translated this period.
character_limitnumber
Characters allowed this period.
characters_remainingnumber
What is left of the character allowance.
document_countnumber
document_limitnumber
end_timetext
When it ends.
productslist
Per-product usage, on the paid plans.
speech_to_speech_minutes_countnumber
speech_to_speech_minutes_limitnumber
speech_to_text_minutes_countnumber
speech_to_text_minutes_limitnumber
start_timetext
When the current billing period began.
team_document_countnumber
team_document_limitnumber
Example output
{
  "api_key_character_count": 184320,
  "api_key_character_limit": 500000,
  "character_count": 184320,
  "character_limit": 500000,
  "characters_remaining": 315680,
  "document_count": 12,
  "document_limit": 100,
  "end_time": "2026-08-31T23:59:59Z",
  "products": [],
  "speech_to_speech_minutes_count": 0,
  "speech_to_speech_minutes_limit": 0,
  "speech_to_text_minutes_count": 0,
  "speech_to_text_minutes_limit": 0,
  "start_time": "2026-08-01T00:00:00Z",
  "team_document_count": null,
  "team_document_limit": null
}

Create a glossary

Create a glossary so DeepL always translates your terms the same way: product names, job titles, anything with a house translation. Give it the pairs for one language pair; more language pairs can be added to the same glossary afterwards.

Inputs

NamenametextRequired
What to call the glossary.
Terms are written insource_langtextRequired
The language the glossary's source terms are written in.
Terms translate intotarget_langtextRequired
The language the glossary's target terms are written in.
TermsentriestextRequired
The term pairs, one per line, with the original term and its translation separated by a tab (or a comma if you switch the format below). For example: 'shuttle<tab>Zubringer'.
Separated byentries_formattext
What separates each term from its translation.One of: tsv (One pair per line, separated by a tab (default)), csv (One pair per line, separated by a comma). Default: tsv.

Outputs

creation_timetext
When the glossary was created.
dictionarieslist
One entry per language pair the glossary covers.
glossary_idtext
The glossary's ID.
language_pairslist
The language pairs, written as 'en → de'.
nametext
The glossary's name.
Example output
{
  "creation_time": "2026-07-14T09:12:44.517Z",
  "dictionaries": [
    {
      "entry_count": 24,
      "source_lang": "en",
      "target_lang": "de"
    }
  ],
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "language_pairs": [
    "en \u2192 de"
  ],
  "name": "Product terms"
}

Delete a glossary

Delete a glossary and every language pair in it. Translations that name it start failing, so update those steps first.

Inputs

Glossaryglossary_idtextRequired
The glossary to act on.

Outputs

deletedtrue/false
glossary_idtext
The glossary that was deleted.
messagetext
Example output
{
  "deleted": true,
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "message": "Deleted glossary def3a26b-3e84-45b3-84ae-0c0aaf3525f7."
}

Delete a glossary language pair

Remove one language pair from a glossary, leaving its other pairs in place.

Inputs

Glossaryglossary_idtextRequired
The glossary to act on.
Terms are written insource_langtextRequired
The 'from' language of the dictionary inside this glossary. The list shows the language pairs the chosen glossary actually has.
Terms translate intotarget_langtextRequired
The 'into' language of the dictionary inside this glossary. The list shows the language pairs the chosen glossary actually has.

Outputs

deletedtrue/false
glossary_idtext
messagetext
source_langtext
target_langtext
Example output
{
  "deleted": true,
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "message": "Deleted the en \u2192 fr dictionary.",
  "source_lang": "en",
  "target_lang": "fr"
}

Download a translated document

Download a document DeepL has finished translating and save it, so a later step can email, upload, or store it. The translation is only available for a short time after it is ready.

Inputs

Document IDdocument_idtextRequired
The document ID from the 'Upload a document' step.
Document keydocument_keytextRequired
The document key from the 'Upload a document' step. DeepL encrypts the document with it and cannot look it up again, so chain it from that step.
Save the file asfilenametext
The name to save the translation under, including its extension (for example 'handbook-DE.docx').

Outputs

billed_charactersnumber
Characters the document was billed for.
content_typetext
Its media type.
document_reftext
The saved file's reference.
documentslist
The saved file, for a later step that takes documents.
filenametext
The name it was saved under.
size_bytesnumber
Its size in bytes.
urltext
A link that serves the file.
Example output
{
  "billed_characters": 5120,
  "content_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  "document_ref": "doc_9f1c2b7a4e",
  "documents": [
    {
      "content_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "document_ref": "doc_9f1c2b7a4e",
      "filename": "handbook-DE.docx",
      "size_bytes": 48213,
      "url": "/actions/core/serve-document/doc_9f1c2b7a4e"
    }
  ],
  "filename": "handbook-DE.docx",
  "size_bytes": 48213,
  "url": "/actions/core/serve-document/doc_9f1c2b7a4e"
}

Get a glossary

Get one glossary's name, language pairs, and how many terms each pair holds.

Inputs

Glossaryglossary_idtextRequired
The glossary to act on.

Outputs

creation_timetext
When the glossary was created.
dictionarieslist
One entry per language pair the glossary covers.
glossary_idtext
The glossary's ID.
language_pairslist
The language pairs, written as 'en → de'.
nametext
The glossary's name.
Example output
{
  "creation_time": "2026-07-14T09:12:44.517Z",
  "dictionaries": [
    {
      "entry_count": 24,
      "source_lang": "en",
      "target_lang": "de"
    }
  ],
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "language_pairs": [
    "en \u2192 de"
  ],
  "name": "Product terms"
}

Get a glossary's terms

Read the term pairs a glossary holds for one language pair, both as a list a later step can loop over and as the original text block.

Inputs

Glossaryglossary_idtextRequired
The glossary to act on.
Terms are written insource_langtextRequired
The 'from' language of the dictionary inside this glossary. The list shows the language pairs the chosen glossary actually has.
Terms translate intotarget_langtextRequired
The 'into' language of the dictionary inside this glossary. The list shows the language pairs the chosen glossary actually has.

Outputs

entrieslist
The same terms, split into pairs.
entries_formattext
How the text block separates each pair.
entries_texttext
The terms exactly as DeepL stores them.
glossary_idtext
source_langtext
target_langtext
Example output
{
  "entries": [
    {
      "source": "shuttle",
      "target": "Zubringer"
    },
    {
      "source": "boarding pass",
      "target": "Bordkarte"
    }
  ],
  "entries_format": "tsv",
  "entries_text": "shuttle\tZubringer\nboarding pass\tBordkarte",
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "source_lang": "en",
  "target_lang": "de"
}

List glossaries

List the glossaries on this DeepL account with the language pairs each one covers, without their terms.

Inputs

None.

Outputs

glossarieslist
Every glossary on the account.
Example output
{
  "glossaries": [
    {
      "creation_time": "2026-07-14T09:12:44.517Z",
      "dictionaries": [
        {
          "entry_count": 24,
          "source_lang": "en",
          "target_lang": "de"
        }
      ],
      "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
      "language_pairs": [
        "en \u2192 de"
      ],
      "name": "Product terms"
    }
  ]
}

List language features

List every part of DeepL and the optional features it offers (formality, glossaries, tag handling, tone, and the rest), and whether a feature depends on the source language, the target language, or both.

Inputs

None.

Outputs

resourceslist
Every part of DeepL and its features.
Example output
{
  "resources": [
    {
      "features": [
        {
          "name": "formality",
          "needs_source_support": false,
          "needs_target_support": true
        },
        {
          "name": "glossary",
          "needs_source_support": true,
          "needs_target_support": true
        }
      ],
      "name": "translate_text"
    }
  ]
}

List supported languages

List the languages DeepL supports for translating text, for translating documents, or in a glossary, and whether each one can be a source, a target, or both.

Inputs

Forresourcetext
Which part of DeepL to list the languages for.One of: translate_text (Translating text), translate_document (Translating documents), glossary (Glossaries). Default: translate_text.
Also includeincludelist
Languages beyond the stable ones. Leave empty for the stable list.One or more of: beta (Languages still in beta), external (Languages served by an external model).

Outputs

languageslist
Every language, with what it supports.
resourcetext
The part of DeepL these languages are for.
source_languageslist
The codes usable as a source language.
target_languageslist
The codes usable as a target language.
Example output
{
  "languages": [
    {
      "features": [
        "formality",
        "glossary"
      ],
      "lang": "de",
      "name": "German",
      "status": "stable",
      "usable_as_source": true,
      "usable_as_target": true
    },
    {
      "features": [
        "glossary"
      ],
      "lang": "en-US",
      "name": "English (American)",
      "status": "stable",
      "usable_as_source": false,
      "usable_as_target": true
    }
  ],
  "resource": "translate_text",
  "source_languages": [
    "de"
  ],
  "target_languages": [
    "de",
    "en-US"
  ]
}

Rename or edit a glossary

Rename a glossary, replace the terms for one of its language pairs, or both. To change the terms, give the language pair and the full replacement list.

Inputs

Glossaryglossary_idtextRequired
The glossary to act on.
New namenametext
A new name for the glossary. Leave blank to keep it.
Terms are written insource_langtext
The 'from' language of the pair whose terms you are replacing. Only needed when replacing terms.
Terms translate intotarget_langtext
The 'into' language of the pair whose terms you are replacing. Only needed when replacing terms.
Termsentriestext
The replacement term pairs, one per line, separated by a tab (or a comma if you switch the format below). They replace that language pair's terms entirely.
Separated byentries_formattext
What separates each term from its translation.One of: tsv (One pair per line, separated by a tab (default)), csv (One pair per line, separated by a comma). Default: tsv.

Outputs

creation_timetext
When the glossary was created.
dictionarieslist
One entry per language pair the glossary covers.
glossary_idtext
The glossary's ID.
language_pairslist
The language pairs, written as 'en → de'.
nametext
The glossary's name.
Example output
{
  "creation_time": "2026-07-14T09:12:44.517Z",
  "dictionaries": [
    {
      "entry_count": 24,
      "source_lang": "en",
      "target_lang": "de"
    }
  ],
  "glossary_id": "def3a26b-3e84-45b3-84ae-0c0aaf3525f7",
  "language_pairs": [
    "en \u2192 de"
  ],
  "name": "Product terms"
}

Translate a document

Translate a whole file and save the result: Word, PowerPoint, Excel, PDF, HTML, text, subtitles, XLIFF, InDesign, XML, JSON, DITA, FrameMaker, and images. Layout and formatting are kept. The step hands the file to DeepL, waits for it, and saves the translation for a later step to email or upload.

Inputs

DocumentfiletextRequired
The file to translate: upload one, pick a file from an earlier step, or paste a public file address.
Translate intotarget_langtextRequired
The language to translate the document into.
Translate fromsource_langtext
The document's language. Leave blank and DeepL detects it. Set it when you use a glossary.
Formalityformalitytext
How formal the translation should sound. Only some languages (such as German, French, and Spanish) have a formality setting; the 'where the language allows it' choices are ignored elsewhere instead of failing.One of: default (DeepL decides (default)), prefer_more (More formal where the language allows it), prefer_less (Less formal where the language allows it), more (More formal (fails if unsupported)), less (Less formal (fails if unsupported)). Default: default.
Glossariesglossary_idslist
Glossaries whose terms must be used, up to 5. Each one needs a dictionary for this language pair, and 'Translate from' must be set.
Save asoutput_formattext
The format to write the translation in. Leave blank to keep the original's format.One of: docx (Word (.docx)), pptx (PowerPoint (.pptx)), xlsx (Excel (.xlsx)), pdf, html, htm (HTML (.htm)), txt (Plain text), xlf (XLIFF (.xlf)), xliff (XLIFF (.xliff)), srt (Subtitles (.srt)), and 8 more.
Add a 'Translated by DeepL' watermarkenable_watermarktrue/false
Mark the translation as machine translated. Only applies to Word and PDF output.Default: false.
Save the file asoutput_filenametext
The name to save the translation under. Leave blank and it takes the original's name with the language added, such as 'handbook-DE.docx'.

Outputs

billed_charactersnumber
Characters billed for the document.
content_typetext
Its media type.
document_idtext
DeepL's ID for the translation job.
document_reftext
The saved file's reference.
documentslist
The saved file, for a later step that takes documents.
filenametext
The name it was saved under.
size_bytesnumber
Its size in bytes.
target_languagetext
The language it was translated into.
urltext
A link that serves the file.
Example output
{
  "billed_characters": 5120,
  "content_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  "document_id": "45A9C1BE5B0C4C9EA1D2F3B4C5D6E7F8",
  "document_ref": "doc_9f1c2b7a4e",
  "documents": [
    {
      "content_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "document_ref": "doc_9f1c2b7a4e",
      "filename": "handbook-DE.docx",
      "size_bytes": 48213,
      "url": "/actions/core/serve-document/doc_9f1c2b7a4e"
    }
  ],
  "filename": "handbook-DE.docx",
  "size_bytes": 48213,
  "target_language": "DE",
  "url": "/actions/core/serve-document/doc_9f1c2b7a4e"
}

Translate text

Translate text into another language with DeepL. Point it at a message, a description, or anything an earlier step produced, pick the language, and the translation comes back as text a later step can send on. Glossaries and written instructions can be applied so the wording matches how your team already writes.

Inputs

TexttexttextRequired
The text to translate. Paste it in, or chain it from an earlier step. A list of texts from an earlier step works too; each one is translated on its own and they come back in the same order.
Translate intotarget_langtextRequired
The language to translate into.
Translate fromsource_langtext
The language the text is in. Leave blank and DeepL detects it. Set it when you use a glossary: DeepL needs to know which dictionary to use.
Contextcontexttext
Surrounding information that helps DeepL choose the right wording (what the text is about, or the sentences around it). It is not translated and is not billed.
Formalityformalitytext
How formal the translation should sound. Only some languages (such as German, French, and Spanish) have a formality setting; the 'where the language allows it' choices are ignored elsewhere instead of failing.One of: default (DeepL decides (default)), prefer_more (More formal where the language allows it), prefer_less (Less formal where the language allows it), more (More formal (fails if unsupported)), less (Less formal (fails if unsupported)). Default: default.
Modelmodel_typetext
Which DeepL model translates: the best-quality one, or the faster one.One of: quality_optimized (Best quality), prefer_quality_optimized (Best quality where available, else the fast model), latency_optimized (Fastest).
Glossariesglossary_idslist
Glossaries whose terms must be used, up to 5. Each one needs a dictionary for this language pair, and 'Translate from' must be set.
Custom instructionscustom_instructionslist
Plain-language instructions for this translation, such as 'use a friendly, diplomatic tone'. Up to 10, each 300 characters. Supported when translating into German, English, Spanish, French, Italian, Japanese, Korean, or Chinese.
Keep the original formattingpreserve_formattingtrue/false
Leave punctuation and capitalization as they are instead of letting DeepL tidy them up.Default: false.
Sentence splittingsplit_sentencestext
How the text is broken into sentences before it is translated. Change it for a list or a table cell that should stay in one piece.One of: 1 (Split on punctuation and line breaks (default)), nonewlines (Split on punctuation only, keep line breaks), 0 (Treat the whole text as one sentence). Default: 1.
Markup in the texttag_handlingtext
Set this when the text is HTML or XML so the tags are left intact and only the words inside them are translated.One of: html, xml.
Markup handling versiontag_handling_versiontext
Which version of DeepL's tag handling to use. Only applies with 'Markup in the text' set.One of: v1 (Original (current default)), v2 (Improved (released October 2025)).
Detect the XML structureoutline_detectiontrue/false
Leave on to let DeepL work out an XML document's structure. Turn it off to control the split yourself with the tag lists below. Only applies with 'Markup in the text' set to XML.Default: true.
Tags that split sentencessplitting_tagslist
XML tags that always end a sentence, such as 'para'. Only applies with 'Markup in the text' set.
Tags that never split sentencesnon_splitting_tagslist
XML tags that never end a sentence, such as an inline 'b'. Only applies with 'Markup in the text' set.
Tags to leave aloneignore_tagslist
Tags whose contents must not be translated, such as 'code'. Only applies with 'Markup in the text' set.
Report the billed charactersshow_billed_characterstrue/false
Have DeepL report how many characters this translation is billed for.Default: false.
Usage tagreporting_tagtext
A label for this request on DeepL's usage reports, so a team or customer's translations can be told apart. Up to 100 characters; it does not affect the translation.

Outputs

billed_charactersnumber
Characters billed, when the step asked for them.
detected_source_languagetext
The language DeepL read the text as.
model_type_usedtext
Which model answered, when one was chosen.
target_languagetext
The language translated into.
texttext
The translation. When several texts were sent, this is the first one.
textslist
Every translation, in the order they were sent.
translationslist
DeepL's own record for each text.
Example output
{
  "billed_characters": 20,
  "detected_source_language": "EN",
  "model_type_used": "quality_optimized",
  "target_language": "DE",
  "text": "Willkommen bei Lodol.",
  "texts": [
    "Willkommen bei Lodol."
  ],
  "translations": [
    {
      "detected_source_language": "EN",
      "text": "Willkommen bei Lodol."
    }
  ]
}

Upload a document to translate

Hand a file to DeepL and get back the ID and key that track it, without waiting for the translation. Use this for a long document: a later step checks its status and downloads it. For everything else 'Translate a document' does all three in one step.

Inputs

DocumentfiletextRequired
The file to translate: upload one, pick a file from an earlier step, or paste a public file address.
Translate intotarget_langtextRequired
The language to translate the document into.
Translate fromsource_langtext
The document's language. Leave blank and DeepL detects it. Set it when you use a glossary.
Formalityformalitytext
How formal the translation should sound. Only some languages (such as German, French, and Spanish) have a formality setting; the 'where the language allows it' choices are ignored elsewhere instead of failing.One of: default (DeepL decides (default)), prefer_more (More formal where the language allows it), prefer_less (Less formal where the language allows it), more (More formal (fails if unsupported)), less (Less formal (fails if unsupported)). Default: default.
Glossariesglossary_idslist
Glossaries whose terms must be used, up to 5. Each one needs a dictionary for this language pair, and 'Translate from' must be set.
Save asoutput_formattext
The format to write the translation in. Leave blank to keep the original's format.One of: docx (Word (.docx)), pptx (PowerPoint (.pptx)), xlsx (Excel (.xlsx)), pdf, html, htm (HTML (.htm)), txt (Plain text), xlf (XLIFF (.xlf)), xliff (XLIFF (.xliff)), srt (Subtitles (.srt)), and 8 more.
Add a 'Translated by DeepL' watermarkenable_watermarktrue/false
Mark the translation as machine translated. Only applies to Word and PDF output.Default: false.

Outputs

document_idtext
DeepL's ID for this document.
document_keytext
The key DeepL encrypted the document with. Every later step about this document needs it, and it cannot be looked up again.
filenametext
The name the file was sent under.
output_formattext
The format the translation will come back in.
target_languagetext
The language it is being translated into.
Example output
{
  "document_id": "45A9C1BE5B0C4C9EA1D2F3B4C5D6E7F8",
  "document_key": "2FDA9B1F1E0C4A5D8B7C6E5F4A3B2C1D0E9F8A7B6C5D4E3F2A1B0C9D8E7F6A5B",
  "filename": "handbook.docx",
  "output_format": "docx",
  "target_language": "DE"
}

On this page