Translate an article
Overwrite the article’s title, content and — when it has one — description with their machine translation into the article’s own target locale — the locale of its category, or the portal default when it has no category. There is no request body. An article without a description is translated without one and is never refused for it, and the slug is never translated: it forms the public address of a published article, so translating it would break every link already pointing there.
This does not create a new article. To publish a translation: create the target-locale copy (filed under a category of the target locale, linked through associated_article_id), then call this endpoint on the copy.
Each call runs a language model server-side — it takes seconds and overwrites whatever title, content and description the article had, so don’t loop or retry it blindly. A failed translation never applies partially: on any failure the article is left exactly as it was and the endpoint answers 500. A 200 always means the translation was applied.
Authorizations
The id_token from POST /auth/v1/signin, sent as Authorization: Bearer <id_token>. Not the access_token — that one does not carry the identity Cloud Chat authorizes on.
Headers
Your Cloud Chat instance ID — an integer, fixed for your company, told at onboarding. The API overview explains how instances work, how to find yours, and the errors a wrong or missing value produces.
1
Path Parameters
Your Cloud Chat account. It has to be an account your token grants membership on, and it has to live on the instance in the cloudchat-instance header — the two travel together. Account numbers are only unique within an instance, so the same number is a different company on another instance. Usually a mismatched pair fails closed with a 401, because your user does not exist on the other instance — but if your identity happens to exist on both, the call succeeds against the other company's data, silently. Read it and you are looking at the wrong help center; write it and you have stored into the wrong account. Send the two values that were given to you together, and never try a number to see what answers.
1
The portal's slug — the URL-safe handle you see in its public address (/hc/<slug>/...), not a numeric id. List portals returns every slug on the account. Note the asymmetry: portals are addressed by slug, articles by numeric id.
"acme-help"
The id returned when the article was created or listed. Numeric — never the article slug.
118
Response
The article with the translated title, content and description applied and saved.
A help center article, drafts included.
What the single-article endpoints take as articleId.
118
"How to reset your password"
URL-safe handle generated from the title; forms the public URL.
"how-to-reset-your-password"
The body, in Markdown. Images are ordinary Markdown image links — upload the file and embed the returned file_url.
Only published articles appear on the public help center. New articles start as draft unless created with an explicit status.
draft, published, archived "draft"
Inherited at creation from the category (or the portal default when there is none). Not directly writable — move the article to a category of the right locale instead.
"en"
Always the authenticated user behind the token. There is no way to write an article as someone else. Null when the author was deleted: the account keeps the article and drops the reference, so an orphan article still reads normally with no author to show.
7
"acme-help"
Where the article is served once published — on the portal's custom domain when one is configured, on the default help center host otherwise.
"https://help.acme.com/hc/acme-help/articles/how-to-reset-your-password"
"2026-08-10T14:32:05.123Z"
"2026-08-10T14:32:05.123Z"
Short summary shown in listings and search results.
Category the article is filed under. Decides where it renders — and its locale.
12
Root article linking the translations of the same article across locales. When writing, any article of the family is accepted — the server normalizes it to the root.
null