Skip to main content
The GET /v3/languages endpoint returns the languages supported by a specific DeepL resource, along with which features (formality, glossary, tag handling, and others) each language supports. Use it to populate language dropdowns, validate user input, and toggle feature availability in your integration.
For new integrations, use /v3/languages. The /v2/languages endpoint remains available.
You’ll need a DeepL API key. Find yours at deepl.com/your-account/keys.

Fetch languages for a resource

The resource parameter is required. It tells the API which DeepL product you’re building for, so you get back the right set of languages and features. Set resource to the value that matches your use case — see the API reference for all valid values. This example uses translate_text for text translation:
Example response (truncated)
The response is an array of language objects. See the API reference for the full field list.
Do not hardcode assumptions about language code format. Codes follow BCP 47 and can include region, script, and variant subtags of varying length (e.g. zh-Hans, pt-BR). Treat them as opaque identifiers and use a BCP 47-compliant library if you need to parse them. See Language codes and the release process for details.

Filter for valid source and target languages

A language can be usable as a source, a target, both, or neither. Filter on usable_as_source and usable_as_target depending on what you need. For example, in Python:
Note that en (generic English) is usable only as a source, while en-US and en-GB are usable only as targets. Your language selector for the target field should show the regional variants, not the base code.

Check feature availability for a language

The features object on each language tells you which optional capabilities are available. A feature key is present in features only when that language supports it. To check whether a language supports formality, check for the formality key in its features object (as shown in the Python example above). Use this pattern to gate UI elements. If formality is absent from the target language’s features, don’t offer a formality option in your UI. Feature status values follow the same progression as language status: stable, beta, or early_access. By default, the endpoint returns only stable languages and features. To include beta items in the response, add include=beta to your query:
Example response (truncated)

Determine which language side a feature requires

Some features require the source language to support them, others require the target, and some require both. To look this up programmatically, call GET /v3/languages/resources:
Example response (truncated)
For the translate_text resource, glossary requires both the source and target language to support it. To check whether a specific language pair can use a glossary, use the languages list fetched in the example above:

Caching the response

The language list changes infrequently, only when DeepL adds or updates language support. Cache the response and refresh it on a schedule (daily is sufficient for most integrations) rather than calling the endpoint on every user request. When DeepL adds a new language, it goes through a staged release. See Language codes and the release process for what to expect and how to write code that handles new codes gracefully.