List tasks for a project
GET/api/projects/:id/tasks
List tasks for a project. When called without query params, returns the full task list (with relations). Requires tasks.read. Pass ?fields=minimal to receive only id, title, taskNumber, and taskKey (used for gate criterion linking and MCP key resolution) — that mode accepts full-scope tasks.read, gates.create, or gates.update. The .own scope on tasks.read does NOT grant access here, since minimal mode returns every task in the project regardless of ownership. PT-602/PT-684/PT-685/PT-905: ?ready=true, ?review=true, ?blocked=true, and ?awaiting_decision=true (mutually exclusive) switch to the flow views — the response becomes { data: FlowTaskRow[], pagination }, the same row shape registered under taskListResponseSchema for GET /api/tasks. Every flow row carries epic and slaUrgency. Review rows additionally carry reviewWaitMinutes and pullRequestUrl (the open pr_link value, or null when the review row has no PR). Blocked-reveal rows additionally carry blockedBy. Decisions rows (ADR-028) additionally carry decisionWaitMinutes, decisionQuestion, decisionOptions, decisionRequestId, and decisionAskedByUserId, ordered oldest-first by asked_at.
Request
Responses
- 200
- 400
- 401
- 403
Successful response
Bad Request — unsupported fields query parameter value
Unauthorized — authentication credentials are missing or invalid
Forbidden — full listing requires tasks.read; ?fields=minimal requires one of tasks.read, gates.create, or gates.update