Skip to main content
The GET /v3/languages endpoint tells you which features — formality, glossaries, tag handling, and more — are available for a given language and DeepL resource. Use it to validate language pairs and conditionally enable features in your integration rather than hardcoding assumptions. This guide walks through the most common task: given a source language and a target language, determine which features you can use when translating between them.
If you’re currently using GET /v2/languages, see the migration guide for differences and code examples. The v2 endpoint is deprecated.

Before you start

You’ll need a DeepL API key. Set it as an environment variable:

Step 1: Fetch languages for your resource

Call GET /v3/languages with the resource parameter set to the DeepL API resource you’re building for. For text translation, use translate_text.
Each item in the response describes one language and whether it can be used as a source, a target, or both, along with the features it supports:
Notice that en is source-only and en-US is target-only. Some features appear only on target languages (like formality) and some on both (like glossary). The next step explains how to determine which is which.

Step 2: Understand which side a feature applies to

Some features require support on the source language, some on the target, and some on both. To check the rules for your resource, call GET /v3/languages/resources:
For translate_text:
  • formality requires only target-language support
  • glossary and tag_handling require support on both the source and target language
  • auto_detection requires only source-language support (it applies when you omit the source language)

Step 3: Check availability for a specific language pair

With the language data from Step 1 and the feature rules from Step 2, you can now determine which features are available for any pair. The logic is straightforward: a feature is available for a pair when every required side supports it. Here’s a function that encapsulates the check:
To use it, fetch both endpoints once at startup, index by code/name, then call the function for any pair:
The output tells you exactly which features you can pass to the translate endpoint for this pair.

Step 4: Include beta languages (optional)

By default, GET /v3/languages returns only stable languages. To include languages in beta, add include=beta to your request:
Beta languages have "status": "beta" in the response. Their features may also carry a "status": "beta" marker. Check the status field before surfacing beta languages or features to end users.
Beta languages and features can change or be removed without notice. See Alpha and beta features before relying on them in production.

Caching recommendations

The language list changes infrequently. Fetching it on every request adds latency and counts against your rate limits. Cache both /v3/languages and /v3/languages/resources responses and refresh them once daily, or on application startup. When DeepL adds a new language, the language release process page describes what to expect in the API response.
Do not hardcode language codes or feature lists in your application. Language codes follow BCP 47 and may use subtags beyond the common two-letter form (e.g. zh-Hans, sr-Cyrl-RS). Always treat codes as opaque identifiers. See Language release process for details.

Next steps