Skip to content
Select themeSelect language

`GET /api/team-board` — the dense, server-paginated delivery board for the active workspace: one row per agent profile (or unassigned-agent fallback), each carrying aggregate queued / running / needs-input / done-PR / failed counts plus last activity and cost. Route name unchanged (ADR 0040).

GET
/api/team-board
curl --request GET \
--url https://example.com/api/team-board \
--cookie supacloud_session=<supacloud_session>
status
string

Status tab: active / attention / failed (anything else = all).

q
string

Free-text search over the agent profile name + agent type.

sort
string

Whitelisted sort column: last_activity | cost_usd | agent_type | total_tasks | prs_merged | avg_duration_secs. Default last_activity.

dir
string

asc | desc (default desc).

period
string

#626 — the reporting period the WHOLE board is scoped to: today | 7d | 30d | 90d | year (default 7d). Windows the rows, facets, KPIs and trend on tasks.created_at >= since.

limit
integer format: int64
offset
integer format: int64
include_facets
boolean

Recompute the NavTab count facets (default true). The board sends false for a tab/page change (the counts don’t depend on either).

include_kpis
boolean

Compute the windowed KPI block (default true). The board sends false for a tab/page change (the KPIs depend only on the period, not the tab/page).

Media typeapplication/json

GET /team-board body — one page of dense per-profile delivery rows.

object
facets
One of:
null
items
required
Array<object>

One dense delivery-board row: an agent-profile bucket with aggregate task counts (no per-task Vecs). profile is resolved for rows with a profile id; fallback_agent_type is set for the unassigned-fallback bucket.

object
active_tasks
required
integer format: int64
avg_duration_secs

#626 — mean wall-clock seconds over the bucket’s completed tasks (“Ø Dauer”); null when no task completed in the window.

number | null format: double
cost_usd
number | null format: double
done_pr
required
integer format: int64
failed
required
integer format: int64
fallback_agent_type
string | null
last_activity
string | null format: date-time
last_model

#626 — the most recent model the bucket’s outcomes recorded; the FE prefers the profile’s pinned fixed_model and falls back to this for a non-fixed (auto-policy) profile. null when no outcome carried a model.

string | null
needs_input
required
integer format: int64
profile
One of:
null
prs_merged
required

#626 — PRs merged by this bucket’s tasks (the “PRs” column).

integer format: int64
queued
required
integer format: int64
running
required
integer format: int64
total_tasks
required
integer format: int64
trend
required

#626 — a per-day task-count sparkline over the window (oldest → newest, gap-filled to a fixed length). Drives the “Trend” column.

Array<integer>
kpis
One of:
null
total
required
integer format: int64
Example
{
"items": [
{
"profile": {
"avatar_kind": "color",
"effort_default": "minimal",
"execution_mode": "normal",
"model_policy": "manual"
}
}
]
}

Structured client 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"
}

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"
}