Help center
Articles, collections and news for a help desk's help center and widget.
The help center is where customers find answers before they ask. Articles are written in Markdown and arranged in collections; published public articles appear in the help center and the widget, and every published article, internal ones included, is something the desk's AI agent and reply suggestions may answer from.
Any agent on the desk may write and publish articles and create collections: the people answering the same question every day are the ones who should write it down. Deleting a collection, and publishing news to every customer's widget, need help_desk:configure and a desk lead or admin.
Deleting an article or news post archives it: it stops appearing anywhere and stays on record, because an article the AI cited is part of what a customer was told.
List articles#
The desk's articles, in the order their collection arranges them, or by popularity when searching.
/api/v1/help-desks/{helpDeskId}/articlesPath parameters
helpDeskIdstringrequired- Help desk id.
Query parameters
collectionIdstring- Only articles in this collection.
statusstring- draft, published or archived.
audiencestring- public or internal.
localestring- Only articles in this locale, e.g. en.
searchstring- Match title, excerpt or body.
limitnumber- Page size, up to 200. Default 50.
cursorstring- The nextCursor from the previous page.
Responses
The articles, and how many match in total.
curl -X GET "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/articles" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"articles": [{"id": "2b7f…","helpDeskId": "4ebf…","collectionId": "c81d…","brandId": null,"title": "How refunds work","slug": "how-refunds-work","body": "# Refunds\n\nRefunds for a **duplicate charge** arrive within five business days.","bodyHtml": "<h1>Refunds</h1><p>Refunds for a <strong>duplicate charge</strong> arrive within five business days.</p>","excerpt": "Refunds for a duplicate charge arrive within five business days.","locale": "en","status": "published","audience": "public","authorAgentId": "8e21…","seoDescription": null,"position": 0,"publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 318,"helpfulCount": 41,"notHelpfulCount": 3,"aiCitationCount": 27}],"total": 1},"meta": {"requestId": "req_…","pagination": {"nextCursor": null,"limit": 50}}}
Create an article#
Write an article in Markdown. It is rendered to HTML on save, and any raw HTML in it is escaped. `internal` articles are offered to agents and to the AI as context and are never shown to customers. Any agent on the desk may write and publish articles.
/api/v1/help-desks/{helpDeskId}/articlesPath parameters
helpDeskIdstringrequired- Help desk id.
Body
application/jsontitle- string
- required
body- string (Markdown)
- required
collectionId- string
brandId- string
slug- string (lowercase letters, digits, dashes)
excerpt- string
locale- string (default en)
status- draft | published | archived (default draft)
audience- public | internal (default public)
seoDescription- string
position- number
Responses
The created article.
curl -X POST "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/articles" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"title": "How refunds work","body": "Refunds for a **duplicate charge** arrive within five business days.","collectionId": "c81d…","status": "published"}'
{"data": {"id": "2b7f…","helpDeskId": "4ebf…","collectionId": "c81d…","brandId": null,"title": "How refunds work","slug": "how-refunds-work","body": "# Refunds\n\nRefunds for a **duplicate charge** arrive within five business days.","bodyHtml": "<h1>Refunds</h1><p>Refunds for a <strong>duplicate charge</strong> arrive within five business days.</p>","excerpt": "Refunds for a duplicate charge arrive within five business days.","locale": "en","status": "published","audience": "public","authorAgentId": "8e21…","seoDescription": null,"position": 0,"publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 318,"helpfulCount": 41,"notHelpfulCount": 3,"aiCitationCount": 27},"meta": {"requestId": "req_…"}}
Get an article#
One article, with its rendered HTML and how readers and the AI have used it.
/api/v1/help-desks/{helpDeskId}/articles/{articleId}Path parameters
helpDeskIdstringrequired- Help desk id.
articleIdstringrequired- Article id.
Responses
The article.
curl -X GET "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/articles/{articleId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"id": "2b7f…","helpDeskId": "4ebf…","collectionId": "c81d…","brandId": null,"title": "How refunds work","slug": "how-refunds-work","body": "# Refunds\n\nRefunds for a **duplicate charge** arrive within five business days.","bodyHtml": "<h1>Refunds</h1><p>Refunds for a <strong>duplicate charge</strong> arrive within five business days.</p>","excerpt": "Refunds for a duplicate charge arrive within five business days.","locale": "en","status": "published","audience": "public","authorAgentId": "8e21…","seoDescription": null,"position": 0,"publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 318,"helpfulCount": 41,"notHelpfulCount": 3,"aiCitationCount": 27},"meta": {"requestId": "req_…"}}
Update an article#
Change any field; fields you leave out keep their values. A new body without a new excerpt gets a fresh excerpt. Publishing for the first time sets `publishedAt`.
/api/v1/help-desks/{helpDeskId}/articles/{articleId}Path parameters
helpDeskIdstringrequired- Help desk id.
articleIdstringrequired- Article id.
Body
application/jsontitle- string
body- string
status- string
audience- string
collectionId- string or null
Responses
The updated article.
curl -X PATCH "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/articles/{articleId}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"status": "published"}'
{"data": {"id": "2b7f…","helpDeskId": "4ebf…","collectionId": "c81d…","brandId": null,"title": "How refunds work","slug": "how-refunds-work","body": "# Refunds\n\nRefunds for a **duplicate charge** arrive within five business days.","bodyHtml": "<h1>Refunds</h1><p>Refunds for a <strong>duplicate charge</strong> arrive within five business days.</p>","excerpt": "Refunds for a duplicate charge arrive within five business days.","locale": "en","status": "published","audience": "public","authorAgentId": "8e21…","seoDescription": null,"position": 0,"publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 318,"helpfulCount": 41,"notHelpfulCount": 3,"aiCitationCount": 27},"meta": {"requestId": "req_…"}}
Delete an article#
Archive an article. It disappears from the help center and from the AI's sources, and is kept on record. Needs a desk lead or an organization admin, like deleting a collection.
/api/v1/help-desks/{helpDeskId}/articles/{articleId}Path parameters
helpDeskIdstringrequired- Help desk id.
articleIdstringrequired- Article id.
Responses
Archived.
curl -X DELETE "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/articles/{articleId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"deleted": true},"meta": {"requestId": "req_…"}}
List collections#
The desk's collections. With `nested=true`, a tree with each collection's `children`.
/api/v1/help-desks/{helpDeskId}/collectionsPath parameters
helpDeskIdstringrequired- Help desk id.
Query parameters
nestedboolean- Return the tree rather than a flat list.
Responses
The collections.
curl -X GET "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/collections" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"collections": [{"id": "c81d…","helpDeskId": "4ebf…","brandId": null,"parentId": null,"name": "Billing","slug": "billing","description": "Payments, invoices and refunds","icon": "credit-card","position": 0,"articleCount": 12}]},"meta": {"requestId": "req_…"}}
Create a collection#
A section of the help center. Set `parentId` to nest it. Any agent on the desk may create one.
/api/v1/help-desks/{helpDeskId}/collectionsPath parameters
helpDeskIdstringrequired- Help desk id.
Body
application/jsonname- string
- required
slug- string
description- string
icon- string
parentId- string
brandId- string (null for every brand)
position- number
Responses
The created collection.
curl -X POST "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/collections" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"name": "Billing","description": "Payments, invoices and refunds"}'
{"data": {"id": "c81d…","helpDeskId": "4ebf…","brandId": null,"parentId": null,"name": "Billing","slug": "billing","description": "Payments, invoices and refunds","icon": "credit-card","position": 0,"articleCount": 12},"meta": {"requestId": "req_…"}}
Get a collection#
One collection, with how many published articles it holds.
/api/v1/help-desks/{helpDeskId}/collections/{collectionId}Path parameters
helpDeskIdstringrequired- Help desk id.
collectionIdstringrequired- Collection id.
Responses
The collection.
curl -X GET "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/collections/{collectionId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"id": "c81d…","helpDeskId": "4ebf…","brandId": null,"parentId": null,"name": "Billing","slug": "billing","description": "Payments, invoices and refunds","icon": "credit-card","position": 0,"articleCount": 12},"meta": {"requestId": "req_…"}}
Update a collection#
Change any field. A collection cannot be moved inside itself or one of its own descendants.
/api/v1/help-desks/{helpDeskId}/collections/{collectionId}Path parameters
helpDeskIdstringrequired- Help desk id.
collectionIdstringrequired- Collection id.
Body
application/jsonname- string
parentId- string or null
position- number
Responses
The updated collection.
curl -X PATCH "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/collections/{collectionId}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"position": 2}'
{"data": {"id": "c81d…","helpDeskId": "4ebf…","brandId": null,"parentId": null,"name": "Billing","slug": "billing","description": "Payments, invoices and refunds","icon": "credit-card","position": 0,"articleCount": 12},"meta": {"requestId": "req_…"}}
Delete a collection#
Remove a collection. Its articles are kept and detached, and its child collections move to the top level. Changing the shape of the help center needs `help_desk:configure` and a desk lead or admin.
/api/v1/help-desks/{helpDeskId}/collections/{collectionId}Path parameters
helpDeskIdstringrequired- Help desk id.
collectionIdstringrequired- Collection id.
Responses
Deleted.
curl -X DELETE "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/collections/{collectionId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"deleted": true},"meta": {"requestId": "req_…"}}
List news posts#
The desk's 50 most recent news posts, drafts included.
/api/v1/help-desks/{helpDeskId}/newsPath parameters
helpDeskIdstringrequired- Help desk id.
Responses
The news posts.
curl -X GET "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/news" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"news": [{"id": "f40a…","helpDeskId": "4ebf…","brandId": null,"title": "Faster refunds","body": "Refunds now arrive in three business days.","bodyHtml": "<p>Refunds now arrive in three business days.</p>","coverImageUrl": null,"label": "Update","status": "published","authorAgentId": "8e21…","publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 0,"reactionCounts": {}}]},"meta": {"requestId": "req_…"}}
Create a news post#
An announcement shown in every customer's widget once published. Broadcast, unlike an article, so it needs `help_desk:configure` and a desk lead or admin. Created as a draft unless `status` says otherwise.
/api/v1/help-desks/{helpDeskId}/newsPath parameters
helpDeskIdstringrequired- Help desk id.
Body
application/jsontitle- string
- required
body- string (Markdown)
- required
brandId- string
coverImageUrl- https URL
label- string
status- draft | published | archived
Responses
The created news post.
curl -X POST "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/news" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"title": "Faster refunds","body": "Refunds now arrive in three business days.","label": "Update"}'
{"data": {"id": "f40a…","helpDeskId": "4ebf…","brandId": null,"title": "Faster refunds","body": "Refunds now arrive in three business days.","bodyHtml": "<p>Refunds now arrive in three business days.</p>","coverImageUrl": null,"label": "Update","status": "draft","authorAgentId": "8e21…","publishedAt": null,"viewCount": 0,"reactionCounts": {}},"meta": {"requestId": "req_…"}}
Get a news post#
One news post.
/api/v1/help-desks/{helpDeskId}/news/{newsPostId}Path parameters
helpDeskIdstringrequired- Help desk id.
newsPostIdstringrequired- News post id.
Responses
The news post.
curl -X GET "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/news/{newsPostId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"id": "f40a…","helpDeskId": "4ebf…","brandId": null,"title": "Faster refunds","body": "Refunds now arrive in three business days.","bodyHtml": "<p>Refunds now arrive in three business days.</p>","coverImageUrl": null,"label": "Update","status": "published","authorAgentId": "8e21…","publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 0,"reactionCounts": {}},"meta": {"requestId": "req_…"}}
Update a news post#
Change any field. Publishing for the first time sets `publishedAt`.
/api/v1/help-desks/{helpDeskId}/news/{newsPostId}Path parameters
helpDeskIdstringrequired- Help desk id.
newsPostIdstringrequired- News post id.
Body
application/jsontitle- string
body- string
status- string
label- string
Responses
The updated news post.
curl -X PATCH "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/news/{newsPostId}" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"status": "published"}'
{"data": {"id": "f40a…","helpDeskId": "4ebf…","brandId": null,"title": "Faster refunds","body": "Refunds now arrive in three business days.","bodyHtml": "<p>Refunds now arrive in three business days.</p>","coverImageUrl": null,"label": "Update","status": "published","authorAgentId": "8e21…","publishedAt": "2026-09-30T14:00:00.000Z","viewCount": 0,"reactionCounts": {}},"meta": {"requestId": "req_…"}}
Delete a news post#
Retire a news post. It disappears from the widget and is kept on record.
/api/v1/help-desks/{helpDeskId}/news/{newsPostId}Path parameters
helpDeskIdstringrequired- Help desk id.
newsPostIdstringrequired- News post id.
Responses
Retired.
curl -X DELETE "https://voice.evryhealth.com/api/v1/help-desks/{helpDeskId}/news/{newsPostId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"data": {"deleted": true},"meta": {"requestId": "req_…"}}