# List tasks

`GET /api/v1/tasks`

MCP tool: `list-tasks`

Filters compose. `status` is what somebody asserted and `state` is the computed readiness; asking both finds where they disagree.
`ref_url` is every task citing any of those URLs, compared normalised — the check to make before creating anything.
Rows carry no `body`: `get-task` reads the whole task.

## Parameters

- `project` (query, optional) — Only these `proj_…` ids (repeat or comma-separate); omit for all of yours. One you are not a member of answers `404`.
- `status` (query, optional) — Filter by where the work is. Repeat or comma-separate.
- `kind` (query, optional) — Filter by what the node is; `kind=project` lists the goals. Repeat or comma-separate.
- `priority` (query, optional) — Only these levels; `none` is the tasks nobody prioritised.
- `state` (query, optional) — Only these computed readiness states.
- `tag` (query, optional) — Tasks carrying any of these tags.
- `ref_url` (query, optional) — Only tasks citing any of these URLs, compared normalised. Repeat it for several; never comma-separate. Each row's `matched_refs` names the URLs it cites as you sent them, so one read checks a batch for duplicates.
- `query` (query, optional) — A title containing it or two of its distinctive words (all, for a shorter query), or a body matching it in words or meaning. Titles first, the whole query before a few of its words.
- `assignee` (query, optional) — Whose: `me` (you and your teams), `none`, a `user_…` or `team_…`.
- `linked` (query, optional) — `false`: only tasks with no link of any kind, in either direction, to an open or a closed task. `true`: the rest.
- `limit` (query, optional) — Defaults to 50. For more, follow `next_cursor`.
- `cursor` (query, optional) — The `next_cursor` of the previous page, with the same filters.

## Responses

- `200` — The matching tasks, each with its computed readiness
- `400` — The request body or query string does not match the operation's schema, or a `calendar` task names no date (`calendar_requires_date`)
- `502` — Task bodies are stored in Naturali, and it did not answer this read (`naturali_unavailable`). Nothing was refused and no write is lost: retry the read later.
