Skip to content

Read-only token API ​

Three reads under /api/public-v1 that accept an API token and nothing else. They are the simplest way to list projects and tasks. Every read is narrowed to what the token's person can open in the web app, and a token limited to projects reads only those.

List projects ​

GET /api/public-v1/projects · stable

Lists the projects the token's person can open.

Called with an API token that holds the read scope, for a person who is still a member of the workspace. Answers with data: up to 200 projects that are not deleted and that the token's person can open, each with ProjectName, ProjectCode and createdAt.

AuthAPI token with the read scope
Token limited to projectsAccepted, and held to its projects

Request

http
GET /api/public-v1/projects
Authorization: Bearer <token>
companyid: <company id>

Response

json
{
  "status": true,
  "data": [
    {
      "_id": "<project id>",
      "ProjectName": "Website",
      "ProjectCode": "WEB",
      "createdAt": "2026-10-01T09:30:00.000Z"
    }
  ]
}

There is no statusText on a success here. Projects in the trash are left out.

Paging

None. At most 200 projects are returned.

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.
429Too many requests from this address. Wait retryAfter seconds and send it again.

List a project's tasks ​

GET /api/public-v1/tasks · stable

Lists the tasks of one project, most recently updated first.

Called with an API token that holds the read scope. It reads the query field projectId (a 24-character id, required) and limit (a number, clamped to 1 to 500, 100 when left out); a missing or malformed projectId answers 400, and a project the token's person cannot open answers 404. Answers with data: the project's tasks that are not deleted, most recently updated first, each with TaskKey, TaskName, status, statusType, Task_Priority, AssigneeUserId, DueDate, sprintId, epicId, createdAt and updatedAt.

AuthAPI token with the read scope
Token limited to projectsAccepted, and held to its projects

Query parameters

NameTypeRequiredDescription
projectIdidyesThe project.
limitnumberHow many tasks to return, from 1 to 500. 100 when left out.

Request

http
GET /api/public-v1/tasks?projectId=<project id>&limit=50
Authorization: Bearer <token>
companyid: <company id>

Response

json
{
  "status": true,
  "data": [
    {
      "_id": "<task id>",
      "TaskKey": "WEB-12",
      "TaskName": "Write the release notes",
      "status": { "key": 2, "text": "Doing", "type": "active" },
      "statusType": "active",
      "Task_Priority": "HIGH",
      "AssigneeUserId": ["<user id>"],
      "DueDate": "2026-10-03T00:00:00.000Z",
      "sprintId": "<list id>",
      "createdAt": "2026-10-01T09:30:00.000Z",
      "updatedAt": "2026-10-01T09:30:00.000Z"
    }
  ]
}

Each task carries these fields and epicId when it has one, and no others. Deleted tasks are left out, and so are tasks in lists the person cannot see.

Paging

Limit only. There is no next page: narrow by project and raise limit, or use POST /api/v2/tasks/everything to page.

Errors

StatusWhen
400projectId is missing or is not an id.
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.
404The project does not exist, or the person cannot see it.
429Too many requests from this address. Wait retryAfter seconds and send it again.

Read a task by its key ​

GET /api/public-v1/tasks/:key · stable

Returns one task, looked up by its key.

Called with an API token that holds the read scope. The path value is the task key as a string of at most 40 characters; an empty or longer one answers 400, and a task the token's person cannot open or that does not exist answers 404. Answers with data: the stored task.

AuthAPI token with the read scope
Token limited to projectsAccepted, and held to its projects

Path parameters

NameTypeDescription
keystringThe task's key, for example WEB-12. At most 40 characters.

Request

http
GET /api/public-v1/tasks/WEB-12
Authorization: Bearer <token>
companyid: <company id>

Response

json
{
  "status": true,
  "data": {
    "_id": "<task id>",
    "TaskKey": "WEB-12",
    "TaskName": "Write the release notes",
    "ProjectID": "<project id>",
    "sprintId": "<list id>",
    "status": { "key": 2, "text": "Doing", "type": "active" },
    "statusKey": 2,
    "statusType": "active",
    "Task_Priority": "HIGH",
    "AssigneeUserId": ["<user id>"],
    "DueDate": "2026-10-03T00:00:00.000Z",
    "createdAt": "2026-10-01T09:30:00.000Z",
    "updatedAt": "2026-10-01T09:30:00.000Z"
  }
}

data is the whole stored task; the example shows some of its fields.

Errors

StatusWhen
400The key is longer than 40 characters.
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.
404No task has that key, or the person cannot see it.
429Too many requests from this address. Wait retryAfter seconds and send it again.

Released under the AGPL-3.0 licence.