This guide shows how to update an existing cloud integration sync using GraphQL. Use this when you need to change sync context values such asDocumentation Index
Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
Use this file to discover all available pages before exploring further.
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.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
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.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.