{"openapi":"3.1.0","info":{"title":"Speckle (BYOK) API","version":"0.1.0","description":"Speckle (BYOK) lets an AI assistant read your own Speckle data through the Speckle API with a key you supply (Speckle personal access token (read scopes only)). Read-only: 7 tools (get_active_user, list_my_workspaces, list_my_projects, get_project, list_project_models, list_project_versions, list_model_versions). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-speckle.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-speckle/docs"},"termsOfService":"https://connectorbay.com/byok-speckle/terms"},"servers":[{"url":"https://byok-speckle.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-speckle/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_active_user":{"post":{"operationId":"get_active_user","summary":"Show the Speckle account the token belongs to: id, name, company, verified flag, server role and creation date. The emai","description":"Show the Speckle account the token belongs to: id, name, company, verified flag, server role and creation date. The email address is not requested. Use for \"Which Speckle account is my token connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_active_userArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_my_workspaces":{"post":{"operationId":"list_my_workspaces","summary":"List the Speckle workspaces the token's user belongs to, with slug, the user's role, description and dates. Use for \"Whi","description":"List the Speckle workspaces the token's user belongs to, with slug, the user's role, description and dates. Use for \"Which Speckle workspaces am I a member of\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's cursor field to get the next page; leave empty for the first page.","title":"Cursor"}},"title":"list_my_workspacesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_my_projects":{"post":{"operationId":"list_my_projects","summary":"List the Speckle projects the token's user participates in, newest activity first, with visibility, the user's role and ","description":"List the Speckle projects the token's user participates in, newest activity first, with visibility, the user's role and the source apps used. Page with the cursor. Use for \"Which Speckle projects do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's cursor field to get the next page; leave empty for the first page.","title":"Cursor"}},"title":"list_my_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_project":{"post":{"operationId":"get_project","summary":"Get one Speckle project by id: name, description, visibility, the user's role, source apps and dates. Use for \"Tell me a","description":"Get one Speckle project by id: name, description, visibility, the user's role, source apps and dates. Use for \"Tell me about Speckle project ad9c9929e6\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Speckle project id (the short id in the project URL, for example 'ad9c9929e6').","maxLength":40,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"get_projectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_models":{"post":{"operationId":"list_project_models","summary":"List the models in a Speckle project (for example architecture, structure, MEP) with display name, description, preview ","description":"List the models in a Speckle project (for example architecture, structure, MEP) with display name, description, preview image URL and dates. Page with the cursor. Use for \"What models are in Speckle project ad9c9929e6\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Speckle project id (the short id in the project URL, for example 'ad9c9929e6').","maxLength":40,"title":"Project Id","type":"string"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's cursor field to get the next page; leave empty for the first page.","title":"Cursor"}},"required":["project_id"],"title":"list_project_modelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_versions":{"post":{"operationId":"list_project_versions","summary":"List the latest versions (commits) across all models of a Speckle project, with message, source application, author name","description":"List the latest versions (commits) across all models of a Speckle project, with message, source application, author name, model and object count. Page with the cursor. Use for \"What changed recently in Speckle project ad9c9929e6\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Speckle project id (the short id in the project URL, for example 'ad9c9929e6').","maxLength":40,"title":"Project Id","type":"string"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's cursor field to get the next page; leave empty for the first page.","title":"Cursor"}},"required":["project_id"],"title":"list_project_versionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_model_versions":{"post":{"operationId":"list_model_versions","summary":"List the versions of one model in a Speckle project, newest first, with message, source application, author name and obj","description":"List the versions of one model in a Speckle project, newest first, with message, source application, author name and object count. Page with the cursor. Use for \"Show the version history of model 8d3e1a2b4c in Speckle project ad9c9929e6\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Speckle project id (the short id in the project URL, for example 'ad9c9929e6').","maxLength":40,"title":"Project Id","type":"string"},"model_id":{"description":"Speckle model id inside the project (from list_project_models).","maxLength":40,"title":"Model Id","type":"string"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's cursor field to get the next page; leave empty for the first page.","title":"Cursor"}},"required":["project_id","model_id"],"title":"list_model_versionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}