Skip to main content
The /v3/languages endpoint tells you which languages a given DeepL API resource supports and which optional features (formality, glossaries, tag handling, and more) are available per language. Calling it before you build language selectors or validate user input lets you stay current as DeepL adds languages, without maintaining a hardcoded list. This guide shows you how to query language support for a resource, read the response, and check whether a specific feature is available for a language pair.
The resource parameter is required. If you’re migrating from /v2/languages, see the migration guide — the v3 response structure is different.

Before you start

You need a DeepL API key. Find yours on the API Keys & Limits page. If you’re on the Free plan, use https://api-free.deepl.com instead of https://api.deepl.com in all requests below.

Step 1: Choose your resource

The resource parameter identifies which DeepL API product you’re querying language support for. Choose the value that matches what you’re building:

Step 2: Fetch supported languages

Call GET /v3/languages with your chosen resource value. This example queries languages for text translation:
The response is an array where each object represents one language:
A few things to notice in this response:
  • en is source-only (usable_as_source: true, usable_as_target: false). For target languages, use a regional variant like en-US or en-GB.
  • Language codes follow BCP 47. Don’t assume codes are always two letters — treat them as opaque identifiers.
  • The features object lists optional capabilities available for that language with this resource. A feature’s absence means it isn’t supported.

Step 3: Filter source and target languages

Use usable_as_source and usable_as_target to build your language selectors:

Step 4: Check feature availability for a language pair

Some features, like formality, depend on both the source and target language supporting it. To know which language must support a feature for it to be available, call GET /v3/languages/resources:
For formality, only needs_target_support is set. This means you only need to check whether the target language’s features object contains formality — the source language doesn’t matter. For glossary, both needs_source_support and needs_target_support are set. Both languages in the pair must support glossary for you to use a glossary on that translation. Here’s a helper that combines both calls to check whether a feature is available for a given pair:

Including beta languages

By default, the endpoint only returns stable languages. To include languages in beta, add include=beta to your request:
Beta languages appear in the response with "status": "beta". Use the status field to decide whether to surface them to end users or restrict them to internal testing.
Don’t hardcode the list of languages returned by this endpoint. New languages are added regularly — call the endpoint at startup (or on a schedule) and cache the result rather than maintaining a static list. See the language release process for details on how DeepL introduces new languages.

Next steps