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.
| Auth | API token with the read scope |
| Token limited to projects | Accepted, and held to its projects |
Request
GET /api/public-v1/projects
Authorization: Bearer <token>
companyid: <company id>Response
{
"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
| Status | When |
|---|---|
| 401 | No token, a token that is invalid, expired or revoked, or no valid companyid header. |
| 403 | The token lacks the read scope, or its person is no longer a member of the workspace. |
| 429 | Too 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.
| Auth | API token with the read scope |
| Token limited to projects | Accepted, and held to its projects |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | id | yes | The project. |
limit | number | How many tasks to return, from 1 to 500. 100 when left out. |
Request
GET /api/public-v1/tasks?projectId=<project id>&limit=50
Authorization: Bearer <token>
companyid: <company id>Response
{
"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
| Status | When |
|---|---|
| 400 | projectId is missing or is not an id. |
| 401 | No token, a token that is invalid, expired or revoked, or no valid companyid header. |
| 403 | The token lacks the read scope, or its person is no longer a member of the workspace. |
| 404 | The project does not exist, or the person cannot see it. |
| 429 | Too 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.
| Auth | API token with the read scope |
| Token limited to projects | Accepted, and held to its projects |
Path parameters
| Name | Type | Description |
|---|---|---|
key | string | The task's key, for example WEB-12. At most 40 characters. |
Request
GET /api/public-v1/tasks/WEB-12
Authorization: Bearer <token>
companyid: <company id>Response
{
"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
| Status | When |
|---|---|
| 400 | The key is longer than 40 characters. |
| 401 | No token, a token that is invalid, expired or revoked, or no valid companyid header. |
| 403 | The token lacks the read scope, or its person is no longer a member of the workspace. |
| 404 | No task has that key, or the person cannot see it. |
| 429 | Too many requests from this address. Wait retryAfter seconds and send it again. |
