> ## Documentation Index
> Fetch the complete documentation index at: https://docs.open.cx/llms.txt
> Use this file to discover all available pages before exploring further.

# Help Center API

> Create, update, publish, and delete help center articles and categories from your own systems, and manage the site itself — languages, glossary, branding, and ordering.

The Help Center API lets you manage the customer-facing knowledge base you author in OpenCX from your own systems. Anything you can do in the [Help Center](/help-center/overview) editor you can do here: create and edit articles and categories, publish and unpublish them, manage translations and the glossary, order the tree, upload media, and change the site's own settings.

Publishing an article's primary language ships it to your public help site **and** the AI's knowledge in the same action. There is no separate "train the AI" step. Other languages publish to the site only; the AI always follows the primary language.

## Scopes

| Scope | Grants |
| - | - |
| `help-center-content:read` | List and fetch articles, categories, versions, the content tree, and media |
| `help-center-content:write` | Create, update, publish, unpublish, move, reorder, restore, delete, retranslate, upload |
| `help-center:read` | List and fetch help centers, their language settings, and their glossary |
| `help-center:write` | Change a help center's settings, served languages, and glossary |

`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](/api-reference/authentication).

## Key concepts

* **Help center id** — every endpoint is scoped to one help center. Call [List help centers](./list) first to find the id.
* **Categories** — every article belongs to exactly one category. Categories can be nested; `parent_id` is `null` for top-level ones.
* **Source language** — each article records the language it was written in. Every other language is a translation of it. Pass `language_code` on [Create](./articles/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](./articles/publish), which ships the newest stored version. [Language states](./articles/language_states) tells you, per language, what is live and what is waiting.
* **Locales** — each enabled language has its own published state. [Publish](./articles/publish) releases every locale at once; [Publish one locale](./articles/publish_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](./structure/move_article) changes one language's tree and leaves the others alone.
* **Unpublish, delete, restore** — [Unpublish](./articles/unpublish) takes an article offline while keeping its content and history; unpublishing the primary language also removes it from the AI's knowledge. [Delete](./articles/delete) is reversible through [Restore](./articles/restore) while the article is still soft-deleted.

<Note>
  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](/api-reference/training/index) instead.
</Note>

## Available Endpoints

### Help centers

<CardGroup>
  <Card title="List help centers" icon="list" href="./list">
    Find the help center id
  </Card>

  <Card title="Get" icon="magnifying-glass" href="./get">
    Settings, branding, and custom code
  </Card>

  <Card title="Update" icon="pen" href="./update">
    Name, domain, CSS, head scripts
  </Card>
</CardGroup>

### Languages and glossary

<CardGroup>
  <Card title="Get languages" icon="language" href="./languages/get">
    Served languages and auto-translate
  </Card>

  <Card title="Update languages" icon="language" href="./languages/update">
    Change what is served
  </Card>

  <Card title="Translation jobs" icon="spinner" href="./translation_jobs">
    What is still translating
  </Card>

  <Card title="List terms" icon="list" href="./glossary/list">
    Terms the translator keeps
  </Card>

  <Card title="Add term" icon="plus" href="./glossary/create">
    Protect a product name
  </Card>

  <Card title="Update term" icon="pen" href="./glossary/update">
    Change a term or definition
  </Card>

  <Card title="Delete term" icon="trash" href="./glossary/delete">
    Remove a term
  </Card>

  <Card title="Import terms" icon="download" href="./glossary/import">
    Copy the organization glossary
  </Card>
</CardGroup>

### Articles

<CardGroup>
  <Card title="List" icon="list" href="./articles/list">
    All articles for a language
  </Card>

  <Card title="Get" icon="magnifying-glass" href="./articles/get">
    One article with its versions
  </Card>

  <Card title="Create" icon="plus" href="./articles/create">
    New article under a category
  </Card>

  <Card title="Update" icon="pen" href="./articles/update">
    New stored version
  </Card>

  <Card title="Publish" icon="rocket" href="./articles/publish">
    Go live in every locale
  </Card>

  <Card title="Publish one locale" icon="language" href="./articles/publish_locale">
    Go live in one language
  </Card>

  <Card title="Language states" icon="list-check" href="./articles/language_states">
    What is live, what is waiting
  </Card>

  <Card title="Unpublish" icon="eye-slash" href="./articles/unpublish">
    Take offline, keep content
  </Card>

  <Card title="Delete" icon="trash" href="./articles/delete">
    Remove from the tree
  </Card>

  <Card title="Restore" icon="rotate-left" href="./articles/restore">
    Bring a deleted article back
  </Card>

  <Card title="Versions" icon="clock-rotate-left" href="./articles/versions">
    Version history
  </Card>

  <Card title="Retranslate" icon="language" href="./articles/retranslate">
    One language or all
  </Card>
</CardGroup>

### Categories

<CardGroup>
  <Card title="List" icon="list" href="./categories/list">
    All categories for a language
  </Card>

  <Card title="Get" icon="magnifying-glass" href="./categories/get">
    One category with locales
  </Card>

  <Card title="Create" icon="plus" href="./categories/create">
    Top-level or nested
  </Card>

  <Card title="Update" icon="pen" href="./categories/update">
    Rename or re-icon, per language
  </Card>

  <Card title="Delete" icon="trash" href="./categories/delete">
    With or without its contents
  </Card>

  <Card title="Restore" icon="rotate-left" href="./categories/restore">
    Bring a deleted category back
  </Card>

  <Card title="Retranslate" icon="language" href="./categories/retranslate">
    One language or all
  </Card>
</CardGroup>

### Structure

<CardGroup>
  <Card title="Get tree" icon="folder-tree" href="./structure/tree">
    One language, whole tree, in order
  </Card>

  <Card title="Move article" icon="arrow-right-arrow-left" href="./structure/move_article">
    Into a category, at a position
  </Card>

  <Card title="Move category" icon="arrow-right-arrow-left" href="./structure/move_topic">
    Nest it or lift it to the top
  </Card>

  <Card title="Reorder" icon="sort" href="./structure/reorder">
    Order one category's children
  </Card>
</CardGroup>

### Media

<CardGroup>
  <Card title="Upload media" icon="upload" href="./media/upload">
    Images for article HTML
  </Card>

  <Card title="List media" icon="images" href="./media/list">
    Library contents and URLs
  </Card>

  <Card title="Delete media" icon="trash" href="./media/delete">
    Remove a file
  </Card>
</CardGroup>

## 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 former `content_markdown` field, which is no longer accepted.
* Read the article before you update it and send the whole `content_html` back — an update replaces the body rather than patching it.
* Read [Language states](./articles/language_states) before publishing so you know which locales the call will change.
* `enabled_languages` and `localizations` **replace** what is stored rather than merging. Read the current value first and send it back whole.
* Set a stable `slug` on create when you need permanent URLs; otherwise it is derived from the title.
* Upload images through [Upload media](./media/upload) and reference the returned URL in `content_html`.
* Embed a video with `<div data-embed="youtube" data-embed-id="aqz-KE-bpKQ"></div>`. `data-embed` is `youtube`, `vimeo`, `loom` or `wistia`; `data-embed-id` is 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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.