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
CallGET /v3/languages with the resource parameter set to the DeepL API resource you’re building for. For text translation, use translate_text.
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, callGET /v3/languages/resources:
translate_text:
formalityrequires only target-language supportglossaryandtag_handlingrequire support on both the source and target languageauto_detectionrequires 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: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:
"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.
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.
Next steps
- Using the Languages API — full reference for both v3 endpoints, including all
resourcevalues and the complete response schema - Supported languages — static table of all currently supported languages
- Migrating from v2/languages — if you’re upgrading from the deprecated v2 endpoint