Scopes
help-center:read and help-center:write also grant the matching content scope, so an existing key keeps working unchanged. Create an API key under Settings → API keys. See Authentication.
Key concepts
- Help center id — every endpoint is scoped to one help center. Call List help centers first to find the id.
- Categories — every article belongs to exactly one category. Categories can be nested;
parent_idisnullfor top-level ones. - Source language — each article records the language it was written in. Every other language is a translation of it. Pass
language_codeon Create when the article is authored in something other than the help center’s primary language; it cannot be changed later. - Draft and published — creating or updating an article writes a new version. Nothing is visible to customers or the AI until you call Publish, which ships the newest stored version. Language states tells you, per language, what is live and what is waiting.
- Locales — each enabled language has its own published state. Publish releases every locale at once; Publish one locale lets you ship the primary language before translations are reviewed. Only the primary language feeds the AI: publishing a translation while the primary language is still unpublished makes that translation public without adding the article to the AI’s knowledge.
- Per-language structure — where an article or category sits, and in what order, is recorded per language. A move changes one language’s tree and leaves the others alone.
- Unpublish, delete, restore — Unpublish takes an article offline while keeping its content and history; unpublishing the primary language also removes it from the AI’s knowledge. Delete is reversible through Restore while the article is still soft-deleted.
Articles are either unpublished or published. There is no separate internal-only visibility today: an article published in its primary language is on the public site and in the AI’s knowledge together. For content the AI should know but customers should not browse, use the AI Training API instead.
Available Endpoints
Help centers
List help centers
Find the help center id
Get
Settings, branding, and custom code
Update
Name, domain, CSS, head scripts
Languages and glossary
Get languages
Served languages and auto-translate
Update languages
Change what is served
Translation jobs
What is still translating
List terms
Terms the translator keeps
Add term
Protect a product name
Update term
Change a term or definition
Delete term
Remove a term
Import terms
Copy the organization glossary
Articles
List
All articles for a language
Get
One article with its versions
Create
New article under a category
Update
New stored version
Publish
Go live in every locale
Publish one locale
Go live in one language
Language states
What is live, what is waiting
Unpublish
Take offline, keep content
Delete
Remove from the tree
Restore
Bring a deleted article back
Versions
Version history
Retranslate
One language or all
Categories
List
All categories for a language
Get
One category with locales
Create
Top-level or nested
Update
Rename or re-icon, per language
Delete
With or without its contents
Restore
Bring a deleted category back
Retranslate
One language or all
Structure
Get tree
One language, whole tree, in order
Move article
Into a category, at a position
Move category
Nest it or lift it to the top
Reorder
Order one category’s children
Media
Upload media
Images for article HTML
List media
Library contents and URLs
Delete media
Remove a file
Best practices
- Create, review, then publish. An unpublished article never reaches customers or the AI.
- Article bodies are HTML fragments in
content_html, on reads and writes. It replaces the formercontent_markdownfield, which is no longer accepted. - Read the article before you update it and send the whole
content_htmlback — an update replaces the body rather than patching it. - Read Language states before publishing so you know which locales the call will change.
enabled_languagesandlocalizationsreplace what is stored rather than merging. Read the current value first and send it back whole.- Set a stable
slugon create when you need permanent URLs; otherwise it is derived from the title. - Upload images through Upload media and reference the returned URL in
content_html. - Embed a video with
<div data-embed="youtube" data-embed-id="aqz-KE-bpKQ"></div>.data-embedisyoutube,vimeo,loomorwistia;data-embed-idis the video’s id from its link — for an unlisted Vimeo video,76979871/8272103f6e. An embed with another host or a malformed id is removed on save, and<iframe>is never kept. - Unpublish rather than delete when content might come back.