# Field language

Paths, request fields, response fields and almost every value are English.

Paths and field names are English on both sides: what you **send** (`projectId`, `scheduledFor`, `when`) and what you **receive** (`projects`, `name`, `createdAt`).

This was not always true. Until 13/09/2026 the response fields came out in Portuguese, and until 14/09/2026 so did the error envelope, because the internal layer that builds them was written before the API existed. They were renamed at the source, not translated at the boundary: a translation layer means two tables to keep in step, and the one nobody updates is where the bug hides. A test now refuses any Portuguese field in a response example.

Checked against the 14 endpoints that carry a response example: none of them returns a Portuguese field name.

## Values too

Values are English as well: `format` says `caption_reel`, `status` says `generating`, `alignment` says `center`, `dayName` says `monday`, an audiogram scene's `type` says `bar_chart`, and the error `code` says `not_found`.

> This page claimed on the morning of 14/09/2026 that nothing was Portuguese, and it was wrong: the six `format` values were still `carrossel`, `leia_a_legenda`, `audio_animado`, `carrossel_profissional` and `infografico` — the most-typed values in the whole API, in the table two pages over. The test that was supposed to catch it compares field NAMES in response examples, so it stayed green with `audio_animado` in plain sight. Measuring the wrong thing feels exactly like being done.

## The two places that are still Portuguese, and why

| Where | What you will see | Why it stays |
| --- | --- | --- |
| `message` in an error | `Post nao encontrado` | Human text, meant to be shown or logged. The stable contract is `code`, which is English. |
| `content.slides[].fields[].value` | `blocos`, `peso`, `texto` | The slide's own content, shaped by its layout template. You send the object back unchanged; the API never reads inside it. |

## Slide content passes through untouched

In `GET /posts/:id/slides` every field comes as `{ name, value }`. The `value` is the content of that slide's layout, its shape comes from the template, and you send the whole object back unchanged in `PATCH /slides/:id`. The API guarantees the language of the envelope it builds, not of the content passing through it.

## Error messages

The envelope is `{ "error": { "code", "message" } }`. `code` is the stable contract, in English. `message` is human text, written in Portuguese, and it can change wording without notice: safe to show a person, unsafe to match on. See [Errors](/docs/api/errors).
