Skip to content
Select themeSelect language

`GET /api/workspaces/{id}/backlog` (ADR 0045 Stage 1). RBAC: `Read`. Returns one page of the workspace's backlog items with the pager total and (optionally) the per-state facets — the #358 `{items, total, facets}` board contract.

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

Workspace ID whose backlog to list

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

One page of the workspace backlog ({items, total, facets})

Media typeapplication/json

ADR 0045 Stage 1 — one page of the workspace backlog read model: the items, the pager total under the same filter, and (optionally) the per-state facets. Mirrors the {items, total, facets} shape of services::projects::board::ProjectBoardData.

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

One backlog item projected for the read API. updated_at is RFC3339.

object
external_id
required
string
id
required
string format: uuid
kind
string | null
priority
integer | null format: int32
readiness
string | null
scope

#532 (U2) — the classification SCOPE axis (small|medium|large), None until classified.

string | null
source
required

The issue SOURCE (linear | notion | a git-provider name), #708 X3 (was tracker).

string
state
required
string
title
string | null
updated_at
required
string
total
required
integer format: int64
Examplegenerated
{
"facets": {
"counts": {
"additionalProperty": 1
}
},
"items": [
{
"external_id": "example",
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"kind": "example",
"priority": 1,
"readiness": "example",
"scope": "example",
"source": "example",
"state": "example",
"title": "example",
"updated_at": "example"
}
],
"total": 1
}

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