GET /v3/languages replaces the deprecated GET /v2/languages endpoint. If you’re currently using v2, see the migration guide.Before you start
You’ll need a DeepL API key. If you don’t have one, sign up for a free account. Set your key as an environment variable so you can reuse it across examples:https://api.deepl.com with https://api-free.deepl.com in every request below.
Step 1: Choose a resource
Theresource query parameter is required. It tells the API which DeepL product you’re querying language support for:
For this guide, we’ll use
translate_text — the most common starting point.
Step 2: Fetch supported languages
CallGET /v3/languages with your chosen resource:
en and en-US are separate entries. en is source-only (usable_as_source: true, usable_as_target: false) while en-US is target-only. Always use usable_as_source and usable_as_target to determine role — don’t infer it from the language code.
Step 3: Read the features object
Each language entry includes afeatures object. The keys are feature names; each value has at least a status field (stable, beta, or early_access).
Whether a feature requires source-language support, target-language support, or both depends on the resource. To look that up programmatically, call GET /v3/languages/resources:
formality only requires the target language to support it — the source language doesn’t matter. glossary requires both. Use this response to determine feature availability for any language pair without hardcoding the rules.
Step 4: Filter by feature or role
Here are common filtering tasks you’ll encounter when building a UI or validating inputs. Get all valid target languages:include=beta when you want to surface languages that are available but not yet stable. You can also pass include=external to include features provided by third-party service partners, or combine them: ?include=beta&include=external.
What to do with this data
A few practical patterns:- Language pickers: filter by
usable_as_sourceorusable_as_targetand displaynameto users. Storelangas the value to send in API requests. - Feature toggles: before showing a formality selector, check that the target language has
formalityin itsfeaturesobject. Hide the control if it’s absent. - Input validation: check that a user-supplied language code appears in the response before passing it to a translation request. Return a clear error if it doesn’t.
- Cache the response: language support changes infrequently. Cache the
/v3/languagesresponse for a reasonable period (for example, 24 hours) rather than fetching it on every request.
Next steps
- See the full response schema and parameter reference: Retrieve languages
- Understand which features each resource supports: Retrieve language resources
- Browse the full list of supported languages: Languages supported
- Migrating from v2? See the migration guide