This page covers the differences between the /v2/languages endpoint and the v3 endpoints, and how to update your integration.
Only GET requests are supported on the v3 endpoints. Unlike /v2/languages, POST is not supported.
What changed
Single endpoint for source and target
v2 uses a single endpoint with a type query parameter to distinguish source from target:
GET /v2/languages?type=source
GET /v2/languages?type=target
v3 uses a single endpoint that returns all languages for a product, with each language indicating whether it is
usable as a source, a target, or both:
GET /v3/languages?product=translate_text
New product identifiers
v2 languages are implicitly tied to text and document translation. v3 introduces an explicit product parameter that applies across all DeepL API products:
| v2 | v3 product value |
|---|
| (implicit, text/document translation only) | translate_text |
| (implicit, text/document translation only) | translate_document |
(separate /v2/glossary-language-pairs endpoint) | glossary |
| (not supported) | voice |
| (not supported) | write |
The v3 endpoints replace both /v2/languages and /v2/glossary-language-pairs.
v2 target languages include a boolean supports_formality field. v3 replaces this with a features array that covers additional capabilities per product:
| v2 field | v3 equivalent |
|---|
"supports_formality": true | "features": ["formality"] on the language object |
For example, querying languages for text translation:
curl -X GET 'https://api.deepl.com/v3/languages?product=translate_text' \
--header 'Authorization: DeepL-Auth-Key [yourAuthKey]'
Example response (truncated)
[
{
"lang": "de",
"name": "German",
"usable_as_source": true,
"usable_as_target": true,
"features": ["formality", "tag_handling", "glossary"]
},
{
"lang": "en-US",
"name": "English (American)",
"usable_as_source": false,
"usable_as_target": true,
"features": ["tag_handling", "glossary"]
}
]
The response indicates German supports formality, but English (American) does not.
See the overview for the full list of features per product.
Response field names
| v2 field | v3 field |
|---|
language | lang |
name | name (unchanged) |
supports_formality | features["formality] |
Language code casing
v2 returned language codes in non-standard casing (e.g. EN-US, ZH-HANT). v3 returns codes compliant with BCP 47: lowercase base language (en, de), uppercase region subtag (en-US, pt-BR), and title-case script subtag (zh-Hant).
DeepL accepts language codes case-insensitively as input across all endpoints. However, if your integration stores or compares codes returned by /v2/languages, update those comparisons to be case-insensitive or to expect the new casing.
Migrating glossary language pair queries
If you currently use /v2/glossary-language-pairs to discover which language pairs are supported for glossaries, use one of the following:
GET /v3/languages?product=glossary to check which languages support glossary management (i.e. creating a glossary for that language). Filter by usable_as_source and usable_as_target as needed. Any combination of a valid source and target language is a supported glossary language pair.
GET /v3/languages?product=translate_text to check which languages support using a glossary during text translation. Languages that include "glossary" in their features array support the glossary_id parameter on the translate endpoint.
- Similarly, use
product=translate_document to check glossary support for document translation.