Settings
Workspace preferences, members, and related admin HTTP APIs.
v1 settings currently expose preferences only. Members and the current workspace use /api/v1/workspace-members and /api/v1/workspaces. Session routes cover Git repository and Agent Runtime rollout. See Workspace settings.
Preferences
| Method | Path | Auth |
|---|---|---|
| GET, PATCH | /api/v1/settings/preferences | Bearer API key (any scope) |
| GET, PATCH | /api/settings/preferences | Session |
v1 401: { "error": "Valid bearer API key is required" }. Success: { preference }.
PATCH JSON (all optional): theme (system | light | dark), autoConnectOnDrop, canvasErrorNotifications, canvasViewport { x, y, zoom }, snapToGrid (off | small | large), showCanvasControls, allowTelemetry, chatAiProvider (openai | anthropic | google | local:claude-code | local:codex), chatAiModel, liveTransports, workflowFolders, workflowFolderAssignments, chatFolders, chatFolderAssignments.
agentRuntimeRollout is ignored here. Use PATCH /api/settings/agent-rollout (Admin/Owner) with { surface, mode } (surface: agentNode | copilot | home; mode: legacy | shadow | v2 or null).
Workspace and members
| Method | Path | Notes |
|---|---|---|
| GET | /api/v1/workspaces | { workspace } for the key's workspace; 404 if missing |
| GET | /api/v1/workspace-members | { members[] }; workspace key required |
| POST | /api/v1/workspace-members | { email, role }; workspace key and Admin/Owner; 201 { member } |
Invite role must be admin, member, or viewer. Empty email: 400. Non-admin invite on v1: 403 "Admin or Owner workspace role is required to invite members."
tRPC workspaceShell.workspaceMembers.invite does not enforce Admin/Owner — only membership.
Session-only settings
| Method | Path | Role |
|---|---|---|
| GET | /api/settings/repository | Member |
| PATCH, DELETE | /api/settings/repository | Admin/Owner |
| GET, PATCH | /api/settings/agent-rollout | GET member; PATCH Admin/Owner |
Repository PATCH: { owner, repo, defaultBranch?, pathPrefix?, credentialId?, policy? } → { repository, repositoryAccess }. DELETE → { deleted: true\|false }.
