The Notiondesk API lets you list every help center in your workspace, read each help center's configuration, and check the status of its scheduled Notion sync. Start here: the help center id these routes return is the site_id every other Notiondesk API route takes in its path.
In the Notiondesk API, a help center is called a site.
| Method | Path | Scope | Does |
|---|---|---|---|
GET | /sites | read | Lists the help centers of your workspace |
GET | /sites/{site_id} | read | Reads one help center and its settings |
GET | /sites/{site_id}/sync-status | read | Reads the scheduled Notion sync of a help center |
List your help centers
curl "https://api.notiondesk.so/sites?page_size=50" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16"The list includes every help center in the workspace that owns your key, oldest first, using cursor pagination with page_size and cursor.
{
"object": "list",
"data": [
{
"id": "c74781f6-1aea-4e17-ab23-bbb8b4d174b6",
"full_domain": "help.example.com",
"enabled": true,
"default_locale": "en",
"locales": ["en", "fr"]
}
],
"has_more": false,
"next_cursor": null
}| Field | Type | Meaning |
|---|---|---|
id | string | The help center identifier, used as site_id in every other path |
full_domain | string or null | The domain readers visit: your custom domain when one is active, otherwise your Notiondesk subdomain |
enabled | boolean | Whether the help center is enabled |
default_locale | string | The default language, for example en |
locales | list of strings | The languages the help center serves, default first, limited to your plan's language allowance |
Running several help centers? See Create multiple Help Centers.
Read a help center's configuration
curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16"The response describes the help center and every setting the API can change. Read it again after a settings update to confirm the new state: the settings routes answer 204 No Content with no body.
{
"id": "c74781f6-1aea-4e17-ab23-bbb8b4d174b6",
"full_domain": "help.example.com",
"enabled": true,
"default_locale": "en",
"access_mode": "public",
"guest_access_requires_login": true,
"supported_locales": ["en", "fr"],
"available_locales": ["en", "fr", "de", "es"],
"auto_sync_enabled": true,
"seo_indexing_enabled": true,
"setting_content_items": [
{"locale": "en", "page_title": "Example Help Center", "page_description": "Answers about Example"}
],
"auto_translate_enabled": false,
"auto_translate_source_locale": null,
"llms_txt_enabled": true,
"markdown_export_enabled": true,
"ai_contextual_menu_enabled": false,
"mcp_search_enabled": true,
"contact_form_enabled": true,
"changelog_enabled": true,
"changelog_email_subscriptions_enabled": false,
"changelog_reactions_enabled": true,
"changelog_email_subject_pattern": null,
"changelog_categories": [
{"category_id": "2984612035", "color": "blue_sky"}
]
}| Field | Meaning | Change it with |
|---|---|---|
id, full_domain, enabled, default_locale | As in the list above | default_locale: Languages |
access_mode | Who can read the help center: public, password or guest_accounts | Dashboard only |
guest_access_requires_login | Whether a guest-account help center asks readers to sign in | Dashboard only |
supported_locales | The languages the help center serves, default first | Languages |
available_locales | Every language a help center can be configured to serve | Not editable |
auto_sync_enabled | Whether Notiondesk syncs from Notion on a schedule | Syncs |
seo_indexing_enabled | Whether search engines may index the help center | Settings |
setting_content_items | The page title and description per language: locale, page_title, page_description | Settings |
auto_translate_enabled, auto_translate_source_locale | Whether missing translations are produced automatically, and from which language | Languages |
llms_txt_enabled, markdown_export_enabled, ai_contextual_menu_enabled | Whether the help center publishes llms.txt, offers articles as markdown, and shows the AI contextual menu | Settings |
mcp_search_enabled | Whether the help center's public MCP search is on | Dashboard only. See Enable MCP Search |
contact_form_enabled | Whether the help center shows its contact form | Settings |
changelog_enabled, changelog_email_subscriptions_enabled, changelog_reactions_enabled, changelog_email_subject_pattern, changelog_categories | The changelog and its options. Each changelog category has a category_id and a color | Settings |
Check the scheduled sync status
curl "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/sync-status" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16"The response is the same status the dashboard shows for scheduled syncs:
{
"auto_sync_enabled": true,
"frequency": "daily",
"next_sync_at": "2026-10-19T06:00:00+00:00",
"current_status": "idle",
"recent_runs": [
{
"started_at": "2026-10-18T06:00:02+00:00",
"finished_at": "2026-10-18T06:01:41+00:00",
"status": "success",
"message": "Synced successfully.",
"error_category": null,
"requires_customer_action": false
}
]
}| Field | Meaning |
|---|---|
auto_sync_enabled | Whether scheduled sync is on |
frequency | daily, every_2h, hourly or auto; null when scheduled sync is off |
next_sync_at | When the next scheduled sync starts; null when none is planned |
current_status | in_progress while a scheduled run is going, failed when the latest run failed, otherwise idle |
recent_runs | Up to the 10 most recent scheduled runs, newest first |
Each run has started_at, finished_at (null while it runs, and for a run that timed out), status (in_progress, success or failed), a short message, and for a failed run:
error_category | Meaning |
|---|---|
notion_connection | Notiondesk could not reach your Notion workspace, for example after the connection was removed |
notion_configuration | Your Notion databases or pages are not set up the way Notiondesk expects |
temporary_notion_issue | Notion had a temporary problem |
temporary_network_issue | A temporary network problem interrupted the run |
unknown | Any other cause |
When requires_customer_action is true, the next run fails too until you fix something, such as the Notion connection. See How to synchronize your help center with Notion.
recent_runs. See Trigger Notion syncs with the Notiondesk API to confirm a triggered sync.Errors
| Status | code | When |
|---|---|---|
| 400 | validation_error | On GET /sites: page_size is outside 1 to 100, the cursor is invalid, or the query has an unknown parameter |
| 403 | insufficient_scope | The key lacks the read scope |
| 404 | not_found | site_id names no help center in your workspace |
Every route can also answer invalid_version, authentication_error, rate_limited and internal_error. See Handle Notiondesk API errors, rate limits, and retries.
Common questions
Where do I find my help center's site_id?
site_id?Call GET /sites: each help center's id is its site_id. It is also the identifier after /s/ in your Notiondesk dashboard's address bar.
Can I create or delete a help center with the Notiondesk API?
No. Create and delete help centers in the dashboard. The API reads and configures the help centers that already exist.
Can I change the sync frequency with the API?
No. The API turns scheduled sync on or off. Change the frequency in the dashboard.
Why does a help center list fewer languages than I configured?
locales and supported_locales are limited to your plan's language allowance. Languages beyond the allowance are not served.