Skip to content
Select themeSelect language

`GET /api/workspaces/{id}/adaptive` (ADR 0045 §3.12). RBAC: workspace member. Resolves the experience tier (auto-advancing + persisting on accrued signals) and the capability-detection map in one response so the FE can size its surface in a single fetch.

GET
/api/workspaces/{id}/adaptive
curl --request GET \
--url https://example.com/api/workspaces/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/adaptive \
--cookie supacloud_session=<supacloud_session>
id
required
string format: uuid

Workspace ID whose adaptive surface to resolve

Resolved experience tier + available capabilities

Media typeapplication/json

The adaptive-surfacing payload the FE consumes for §3.12: the resolved experience tier (UI depth) + the available-capability map (feature existence).

object
available_capabilities
required

Which engine features are wired/entitled for this workspace.

object
api_budget
required

The $-budget usage surface — only when the workspace has an API-key (pay-per-token) credential.

boolean
cross_model_routing
required

Cross-model / cross-provider auto-routing — needs > 1 reachable provider.

boolean
debate
required

The multi-agent Debate council automation — needs >= 2 usable providers.

boolean
interactive_approvals
required

Interactive Rueckfragen / approval gating — only when the plan entitles any autonomy at all (ceiling > 0); a level-0-capped workspace never gates because it never auto-acts.

boolean
per_harness_effort
required

Per-harness EFFORT controls — needs a reasoning-capable model in the catalog (the effort slider only makes sense for reasoning = true models).

boolean
subscription_saturation
required

The subscription-saturation usage surface (rolling-5h / weekly gauges) — only when the workspace has an OAuth (subscription) credential.

boolean
workspace_backlog
required

The WORKSPACE-scope backlog board + global dispatch — needs >= 2 backlog-enabled projects.

boolean
experience_tier
required

The resolved experience tier (auto-advance applied) — novice | intermediate | expert. The FE renders the localized label via Paraglide.

string
Allowed values: novice intermediate expert
Example
{
"experience_tier": "novice"
}

Authentication required

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Permission denied

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}

Structured server error

Media typeapplication/json

The canonical JSON body of every error response — the single source of truth the frontend binds to. Every AppError serializes as this exact shape, and the generated OpenAPI component ApiErrorBody (with its ErrorCode enum) is what the frontend error schema is generated from, so there is no hand-written error schema on either end.

object
code
required

Machine-readable, stable error code.

string
Allowed values: not_found unauthorized forbidden bad_request unprocessable precondition_failed conflict method_not_allowed rate_limited quota_exceeded database_error docker_error vault_error internal_error
details
One of:
null
error
required

Human-readable message (the server’s English text; the client may localize by code).

string
Example
{
"code": "not_found"
}