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.

  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. 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 or 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
# 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"
  • 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 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.

  • Guides

    Errors

    Errors are RFC 9457 problem documents. Branch on the stable code, never on the text, and use the retry table to decide whether to try again.

  • Further reading

    Dates and times

    Responses give dates in UTC. When you write, send an ISO 8601 instant with an offset. A bare day such as 2026-10-17 is read in the business time zone of the account when it is in a filter; a write takes one only in a field that is a plain date.