Skip to the documentation
API

Languages

Every language a message can be sent in. No parameters, no cursor, no scope.

GETapi.openemail.uk/languages

Runs the real call against your workspace, with your own key.

GET /languages

Every language a message can be sent in. No parameters, no cursor, no scope.

List them

Two hundred rows, whole, in one response. Fetch it once and keep it. A client that hardcodes the list or scrapes it out of the OpenAPI document goes stale the day a row is added.

curl
curl "$OE/languages" -H "$AUTH"
Response
{  "object": "list",  "data": [    { "code": "en",    "label": "English",  "native": "English",  "flag": "🇬🇧", "rtl": false },    { "code": "de",    "label": "German",   "native": "Deutsch",  "flag": "🇩🇪", "rtl": false },    { "code": "ar",    "label": "Arabic",   "native": "العربية",   "flag": "🇸🇦", "rtl": true  },    { "code": "ja",    "label": "Japanese", "native": "日本語",     "flag": "🇯🇵", "rtl": false }  ]}

Behind a key like everything else and needing no scope: it names no data belonging to anybody, and a scope guarding a constant only makes the consent screen longer.

rtl is always a boolean here. Sixteen rows are true (Arabic, Hebrew, Persian, Urdu and the rest), and a body translated into one of them is composed right to left.

A language

Response

codestring
The BCP-47 code, and the form to store. `translate.to` accepts the other two as well and always answers with this one.
labelstring
The English name: "Brazilian Portuguese". The muted second line in a picker.
nativestring
What the language calls itself: "Português (Brasil)". Show this FIRST: it is the word somebody looking for their own language is actually looking for.
flagstring
Two regional-indicator codepoints. A scanning aid beside the native name and never an identifier or a label on its own. A flag is a country, a country is not a language, and Spanish is not Spain any more than English belongs to England.
rtlboolean
Whether the language is written right to left. Always present, where the underlying table omits it when false.

The order is the answer

The rows arrive in picker order and should not be re-sorted by default: the languages people are most likely to be emailed in first, then regional variants, then the rest by region. Alphabetical by English name opens a picker on Abkhaz.

Search over native, label and code together, and render the list as it arrives until somebody types. translate.to takes any of the three, so a picker that stores code and searches all three cannot produce a value the send will refuse.