Skip to main content
This page shows how to use the /v3/languages endpoints for common integration tasks. Examples are written as pseudocode and are product-agnostic unless otherwise noted. For background on how features and feature dependency types work, see the overview.

Populate source and target language dropdowns

A single call to GET /v3/languages returns all languages for a product. Filter by usable_as_source and usable_as_target to populate each dropdown separately.
GET /v3/languages?product=translate_text

languages = response

source_options = languages.filter(l => l.usable_as_source)
target_options = languages.filter(l => l.usable_as_target)

render source_dropdown(source_options)
render target_dropdown(target_options)

Show formality options only when supported

formality only needs to be supported by the target language. Check the selected target language’s features array — no need to look at the source language.
GET /v3/languages?product=translate_text

languages = response
target = languages.find(l => l.lang == selected_target_lang)

if target.features.includes("formality"):
    show formality_selector  // e.g. ["default", "more", "less"]
else:
    hide formality_selector

Check if a glossary can be used for a given language pair

glossary must be supported by both languages.
GET /v3/languages?product=translate_text

languages = response

source = languages.find(l => l.lang == source_lang)
target = languages.find(l => l.lang == target_lang)

glossary_allowed = source.features.includes("glossary")
               and target.features.includes("glossary")

List target languages that accept glossaries from a given source language

Filter to targets where both the source and target support the glossary feature.
GET /v3/languages?product=translate_text

languages = response
source_lang = "en"

source = languages.find(l => l.lang == source_lang)

if not source.features.includes("glossary"):
    return []  // source doesn't support glossary at all

targets_with_glossary = languages
    .filter(l => l.usable_as_target)
    .filter(l => l.features.includes("glossary"))

Show writing style options for the Write product

writing_style is a target-only feature on the write product. Check the target language’s features array.
GET /v3/languages?product=write

languages = response
target = languages.find(l => l.lang == selected_target_lang)

if target.features.includes("writing_style"):
    show writing_style_selector
else:
    hide writing_style_selector

Check if style rules are available for a target language

Use product=style_rules to query which languages support style rules. Style rules are target-language only — check that the target language is listed in the response. The style_rules product has no additional features, so only the language availability needs to be checked.
GET /v3/languages?product=style_rules

languages = response
target = languages.find(l => l.lang == selected_target_lang)

if target and target.usable_as_target:
    show style_rules_selector
else:
    hide style_rules_selector

Determine feature support programmatically

Use /v3/languages/products to drive feature checks at runtime — without hardcoding which features need target-only or both-language support into your client.
GET /v3/languages/products
GET /v3/languages?product=translate_text

products = first response
languages = second response

product = products.find(p => p.name == "translate_text")
source = languages.find(l => l.lang == source_lang)
target = languages.find(l => l.lang == target_lang)

for feature in product.features:
    supported = true
    if feature.required_on_source and not source.features.includes(feature.name):
        supported = false
    if feature.required_on_target and not target.features.includes(feature.name):
        supported = false