Articles
Articles are the pages of your help center. The API can read them, search the published ones and create drafts. A person publishes a draft in Tirver. If the workspace has switched the help center off, these endpoints answer 404 with module_disabled.
The article object
| Field | Type | Meaning |
|---|---|---|
id |
string | The article id. |
slug |
string | The address-friendly name. |
title |
string | The title. |
status |
string | draft or published. |
collection |
object or null | The collection it is filed under, with id, slug and name. |
description |
string | The search description, or the start of the body. |
helpful_count |
integer | Readers who rated it helpful. |
not_helpful_count |
integer | Readers who rated it not helpful. |
published_at |
string or null | When it was first published. |
created_at |
string | When it was created. |
updated_at |
string | When it last changed. |
Lists do not include the text. Fetching a single article adds body, the article text as Markdown.
List articles
GET/api/v1/help-center/articles
Needs the help-center:read scope. Drafts are included. Ordered by last update, newest first.
| Parameter | Type | What it does |
|---|---|---|
status |
string | draft or published. |
collection_id |
string | Only articles in this collection. |
q |
string | Search the title and body. |
limit |
integer | Page size, 1 to 100. Defaults to 25. |
cursor |
string | The next_cursor from the previous page. |
curl "https://app.tirver.com/api/v1/help-center/articles?status=published&q=widget" \
-H "Authorization: Bearer $TIRVER_API_KEY"
Get an article
GET/api/v1/help-center/articles/{id}
Needs help-center:read. {id} is the article id or its slug. Returns one article with its Markdown body.
Search published articles
GET/api/v1/search
Needs help-center:read. A keyword search over published articles. It matches words, not meaning, and titles rank first. For a natural language answer, use POST /api/v1/ask.
| Parameter | Type | What it does |
|---|---|---|
q |
string | Required. The words to look for. |
limit |
integer | How many results, 1 to 50. Defaults to 10. |
List collections
GET/api/v1/help-center/collections
Needs help-center:read. Returns every collection, not paged, each with id, slug, name, article_count and published_article_count.
Create an article draft
POST/api/v1/help-center/articles
Needs help-center:write. The article is always created as a draft, so nothing is shown to customers until a person publishes it. Returns 201 with the article. A slug that is already taken gives 409.
| Field | Type | What it does |
|---|---|---|
title |
string | Required. Up to 160 characters. |
body |
string | The text, as Markdown. |
collection_id |
string | Optional. The collection to file it under. |
slug |
string | Optional. Lowercase letters, numbers and dashes. Made from the title when left out. |
description |
string | Optional. The search description, up to 320 characters. |
curl
curl https://app.tirver.com/api/v1/help-center/articles \
-H "Authorization: Bearer $TIRVER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Reset your password", "body": "Open Settings, then Profile."}'
JavaScript
const res = await fetch('https://app.tirver.com/api/v1/help-center/articles', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.TIRVER_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ title: 'Reset your password', body: 'Open Settings, then Profile.' }),
});
const article = await res.json();
Python
res = requests.post(
"https://app.tirver.com/api/v1/help-center/articles",
headers={"Authorization": f"Bearer {os.environ['TIRVER_API_KEY']}"},
json={"title": "Reset your password", "body": "Open Settings, then Profile."},
timeout=10,
)
article = res.json()
The response has the article fields above plus body, with status set to draft and collection set to null when you gave no collection.