Skip to main content
A translation is a satellite row attached to an article that carries the article’s title, content, and content_plain in a different language. The primary article’s language field is the canonical one; every other language lives as a translation.

When to use translations vs separate articles

Use translations

The two pieces of content are the same article in different languages — same canonical slug, same category, same intent. Translations share the parent article’s id, slug, category_id, visibility, and lifecycle.

Use separate articles

The content diverges by audience — different examples for different regions, different policies per market, a fully localized site structure. Each gets its own id and its own lifecycle.
Translations cannot have their own status. They are live whenever the parent article is published, and are removed from the index whenever the parent is unpublished.

How indexing works

Each translation is embedded under its own language, separately from the primary body. A chatbot answering in Spanish retrieves Spanish embeddings; an English chatbot retrieves English. Image re-hosting runs on translations too — external images in a translation’s content are pulled into the org’s storage on write, the same as on the primary article.

The translation object

string
required
Always "article_translation".
uuid
required
The translation’s own id. The parent article’s id lives in article_id.
uuid
required
The primary article this translation belongs to.
string
required
ISO 639-1 two-letter language code. Must differ from the parent article’s language. Unique per article — there’s exactly one translation per language per article.
Supported codes: en, ja, de, fr, ko, zh, nl, sv, es, it, no. Sending any other value returns invalid_payload.
string
required
Translated title.
string
required
Translated body. External image URLs are rehosted on write.
string | null
Plain-text mirror used for indexing. Derived server-side from content — not accepted as input.

Endpoints

End-to-end workflow

Create the primary in English, then add Spanish and French.
1

Create the primary article

2

Add Spanish + French translations

3

Read a translation at render time

Updating a translation

PATCH with the fields you want to change. The translation’s language is in the URL and cannot be changed — delete and recreate to “rename” the language.

Deleting a translation

DELETE /articles/{id}/translations/{language} returns 204 and removes the translation row and its embeddings. The primary article is untouched.