API reference
Operator - Workspaces
One tag: method, path, summary, auth, and scopes. Request and response fields ship in this page — expand a row to read the contract.
Endpoints
3
GET
/api/v1/operator/workspaces
Web Session
List user workspaces
/api/v1/operator/workspaces
Web Session
List user workspaces
Description
Returns every workspace the signed-in user belongs to. Auth is a browser session plus CSRF (`:operator_api`); machine Bearer tokens (`agk_` / access tokens) are refused with 401 "An authenticated operator session is required."
Auth
Web SessionResponses
200
Workspaces the session user can access
Returns: WorkspaceList
Workspaces the session user can access
Returns: WorkspaceList
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| workspaces | array<object> | Yes | Workspace records |
| workspaces[].id | string | Yes | Workspace UUID |
| workspaces[].name | string | Yes | Workspace name |
| workspaces[].status | string (active, paused, archived) | Yes | Workspace status (read-only on this API) |
| workspaces[].plan | string (starter, growth, scale) | Yes | Billing plan (read-only on this API) |
| workspaces[].settings | object | Yes | Workspace settings map |
| workspaces[].inserted_at | datetime (ISO 8601) | Yes | Created at |
| workspaces[].updated_at | datetime (ISO 8601) | Yes | Updated at |
| workspaces[].summary | string | No | Short description |
| workspaces[].slug | string | Yes | URL slug |
Example
{
"workspaces": [
{
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"inserted_at": "2026-01-15T10:00:00Z",
"name": "Acme Corp",
"plan": "growth",
"settings": {
"data_controls": {
"allow_self_serve_exports": true,
"auto_purge_enabled": false,
"eval_retention_days": 180,
"export_formats": [
"json"
],
"include_audit_log_exports": true,
"trace_retention_days": 90
},
"observability": {
"redacted_keys": [
"authorization",
"cookie"
],
"redaction_enabled": true
}
},
"slug": "acme-corp",
"status": "active",
"summary": "Payments and fulfillment agents",
"updated_at": "2026-03-27T09:00:00Z"
}
]
}
401
No operator browser session
No operator browser session
GET
/api/v1/operator/workspaces/:id
Web Session
Get workspace details
/api/v1/operator/workspaces/:id
Web Session
Get workspace details
Description
Returns one workspace the signed-in user has an active membership in. The path UUID does not have to be the session's current workspace. Disabled or invited memberships do not grant read access (404).
Auth
Web SessionParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Workspace UUID. Any workspace with an active membership is readable. |
Responses
200
Workspace details
Returns: Workspace
Workspace details
Returns: Workspace
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Workspace UUID |
| name | string | Yes | Workspace name |
| status | string (active, paused, archived) | Yes | Workspace status (read-only on this API) |
| plan | string (starter, growth, scale) | Yes | Billing plan (read-only on this API) |
| settings | object | Yes | Workspace settings map |
| inserted_at | datetime (ISO 8601) | Yes | Created at |
| updated_at | datetime (ISO 8601) | Yes | Updated at |
| summary | string | No | Short description |
| slug | string | Yes | URL slug |
Example
{
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"inserted_at": "2026-01-15T10:00:00Z",
"name": "Acme Corp",
"plan": "growth",
"settings": {
"data_controls": {
"allow_self_serve_exports": true,
"auto_purge_enabled": false,
"eval_retention_days": 180,
"export_formats": [
"json"
],
"include_audit_log_exports": true,
"trace_retention_days": 90
},
"observability": {
"redacted_keys": [
"authorization",
"cookie"
],
"redaction_enabled": true
}
},
"slug": "acme-corp",
"status": "active",
"summary": "Payments and fulfillment agents",
"updated_at": "2026-03-27T09:00:00Z"
}
401
No operator browser session
No operator browser session
404
Workspace not found or no active membership
Workspace not found or no active membership
PUT
/api/v1/operator/workspaces/:id
Web Session
Update workspace
/api/v1/operator/workspaces/:id
Web Session
Update workspace
Description
Updates the session's current workspace. `:id` must equal `current_scope.workspace.id`; any other UUID is 404 even if the caller is an owner or admin of that other workspace. Owner/admin only (`403` `admin_required` for members, `read_only_role` for auditors). Writable fields are `name`, `slug`, `summary`, and `settings`. `plan` and `status` are dropped — operators cannot change billing plan or pause/archive via this API. Shipped `settings` keys include `observability.redaction_enabled` / `observability.redacted_keys` and `data_controls` (`trace_retention_days`, `eval_retention_days`, `auto_purge_enabled`, `allow_self_serve_exports`, `include_audit_log_exports`, `export_formats`). `allow_self_serve_exports` is stored only; it does not let a member call the operator export/deletion/purge routes (those still require owner/admin).
Auth
Web SessionRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| workspace | object | Yes | Workspace attributes to update |
| workspace.name | string | No | Workspace name (2–120 characters) |
| workspace.status | string | No | Ignored. Status is platform-admin only (active | paused | archived). |
| workspace.plan | string | No | Ignored. Plan is billing-owned and is never written here. |
| workspace.settings | object | No | Replacement settings map (not deep-merged). Shipped keys: observability.redaction_enabled, observability.redacted_keys, data_controls.trace_retention_days, data_controls.eval_retention_days, data_controls.auto_purge_enabled, data_controls.allow_self_serve_exports (stored flag only; does not authorize member exports), data_controls.include_audit_log_exports, data_controls.export_formats. |
| workspace.summary | string | No | Short workspace description |
| workspace.slug | string | No | URL slug (`^[a-z0-9-]+$`); unique across the platform |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Must be the session's current workspace UUID. Other workspace IDs 404. |
Responses
200
Workspace updated
Returns: Workspace
Workspace updated
Returns: Workspace
Response Body
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Workspace UUID |
| name | string | Yes | Workspace name |
| status | string (active, paused, archived) | Yes | Workspace status (read-only on this API) |
| plan | string (starter, growth, scale) | Yes | Billing plan (read-only on this API) |
| settings | object | Yes | Workspace settings map |
| inserted_at | datetime (ISO 8601) | Yes | Created at |
| updated_at | datetime (ISO 8601) | Yes | Updated at |
| summary | string | No | Short description |
| slug | string | Yes | URL slug |
Example
{
"id": "4ce4d170-e6d5-4118-8f4d-fac69dc099ea",
"inserted_at": "2026-01-15T10:00:00Z",
"name": "Acme Corp",
"plan": "growth",
"settings": {
"data_controls": {
"allow_self_serve_exports": true,
"auto_purge_enabled": false,
"eval_retention_days": 180,
"export_formats": [
"json"
],
"include_audit_log_exports": true,
"trace_retention_days": 90
},
"observability": {
"redacted_keys": [
"authorization",
"cookie"
],
"redaction_enabled": true
}
},
"slug": "acme-corp",
"status": "active",
"summary": "Payments and fulfillment agents",
"updated_at": "2026-03-27T09:00:00Z"
}
401
No operator browser session
No operator browser session
403
Owner or admin membership required, or the workspace is archived/read-only
Owner or admin membership required, or the workspace is archived/read-only
404
Not the session's current workspace, or workspace not found
Not the session's current workspace, or workspace not found
422
Validation error (name length, slug format/uniqueness)
Validation error (name length, slug format/uniqueness)