referencePoint or viewName, and optionally trigger a run immediately.
The supported flow is:
- List syncs for a project
- Choose target sync IDs
- Update each sync with
syncMutations.update - Optionally trigger immediate execution for selected syncs
Pre-requisites
- A personal access token with
streams:readandstreams:writescopes - Access to the target project with edit permissions
- The target Speckle
projectIdstring (retrieve from the web app URL, GraphQLproject(id: …), or SpecklePy project helpers; listing patterns live under SpeckleClient → Resource Properties)
This flow is suitable for citizen developers. It uses standard PAT scopes and does not require
server admin permissions.
Before you start: IDs and quick test
You need two IDs:projectId: the Speckle project IDsync.id: the sync entry you want to update
projectId, list or fetch projects via your SDK (SpecklePy: workspace.get_projects, active_user.get_projects, then project.get; workspace vs personal hosts described on SpeckleClient). Sync row IDs still come from the Step 1 project.syncs query—until SpecklePy exposes them, call that query through execute_query or substitute YOUR_PROJECT_ID in the curl example and read items[].id from the response.
Quick test with curl:
Overview
Updating sync configuration is usually a two-call pattern:- Query
project.syncsto get the syncs you want to change - Run
syncMutations.updateper sync with a newcontextpayload
Step 1: List syncs in the project
Use this to discover sync IDs before updating. POST/graphql
Query:
Step 2: Update one sync
POST/graphql
Mutation:
UpdateSyncInput supports:
id(ID!): Sync identifierprojectId(String!): Owning project identifiercontext(JSONObject): Integration-specific sync settingstriggerNow(Boolean): Iftrue, requests an immediate execution
Context shape and enums
Typical context payload shape for ACC and ProjectWise syncs:referencePoint values:
internalOriginprojectBasePointsurveyPoint
viewName values:
- Any string matching a valid source view name
nullto clear view scoping
context is a JSON object. Keys are integration-specific conventions, not strongly typed GraphQL
fields. Common keys in ACC and ProjectWise flows include referencePoint and viewName.Keys the server owns on SharePoint syncs
A SharePoint sync’scontext also carries keys the server sets and maintains:
tenantId,siteId,driveId, anditemIdlocate the file in Microsoft 365.checkpointidentifies the last published content Speckle synced.lastPolledAtis when Speckle last checked the file.consecutiveMisses,consecutiveProbeFailures, andpauseReasontrack failed checks and why the sync paused.
syncMutations.update drops these keys from the context you send, without an error. Send only the settings keys, such as referencePoint.
Response example:
Step 3: Repeat for batch updates
For batch operations:- Query
project.syncs - Filter target syncs in your client
- Run
syncMutations.updateonce per sync - Set
triggerNowonly where needed
Import earlier versions of an ACC file
An ACC sync starts at the file version current when it was created. To bring earlier versions into the same model, list the file’s version history on the sync and import the ones you want. Each imported version is dated at its ACC creation time, so it slots into the model’s history and never becomes the latest version. ACC syncs only; the field isnull for integrations that cannot list versions.
Check first whether the caller may import, with the project permission check:
syncItem is null for a version never synced):
id:
- more than five distinct ids are passed (
SYNC_SOURCE_VERSION_IMPORT_LIMIT); import a longer history in rounds - the sync is paused (
SYNC_PAUSED); resume it withsyncMutations.setActivefirst - an id is not in the file’s version list (
SYNC_SOURCE_VERSION_NOT_FOUND) - a version predates the version history the workspace plan keeps (
SYNC_SOURCE_VERSION_BEYOND_HISTORY_LIMIT) - ACC reports no creation time for a version (
SYNC_SOURCE_VERSION_UNDATED) - the workspace runs in compatibility mode (
SYNC_SOURCE_VERSION_IMPORT_UNSUPPORTED_ON_RAIL)
syncItem before you import.
Operational notes
- If a sync is paused (
active: false), updates withtriggerNow: truecan be rejected. - Use
syncMutations.setActiveto resume a sync before requesting immediate execution. - Keep
contextkeys aligned with integration UI and backend conventions in your environment. - For large batches, page through
syncs(cursor, limit)and apply updates in controlled chunks. - If a legacy ACC sync has not been migrated yet, run
syncMutations.migrateLegacyfirst, then retry update.
What developers need to know
Which token scopes and permissions do I need?
Which token scopes and permissions do I need?
Use a personal access token with
streams:read and streams:write. The GraphQL mutation is gated on streams:write. Listing syncs reads project data, so streams:read is needed for the query step. Your account also needs permission to manage cloud integration syncs for that project (the same capability you use in the web app to create or edit ACC or ProjectWise syncs).How do I find my project ID?
How do I find my project ID?
The GraphQL
projectId is the project’s id string (same value you see in URLs as /projects/{id}/).- Web app: copy
{id}from/projects/{id}/. - GraphQL: run
project(id: "...") { id }. - SpecklePy: list/fetch projects via
workspace.get_projects,active_user.get_projects, andproject.get(see SpeckleClient → Resource Properties). - Sync ids: get
items[].idfrom Step 1project.syncs. Useexecute_queryif you are scripting in Python.
Is there a bulk update mutation for many syncs?
Is there a bulk update mutation for many syncs?
No. Use
project.syncs with pagination (cursor, limit), filter the rows you need on the
client, then call syncMutations.update once per sync. Set triggerNow only where you want an
immediate run.Why does immediate run fail after my update?
Why does immediate run fail after my update?
If
triggerNow is true and the sync is paused (active: false), the server rejects the immediate
run. Call syncMutations.setActive with active: true first, then update again with triggerNow: true, or omit triggerNow until you are ready to run.What is the difference between syncMutations and accSyncItemMutations?
What is the difference between syncMutations and accSyncItemMutations?
New integrations use
syncMutations for create, update, delete, pause, and legacy migration.
Older accSyncItemMutations fields are deprecated in favour of syncMutations. Prefer
syncMutations.update for changing sync context going forward.What if my ACC sync errors about migration?
What if my ACC sync errors about migration?
Older ACC syncs may still exist only in legacy storage until migrated. Run
syncMutations.migrateLegacy with the sync id and project id, then run syncMutations.update
again. The web app may expose a migrate action for the same step.Which GraphQL error codes should I handle?
Which GraphQL error codes should I handle?
Can I automate sync updates with SpecklePy?
Can I automate sync updates with SpecklePy?
Yes. SpecklePy does not yet expose dedicated sync mutation helpers, but you can run same GraphQL operations from Python. Authenticate with
authenticate_with_token, then call execute_query or send direct POST requests to {host}/graphql with requests/httpx.