*Overview › Further reading*

# Languages

> Only the human-readable text of an error depends on language. Send `Accept-Language` to choose it, read `Content-Language` on an error to see what you got, and never take decisions from the text.

The API has one language-dependent part: the `detail` of an error and every `errors[].message`. Everything else, such as field names, codes, enum values and the `title` of a problem, is stable and in English.

## How the language is chosen

1. **Your Accept-Language header** `es-ES` and `en-US` are guaranteed. Any other supported language falls back to English.
2. **With a valid key: the preferred language of the key owner** Without the header, the errors of a request made with a key that exists use the preferred language of the person who owns the key. That includes a revoked or expired key, an owner who is inactive or not an administrator, and a 403 [`insufficient_scope`](https://docs.filmo.io/rest-api/errors/insufficient_scope). The exceptions are the errors of a request with no owner to ask, which come in Spanish.
3. **Before the owner is known: Spanish** A request with no credential, or with a key that Filmo does not recognise, has no owner: its 401 ([`unauthorized`](https://docs.filmo.io/rest-api/errors/unauthorized) or [`api_key_invalid`](https://docs.filmo.io/rest-api/errors/api_key_invalid)) is in Spanish unless you send `Accept-Language`.

The OAuth endpoints are different: their `error_description` is always in Spanish, whatever you send. Branch on `error`, never on the text.

An error response names the language it used in the `Content-Language` header. A successful response carries no such header, because it has no human-readable text to translate.

*Ask for English messages and read the language of the error*

```bash
# A missing order answers 404 (or 403 without orders:read): either way it is an error response.
curl -sS -o /dev/null -D - "${FILMO_BASE_URL:-https://app.filmo.io}/api/v1/orders/does-not-exist" \
  -H "Authorization: Bearer $FILMO_API_KEY" \
  -H "Accept-Language: en-US" | grep -i "content-language"
```

## Do not rely on the language

- Always send `Accept-Language`. Do not depend on the default, which is a personal setting of the key owner and can change.
- Do not rely on the language of a 401 for a missing or unknown key: it is in Spanish unless you ask otherwise. Any client that shows or logs these messages should send `Accept-Language` on every request, authenticated or not.
- Do not use `detail` or `errors[].message` for control logic. Use `code` (and `errors[].code` for field errors), which are stable.
- Do not translate or compare message text in your code; the wording can improve between releases.

## The language of the app

The Filmo app itself is available in Spanish, English, French, German, Catalan and Polish. The language of the app is a personal preference, and it is the one the API uses for you by default. The names of menus differ between languages: where this documentation names one, it gives the Spanish name, such as Ajustes → API y MCP for the API and MCP settings.

The error codes themselves are listed in [the errors guide](https://docs.filmo.io/rest-api/guides/errors).

---

Canonical URL: https://docs.filmo.io/further-reading/languages  
Last updated: 2026-10-09