Skip to content

Everything ​

One list of tasks across every project the caller can read, with filters, grouping, sorting and a cursor, and the caller's saved views of that list.

List tasks across projects ​

POST /api/v2/tasks/everything · beta

Lists tasks from every project the caller can read, filtered, grouped, sorted and paged.

It is a read sent as a POST, so a token needs the write scope. Every key of the body is optional, and an unknown key at any level is a 400.

Whatever the body says, the server reads only projects the caller can open and whose task list their role may read, leaves out closed, archived and restricted projects, other people's personal lists, private lists the caller is not on, and deleted or archived tasks.

AuthSession or API token with the write scope
Token limited to projectsAccepted, and held to its projects

Body

FieldTypeRequiredDescription
filter.statusarrayUp to 100 status names or whole-number keys. Names match exactly.
filter.statusTypestring[]Any of default_active, active, done, close, default_close.
filter.assigneearrayUp to 100 user ids, or unassigned.
filter.prioritystring[]Up to 100 priority names.
filter.dueDateobject{ from, to, none }. from and to are ISO dates or times in milliseconds. none: true means "no due date" and cannot be combined with a range.
filter.taskTypearrayUp to 100 task type names or keys.
filter.tagsstring[]Up to 100 tag ids.
filter.searchstringText of at most 200 characters.
filter.projectIdsid[]Up to 500 project ids. It can only narrow what the caller may read.
filter.sprintIdsid[]Up to 100 list ids: tasks that live in one of them or were added to one. A list the caller cannot open is ignored.
groupstringnone, status, assignee, project, priority or dueDate. none when left out.
sortobject{ by, dir }. by is updatedAt or DueDate; dir is asc or desc. Newest update first when left out; DueDate defaults to asc.
cursorstringThe nextCursor of the page before.
limitnumberA whole number from 1. 50 when left out, and never more than 100.
includeSubtasksbooleanfalse when left out: top-level tasks only.
includeClosedProjectsbooleanfalse when left out. true adds back closed projects only.
timezonestringAn IANA timezone name, used for due-date groups. UTC when left out.

Request

http
POST /api/v2/tasks/everything
Authorization: Bearer <token>
companyid: <company id>
Content-Type: application/json

{
  "filter": { "statusType": ["default_active", "active"], "assignee": ["<user id>"] },
  "sort": { "by": "DueDate", "dir": "asc" },
  "limit": 50
}

Response

json
{
  "status": true,
  "statusText": "Tasks fetched successfully.",
  "data": {
    "rows": [
      {
        "_id": "<task id>",
        "TaskName": "Write the release notes",
        "TaskKey": "WEB-12",
        "status": { "key": 2, "text": "Doing", "type": "active" },
        "statusKey": 2,
        "statusType": "active",
        "Task_Priority": "HIGH",
        "AssigneeUserId": ["<user id>"],
        "DueDate": "2026-10-03T00:00:00.000Z",
        "ProjectID": "<project id>",
        "sprintId": "<list id>",
        "TaskType": "task",
        "TaskTypeKey": 1,
        "tagsArray": [],
        "subTasks": 0,
        "ancestors": [],
        "ParentTaskId": "",
        "isParentTask": true,
        "createdAt": "2026-10-01T09:30:00.000Z",
        "updatedAt": "2026-10-01T09:30:00.000Z"
      }
    ],
    "groups": [{ "key": null, "count": 37 }],
    "nextCursor": "<cursor>",
    "projects": {
      "<project id>": {
        "_id": "<project id>",
        "ProjectName": "Website",
        "ProjectCode": "WEB",
        "taskStatusData": [],
        "taskTypeCounts": [],
        "apps": [],
        "isPersonal": false,
        "edit": { "status": true, "priority": true }
      }
    }
  }
}
FieldDescription
rowsUp to limit tasks. Each carries _id, TaskName, TaskKey, status, statusKey, statusType, Task_Priority, AssigneeUserId, DueDate, startDate, ProjectID, sprintId, folderObjId, TaskType, TaskTypeKey, tagsArray, subTasks, ancestors, ParentTaskId, isParentTask, createdAt, updatedAt and sprintArray (the list the task lives in, with its name). A task that was added to other lists also carries extraLists: each entry has projectId, sprintId, addedBy and addedAt, and name and projectName only for a list the caller can open. No custom field values.
groupsOn the first page, a list of { key, count } for the chosen group, counted over the same filter. key is null for "no value". With group: none it holds one entry with the total. On a later page it is null.
nextCursorA string when more rows exist, otherwise null.
projectsA map by project id, for the projects the rows name. Each carries _id, ProjectName, ProjectCode, projectIcon, taskStatusData, taskTypeCounts, apps, statusType, isPersonal and edit: { status, priority }, which says whether the caller may change those two fields on that project's tasks. With group: project it also names every project counted; one that has no row on the page carries only _id, ProjectName, ProjectCode, projectIcon, statusType and isPersonal.

Paging

Cursor. Send nextCursor back as cursor. A cursor is good only for the same workspace, person, filter, sort and the two include switches; with anything else it is a 400. The page size and the grouping may change between pages. Rows with no value for the sort key come last, in both directions.

Errors

StatusWhen
400An unknown key, a wrong type, a value out of range, or a cursor that does not fit the request. The body is { status: false, statusText: "Request refused", message, field }.
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the write scope, or its person is no longer a member of the workspace. The person holds no active seat in the workspace.
429Too many requests from this address. Wait retryAfter seconds and send it again.

List saved views ​

GET /api/v2/tasks/everything/views · beta

Lists the caller's own saved views of the Everything list, by name.

Any signed-in person with an active seat in the workspace may call it, and it lists only the views that person saved. Answers with data, sorted by name, each view with _id, name, settings, isDefault and updatedAt.

AuthSession or API token with the read scope
Token limited to projectsRefused

Request

http
GET /api/v2/tasks/everything/views
Authorization: Bearer <token>
companyid: <company id>

Response

json
{
  "status": true,
  "statusText": "Views fetched successfully.",
  "data": [
    {
      "_id": "<view id>",
      "name": "My open work",
      "settings": {
        "mode": "list",
        "hideDone": true,
        "group": "project",
        "sortBy": "DueDate",
        "sortDir": "asc"
      },
      "isDefault": false,
      "updatedAt": "2026-10-01T09:30:00.000Z"
    }
  ]
}

Errors

StatusWhen
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the read scope, or its person is no longer a member of the workspace. A token limited to projects is refused here. The person holds no active seat in the workspace.
429Too many requests from this address. Wait retryAfter seconds and send it again.

Save a view ​

POST /api/v2/tasks/everything/views · beta

Saves a view: a name and the settings of the Everything list.

A view belongs to the person who made it. A person can keep at most 50.

AuthSession or API token with the write scope
Token limited to projectsRefused

Body

FieldTypeRequiredDescription
namestringyes1 to 80 characters.
settingsobjectyesAn object with any of: mode (list, board, table), search (up to 200 characters), status, assignee, priority, taskType (lists of up to 100), projectIds (up to 500 ids), due (overdue, today, week, later, none or empty), group (none, status, assignee, project, priority, dueDate), sortBy (updatedAt, DueDate), sortDir (asc, desc), showSubtasks, hideDone, includeClosed (each true or false). An unknown key is refused.
isDefaultbooleanMakes this the view the page opens with. Only one view is the default.

Request

http
POST /api/v2/tasks/everything/views
Authorization: Bearer <token>
companyid: <company id>
Content-Type: application/json

{
  "name": "My open work",
  "settings": {
    "mode": "list",
    "hideDone": true,
    "group": "project",
    "sortBy": "DueDate",
    "sortDir": "asc"
  }
}

Response

json
{
  "status": true,
  "statusText": "View saved.",
  "data": {
    "_id": "<view id>",
    "name": "My open work",
    "settings": {
      "mode": "list",
      "hideDone": true,
      "group": "project",
      "sortBy": "DueDate",
      "sortDir": "asc"
    },
    "isDefault": false,
    "updatedAt": "2026-10-01T09:30:00.000Z"
  }
}

Errors

StatusWhen
400An unknown key, a missing or malformed field, or a value a setting does not take. The body names the field.
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the write scope, or its person is no longer a member of the workspace. A token limited to projects is refused here. The person holds no active seat in the workspace.
429Too many requests from this address. Wait retryAfter seconds and send it again.

Change a saved view ​

PATCH /api/v2/tasks/everything/views/:id · beta

Changes the name, the settings or the default mark of one of the caller's views.

Any signed-in person with an active seat in the workspace may call it, on a view that person saved; any other id answers 404. Reads name (string), settings (object) and isDefault (boolean) from the body, and changes the ones sent. Making a view the default clears the mark on the caller's other views. Answers with data: the view as it is now.

AuthSession or API token with the write scope
Token limited to projectsRefused

Path parameters

NameTypeDescription
ididThe view.

Body

FieldTypeRequiredDescription
namestring1 to 80 characters.
settingsobjectReplaces the stored settings. The same keys as when saving a view.
isDefaultbooleanMakes this the default view, or stops it being the default.

At least one of the three is required.

Request

http
PATCH /api/v2/tasks/everything/views/<id>
Authorization: Bearer <token>
companyid: <company id>
Content-Type: application/json

{ "name": "My open work, by due date" }

Response

json
{
  "status": true,
  "statusText": "View saved.",
  "data": {
    "_id": "<view id>",
    "name": "My open work, by due date",
    "settings": {
      "mode": "list",
      "hideDone": true,
      "group": "project",
      "sortBy": "DueDate",
      "sortDir": "asc"
    },
    "isDefault": false,
    "updatedAt": "2026-10-01T09:30:00.000Z"
  }
}

Errors

StatusWhen
400An unknown key, a missing or malformed field, or a value a setting does not take. The body names the field.
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the write scope, or its person is no longer a member of the workspace. A token limited to projects is refused here. The person holds no active seat in the workspace.
404The view does not exist, or is someone else's.
429Too many requests from this address. Wait retryAfter seconds and send it again.

Delete a saved view ​

DELETE /api/v2/tasks/everything/views/:id · beta

Deletes one of the caller's views.

Any signed-in person with an active seat in the workspace may call it, on a view that person saved; any other id answers 404. The view is marked deleted and leaves the list, and its default mark is cleared. Answers with statusText View deleted. and no data.

AuthSession or API token with the write scope
Token limited to projectsRefused

Path parameters

NameTypeDescription
ididThe view.

Request

http
DELETE /api/v2/tasks/everything/views/<id>
Authorization: Bearer <token>
companyid: <company id>

Response

json
{ "status": true, "statusText": "View deleted." }

Errors

StatusWhen
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the write scope, or its person is no longer a member of the workspace. A token limited to projects is refused here. The person holds no active seat in the workspace.
404The view does not exist, or is someone else's.
429Too many requests from this address. Wait retryAfter seconds and send it again.

Released under the AGPL-3.0 licence.