0.x — pre-release, no compatibility promise yet.What this means
List / search tasks (the filter grammar; filter[search] is search)
List the tasks you can see, one page at a time.
Pagination
- The response is
{"data": [TaskCardView…], "next_cursor": "<opaque>" | null}; passnext_cursorback ascursorfor the next page.nullmeans the end. - A page can be
data: []with a non-nullnext_cursor(every task on it was restricted) — keep following the cursor until it is null. - A cursor is bound to the filters, sort and scope it was issued for; reusing it with a different query is a 400.
Scope and visibility
project_id: you must be able to read the project (it is public, you are a member, or you are an org admin).org_id: you must be a member of the organization; tasks come from the projects you can read, plus tasks filed in no project.- Private projects you are not a member of never appear.
- Restricted tasks you may not open are left out — or returned with
has_access: falsewheninclude_inaccessible=true.
Filters
- Repeat
filter[...]as needed: comma-separated values are OR-ed within a key; different keys are AND-ed. - An unknown key, a malformed date, a non-boolean
filter[overdue], or an unknown status, priority or type is a 400 naming the value. filter[task_type]takestask,bug,agent. A type is a label, not a permission: it only narrows what you can already see.filter[search]matches title, description, task id and tags; addfilter[search_fields]=titlefor the title only.
Sort
sort_by:task_id,title,status,priority,due_date,start_date,created_at,assignee,project_id,priority_rank,status_rank,task_type;sort_order:ascordesc.- Ties break on
task_id; empty values sort last. prioritysorts by rank: critical > high > medium > low > none.statustoo: backlog > in_progress > not_started > blocked > completed.task_type: task, bug, agent.
Sections
section_scope=user:me,project:<id>orteam:<id>addssection_idandsection_positionfor that scope (nullwhen the task is in no section there).section_scope=ownuses each task’s own home: its project, or its team when it has no project; a task with neither is unsectioned.ownworks on this operation only.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters”Page size, default 100; silently clamped to 1000.
Page size, default 100; silently clamped to 1000.
One of: task_id, title, status, priority, due_date, start_date, created_at, assignee, project_id, priority_rank, status_rank, task_type (400 otherwise).
One of: task_id, title, status, priority, due_date, start_date, created_at, assignee, project_id, priority_rank, status_rank, task_type (400 otherwise).
Asc or desc (400 otherwise).
Asc or desc (400 otherwise).
If true, include tasks the current user cannot access due to restricted_to, marked with has_access=False. If false (default), those tasks are not returned. Membership is always required: rows only come from the project / org the caller belongs to.
If true, include tasks the current user cannot access due to restricted_to, marked with has_access=False. If false (default), those tasks are not returned. Membership is always required: rows only come from the project / org the caller belongs to.
Project ids, or __unfiled__ for tasks without a project (mixable).
Team ids, or __none__ for tasks without a team (the two can be mixed).
One or more of task, bug, agent, comma-separated or repeated; any other value (including goal) is a 400.
Deprecated; use cursor. Ignored when a cursor is given.
Deprecated; use cursor. Ignored when a cursor is given.
Header Parameters
Section titled “Header Parameters”An ETag you hold; unchanged → 304 with no body.
Responses
Section titled “ Responses ”Successful Response
A page of GET /v1/tasks. next_cursor is opaque: send it back as cursor; null means the last page. data may be empty while next_cursor is set (every task on that page was restricted) — keep following the cursor.
object
Part of TaskListPage.
object
Task title
A task’s status. backlog comes first wherever statuses are ordered (filters, grouping and the status sort); otherwise it is an ordinary status, accepted everywhere.
Priority enum for projects and tasks
The kind of task: task, bug or agent, in sort order (sort_by=task_type).
- A label, never a permission.
- A goal is not a task type but a container of a project’s tasks (
goal_id):task_type=goalis refused on write (422) and infilter[task_type](400).
object
Example
{ "data": [ { "project_id": "project-1234", "org_id": "org-1234", "sub_tasks": [ "task-5678" ], "dependencies": [ "task-4321" ], "title": "Implement Login", "description": "Implement OAuth2 login flow.", "status": "not_started", "assignee": "", "start_date": "2024-07-31", "due_date": "2024-08-01", "priority": "high", "task_type": "task", "tags": [ "backend", "auth" ], "type_data": {}, "metadata": [ { "field": "status", "new": "in_progress", "old": "not_started" } ], "created_by": "string", "updated_by": "string", "is_subtask": false, "bug_id": "B1234", "tracker_id": "TR1234", "restricted_to": [], "team_id": "string", "sprint_id": "SP12345", "milestone_id": "MS12345", "goal_id": "G12345", "task_id": "string", "created_at": "2026-09-25T12:00:00Z", "updated_at": "2026-09-25T12:00:00Z", "restricted_to_user_ids": [ "string" ], "comments": 0, "has_access": true, "has_edit_access": false, "section_id": "string", "section_position": 0 } ], "next_cursor": "string"}Not Modified — If-None-Match matched the current ETag (no body)
Bad request — a query parameter outside what the operation accepts (invalid-parameter)
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "Bad request", "status": 400, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}Missing or invalid bearer token
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "Missing or invalid bearer token", "status": 401, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}Authenticated, but not allowed
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "Authenticated, but not allowed", "status": 403, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}Not found
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "Not found", "status": 404, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}Conflict (a duplicate, or an Idempotency-Key still in flight)
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)", "status": 409, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}If-Match does not match the current ETag
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "`If-Match` does not match the current `ETag`", "status": 412, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}The body or query did not validate (validation), or an Idempotency-Key was reused
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused", "status": 422, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}An access token over its per-minute limit (rate-limit; see Retry-After)
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)", "status": 429, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}Unexpected server error — quote request_id
An RFC 9457 problem details object — the body of every error response. detail is the human-readable explanation; request_id identifies the request for support.
object
about:blank or a urn:tasksmate:problem:* identifier
Human-readable explanation (a string; for a 422, the list of validation errors)
Structured failures: validation errors, or {loc, msg, allowed} for a bad parameter
object
Example
{ "type": "about:blank", "title": "Unexpected server error", "status": 500, "detail": "…", "instance": "/v1/…", "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"}