Trigger Notion syncs with the Notiondesk API

Sync your Notiondesk help center from Notion through the API: trigger a site, collection or article sync, and turn scheduled sync on or off.

5 min read

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.

MethodPathScopeDoes
POST/sites/{site_id}/syncsyncSyncs the whole help center
POST/sites/{site_id}/categories/{category_id}/syncsyncSyncs one collection and its articles
POST/sites/{site_id}/articles/{article_id}/syncsyncSyncs one article
PATCH/sites/{site_id}/settings/auto-syncsyncTurns scheduled sync on or off

New to syncing? Read How to synchronize your help center with Notion first.

While automatic translation is on, every sync translates the content it changes and bills it as translation characters. See Automatic AI translation pricing and billing before you automate syncs.

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.

An article sync imports the article's files hosted in Notion again: images, videos, files, audio, PDFs and embeds uploaded to Notion. For an article holding any of them, every call publishes a new revision, and while automatic translation is on, translates and bills every auto-translated language again, even when the text is unchanged. Notiondesk keeps 50 revisions per translation, so repeated calls push older revisions out of the restore history.

How collection and article syncs differ from a site sync

Site syncCollection or article sync
Reads from NotionEvery article and collectionOne collection and its articles, or one article
While another sync of the same item runsAnswers 409 conflict_errorQueues another sync. It never answers conflict_error
Limited byOne sync at a timeYour 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:

  1. Trigger the sync and note the time.
  1. Read the edited article with GET /sites/{site_id}/articles/{article_id} every 30 seconds.
  1. Stop when last_updated is later than the time you noted, or text shows your edit.
  1. If sync_failed is true, sync_error_code says 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}'
FieldTypeNotes
auto_sync_enabledbooleanWhether 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 true or false. The values 0 and "false" are read as true.
  • The sync frequency cannot be changed through the API: sending auto_sync_frequency answers 400 validation_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

StatuscodeWhen
400validation_errorAuto-sync only: the body has an unknown field, including auto_sync_frequency
403insufficient_scopeThe key lacks the sync scope
403permission_deniedThe help center is disabled, your plan does not include scheduled sync, or the key's creator cannot sync this help center
404not_foundThe help center, collection or article does not exist in your workspace
409conflict_errorSite sync only: a sync of the help center is already queued or running
409request_in_progressA 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.

What's next

Related articles

Was this page helpful?

Still need help? Ask us