Skip to content
Select themeSelect language

`GET /api/tasks/{id}/subtasks` — list the delegated child tasks of a parent task. Workspace-scoped: a parent task in another workspace is `NotFound`.

GET
/api/tasks/{id}/subtasks
curl --request GET \
--url https://example.com/api/tasks/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/subtasks
id
required
string format: uuid

Parent task ID

Media typeapplication/json
Array<object>
object
agent_profile_id
required
string | null format: uuid
agent_profile_version
required
integer | null format: int32
agent_type
required
string
completed_at
required
string | null format: date-time
config
required
container_id
required
string | null
correlation_id
required
string | null format: uuid
cost_usd
required

Agent cost (USD) + token usage, folded in by the tasks-board handler from task_outcomes. None for a task with no recorded outcome and on endpoints that don’t join usage (From<Task> defaults them).

number | null format: double
created_at
required
string format: date-time
error_message
required
string | null
git_branch
required
string | null
group_id
required
string | null format: uuid
id
required
string format: uuid
input_tokens
required
integer | null format: int64
issue_id
required
string | null
issue_url
required
string | null
notes
required
string | null
output_tokens
required
integer | null format: int64
parent_task_id
required
string | null format: uuid
project_id
required
string | null format: uuid
prompt
required
string
session_id
required
string | null
started_at
required
string | null format: date-time
status
required

Task lifecycle status — an OPEN String, not a closed enum. The tasks.status column has no DB CHECK; its PRIMARY lifecycle is pending on create → starting/running → terminal completed/failed/cancelled. The wire type stays an unconstrained string on purpose: a value outside that set (a demo/seed state, or a future status) must render gracefully, never break the whole board. A closed-enum narrowing here made ONE unmodelled row fail the client contract validation and blank the entire Tasks list (ADR 0047 fail-loud is right for structural drift, wrong for an open evolving lexeme). The client maps known values to a tone/label + falls back to neutral for the rest.

string
summary
required

#538 — the (server-truncated) outcome summary, folded in by the tasks-board handler from task_outcomes; drives the per-task TL;DR. None for a task with no recorded summary and on endpoints that don’t join usage.

string | null
title
required
string
user_id
required
string format: uuid
Example
[
{
"status": "running"
}
]