The Notiondesk API lets you publish your Notion edits the moment they are ready: sync a whole help center, one collection or one article, from a script, a CI pipeline or your own tool. You can also turn scheduled sync on or off. Your content stays in Notion; a sync reads it again and publishes the changes.
| Method | Path | Scope | Does |
|---|---|---|---|
POST | /sites/{site_id}/sync | sync | Syncs the whole help center |
POST | /sites/{site_id}/categories/{category_id}/sync | sync | Syncs one collection and its articles |
POST | /sites/{site_id}/articles/{article_id}/sync | sync | Syncs one article |
PATCH | /sites/{site_id}/settings/auto-sync | sync | Turns scheduled sync on or off |
New to syncing? Read How to synchronize your help center with Notion first.
Sync a whole help center
curl -i -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/sync" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Idempotency-Key: 9b2e4c1a-sync-after-notion-edit"Notiondesk reads every article and collection from Notion again and publishes the changes. The route answers 204 No Content as soon as the sync is queued, and the sync runs in the background.
Only one site sync runs at a time. While a sync of the help center is queued or running, whether it was scheduled, started from the dashboard or started through the API, another trigger answers 409 conflict_error. Wait a few minutes and trigger again.
Content that has not changed since its last sync is not translated again.
Sync one collection
curl -i -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/categories/1761493027/sync" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Idempotency-Key: 2c8e5b7d-sync-billing"Use the collection's id from the collection list. Notiondesk reads the collection and each of its articles from Notion again, then publishes only the articles edited since their last sync. Unchanged articles are not translated or billed again.
Sync one article
curl -i -X POST "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/articles/1761580412/sync" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Idempotency-Key: 4d7a0f3e-sync-getting-started"Use the article's id from the article list.
How collection and article syncs differ from a site sync
| Site sync | Collection or article sync | |
|---|---|---|
| Reads from Notion | Every article and collection | One collection and its articles, or one article |
| While another sync of the same item runs | Answers 409 conflict_error | Queues another sync. It never answers conflict_error |
| Limited by | One sync at a time | Your key's write budget of 20 requests per minute |
Every finished sync refreshes the whole help center. Trigger a sync once after each edit in Notion, not on a timer. For regular updates, use scheduled sync instead.
Confirm a sync
A sync trigger answers 204 when the sync is queued, not when it finishes. Syncs started through the API do not appear in the sync status, which lists scheduled runs only.
To confirm a sync, read the content it publishes:
- Trigger the sync and note the time.
- Read the edited article with
GET /sites/{site_id}/articles/{article_id}every 30 seconds.
- Stop when
last_updatedis later than the time you noted, ortextshows your edit.
- If
sync_failedistrue,sync_error_codesays why. Fix the article in Notion and sync again.
Turn scheduled sync on or off
curl -i -X PATCH "https://api.notiondesk.so/sites/c74781f6-1aea-4e17-ab23-bbb8b4d174b6/settings/auto-sync" \
-H "Authorization: Bearer $NOTIONDESK_API_KEY" \
-H "nd-version: 2026-10-16" \
-H "Content-Type: application/json" \
-d '{"auto_sync_enabled": true}'| Field | Type | Notes |
|---|---|---|
auto_sync_enabled | boolean | Whether Notiondesk syncs from Notion on a schedule |
The route answers 204 No Content. Read the new state in auto_sync_enabled of the help center, and the schedule in its sync status.
- Send the JSON booleans
trueorfalse. The values0and"false"are read astrue.
- The sync frequency cannot be changed through the API: sending
auto_sync_frequencyanswers 400validation_error. Change it in the dashboard.
- Your plan must include scheduled sync.
- Turning scheduled sync on lets unattended syncs start billed translation while automatic translation is on.
This route needs the sync scope, not write, because it decides when unattended syncs run.
Errors
| Status | code | When |
|---|---|---|
| 400 | validation_error | Auto-sync only: the body has an unknown field, including auto_sync_frequency |
| 403 | insufficient_scope | The key lacks the sync scope |
| 403 | permission_denied | The help center is disabled, your plan does not include scheduled sync, or the key's creator cannot sync this help center |
| 404 | not_found | The help center, collection or article does not exist in your workspace |
| 409 | conflict_error | Site sync only: a sync of the help center is already queued or running |
| 409 | request_in_progress | A request with the same Idempotency-Key is still being processed |
conflict_error and request_in_progress are different errors with the same status: branch on code. See Handle Notiondesk API errors, rate limits, and retries.
Common questions
Is it safe to retry a sync trigger?
Yes, with an Idempotency-Key. A retry with the same key answers 204 with X-Idempotent-Replay: true and queues nothing, even while the first sync still runs.
How do I know when a sync finished?
Read the synced article or collection until last_updated is later than your trigger, or text shows your edit. Do not rely on sync_in_progress alone: it can stay false for a few seconds after the trigger, before the queued sync starts. API-triggered syncs are not listed in the sync status.
Should I sync one article or the whole help center?
Sync one article after you edit that article, and one collection after you edit several articles in it. Sync the whole help center after larger changes, such as moving articles between collections.
Can I sync from GitHub Actions?
Yes. Store the key as a repository secret and call the site sync route in a workflow step. See Automate common help center tasks with the Notiondesk API.