---
title: "Languages"
description: "Every language a message can be sent in. No parameters, no cursor, no scope."
url: "https://openemail.uk/docs/api/languages"
area: "API"
category: "Emails"
---

# Languages

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

`GET /languages`

## 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**

- `code` (string): The BCP-47 code, and the form to store. `translate.to` accepts the other two as well and always answers with this one.
- `label` (string): The English name: "Brazilian Portuguese". The muted second line in a picker.
- `native` (string): 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.
- `flag` (string): 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.
- `rtl` (boolean): 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.
