Helpdesk Content API
Pull your help center's collections and articles — every language included — into your own database and build a fully custom help site on your own domain. Enterprise-only.
Overview
The Helpdesk Content API exposes everything your help desk contains — help centers, the collection tree, and every article in every language — as raw JSON. Pull the content into your own database and render a fully custom help site with your own design, on your own domain. Content endpoints are read-only (GET); authoring stays in the dashboard, and the hosted help center keeps working unchanged alongside it.
403 on every endpoint on this page. Organizations below Enterprise use the hosted help center.Authentication
Use your existing Data API key from Settings → API Keys (the same sk_live_ key the External Data API uses), passed in the X-Api-Key header or as a Bearer token.
curl -H "X-Api-Key: sk_live_YOUR_KEY" \https://api.nextcap.ai/api/v1/external/help/centers
Localized Fields
Localized fields (title, summary, description, body) are locale maps like { "en": "…", "fr": "…" } — one response carries every translation, and article body values are Markdown. To match the hosted help center, treat an article as translated into a locale only when both title[locale] and body[locale] are non-empty, and fall back to the center's default_locale otherwise.
Help Centers
Collections & Categories
Articles
Public visibility on the hosted help center means status = published and visibility of both or helpcenter_only — mirror that filter for parity (widget_only articles belong to the in-chat Help tab, hidden to neither surface).
Ordering
Collections, categories, and articles each carry a position — the manual order your content team sets by dragging rows in Help Desk → Content. It is the order the hosted help center and the in-widget Help tab render in, so honoring it keeps a custom-built site consistent with what your team arranged.
position is a rank within a sibling group, never a global one. Collections group by parent_id, categories by collection_id, articles by collection_id + category_id (articles with a null collection_id form their own unfiled group). Rank 0 means "first among my siblings", so many rows in one center legitimately hold 0 — sort within a group, not across the whole list.
Collections and categories already return in position order. Articles default to updated_at ascending and that default will not change — the incremental sync below walks pages against it. Ask for reading order one sibling group at a time instead:
curl "https://api.nextcap.ai/api/v1/external/help/centers/CENTER_ID/articles?collection_id=COLLECTION_ID&sort_by=position" \-H "X-Api-Key: sk_live_YOUR_KEY"
That query is a single group as long as the collection uses no categories — the normal case, since sub-collections replaced them. If a collection does hold categories, either pull one at a time with category_id, or fetch the whole collection and bucket the result by each article's category_id before rendering — within a bucket the rows are already in position order. Articles with no category come back as category_id: null, which is simply another bucket key.
Every sort ends with a unique key, so paging a sorted list never duplicates or skips a row: position breaks ties the way your own help site does (articles by newest published_at, collections and categories by created_at) and then by id; timestamp sorts go straight to id. An unrecognized sort_by or sort_order returns 400.
Keeping Your Copy in Sync
- Backfill — page through
articles?status=all&per_page=100&page=Nuntilmeta.total_pages, plus one call each for collections and categories. - Incremental — remember the newest
updated_atyou have seen and poll withstatus=all&include_deleted=true&updated_after=<cursor>. The boundary is inclusive, so upsert byidand repeats are harmless. - Real time — subscribe to the
help_*events on the Webhooks page and re-fetch the entity named in the payload. Treat webhooks as the change notification and these GET endpoints as the source of truth.
Webhook Events
Sixteen events cover the content graph: help_center.*, help_collection.*, help_category.* (created / updated / deleted), plus help_article.created / updated / published / deleted, plus help_collection.reordered / help_category.reordered / help_article.reordered. help_article.published fires on the draft → published transition and is the typical "rebuild my public site" trigger. The reordered events carry only the ids whose position moved, so re-fetching that one sibling group is enough. Setup, payload format, signature verification, and retry behavior are on the Webhooks page.
Engagement Beacons (Optional)
The hosted help center records page views and "was this helpful?" votes that power the dashboard's Insights. Your custom frontend can keep that data flowing through the same public, unauthenticated beacons — they are browser-safe and need no API key.