---
title: "List tasks"
method: GET
path: "/task/tasks/{projectId}"
tags: ["Tasks"]
---

# List tasks

`GET /task/tasks/{projectId}`

Get a project's board: its columns, each with the tasks in it, plus the archived and planned buckets. Filter and paginate with the query parameters.

## Path parameters

- `projectId` string, required

## Query parameters

- `status` string
- `priority` string
- `assigneeId` string
- `page` string
- `limit` string
- `sortBy` 'createdAt' | 'priority' | 'dueDate' | 'position' | 'title' | 'number'
- `sortOrder` 'asc' | 'desc'
- `dueBefore` string
- `dueAfter` string

## Response `200`

The project board

- BoardResponse
  - `data` Board, required
    - `id` string, required
    - `name` string, required
    - `slug` string, required
    - `icon` string, nullable, required
    - `description` string, nullable, required
    - `isPublic` boolean, nullable, required
    - `workspaceId` string, required
    - `columns` BoardColumn[], required
      - `id` string, required — The column slug, same as `slug`.
      - `slug` string, required
      - `name` string, required
      - `icon` string, nullable, required
      - `isFinal` boolean, required
      - `tasks` BoardTask[], required
        - `id` string, required
        - `title` string, required
        - `number` number, nullable, required
        - `description` string, nullable, required
        - `status` string, required
        - `priority` string, required — One of: no-priority, low, medium, high, urgent.
        - `startDate` string, date-time, nullable, required
        - `dueDate` string, date-time, nullable, required
        - `position` number, nullable, required
        - `createdAt` string, date-time, required
        - `userId` string, nullable, required
        - `assigneeName` string, nullable, required
        - `assigneeId` string, nullable, required
        - `assigneeImage` string, nullable, required
        - `projectId` string, required
        - `labels` TaskLabel[], required
          - `id` string, required
          - `name` string, required
          - `color` string, required
        - `externalLinks` TaskExternalLink[], required
          - `id` string, required
          - `taskId` string, required
          - `integrationId` string, required
          - `resourceType` string, required
          - `externalId` string, required
          - `url` string, required
          - `title` string, nullable, required
          - `metadata` object, nullable, required — Provider-specific payload, already parsed from the stored JSON string.
          - `createdAt` string, date-time, required
          - `updatedAt` string, date-time, required
    - `archivedTasks` BoardTask[], required
      - `id` string, required
      - `title` string, required
      - `number` number, nullable, required
      - `description` string, nullable, required
      - `status` string, required
      - `priority` string, required — One of: no-priority, low, medium, high, urgent.
      - `startDate` string, date-time, nullable, required
      - `dueDate` string, date-time, nullable, required
      - `position` number, nullable, required
      - `createdAt` string, date-time, required
      - `userId` string, nullable, required
      - `assigneeName` string, nullable, required
      - `assigneeId` string, nullable, required
      - `assigneeImage` string, nullable, required
      - `projectId` string, required
      - `labels` TaskLabel[], required
        - `id` string, required
        - `name` string, required
        - `color` string, required
      - `externalLinks` TaskExternalLink[], required
        - `id` string, required
        - `taskId` string, required
        - `integrationId` string, required
        - `resourceType` string, required
        - `externalId` string, required
        - `url` string, required
        - `title` string, nullable, required
        - `metadata` object, nullable, required — Provider-specific payload, already parsed from the stored JSON string.
        - `createdAt` string, date-time, required
        - `updatedAt` string, date-time, required
    - `plannedTasks` BoardTask[], required
      - `id` string, required
      - `title` string, required
      - `number` number, nullable, required
      - `description` string, nullable, required
      - `status` string, required
      - `priority` string, required — One of: no-priority, low, medium, high, urgent.
      - `startDate` string, date-time, nullable, required
      - `dueDate` string, date-time, nullable, required
      - `position` number, nullable, required
      - `createdAt` string, date-time, required
      - `userId` string, nullable, required
      - `assigneeName` string, nullable, required
      - `assigneeId` string, nullable, required
      - `assigneeImage` string, nullable, required
      - `projectId` string, required
      - `labels` TaskLabel[], required
        - `id` string, required
        - `name` string, required
        - `color` string, required
      - `externalLinks` TaskExternalLink[], required
        - `id` string, required
        - `taskId` string, required
        - `integrationId` string, required
        - `resourceType` string, required
        - `externalId` string, required
        - `url` string, required
        - `title` string, nullable, required
        - `metadata` object, nullable, required — Provider-specific payload, already parsed from the stored JSON string.
        - `createdAt` string, date-time, required
        - `updatedAt` string, date-time, required
  - `pagination` BoardPagination, required — When no page/limit is given, everything is returned on a single page.
    - `total` number, required
    - `page` number, required
    - `pageSize` number, required
    - `totalPages` number, required

## Other responses

- `400` — Unknown project, or its workspace could not be determined
- `401` — Missing or invalid credentials
- `403` — No access to the project's workspace

## Changes

- **2026-08-24** `200744ae0bef` — 2 breaking
  - added the pattern `^\d+$` to the `query` request parameter `limit`
  - added the pattern `^\d+$` to the `query` request parameter `page`
- **2026-08-24** `08bbb5bedb5d` — 5 info
  - added the non-success response with the status `400`
  - added the non-success response with the status `401`
  - added the non-success response with the status `403`
  - added the required property `data` to the response with the `200` status
  - …1 more
- **2026-07-11** `32cece1ebe43` — 1 breaking, 9 info
  - the response's body type/format changed from ``/`` to `object`/`` for status `200`
  - added the new optional `query` request parameter `assigneeId`
  - added the new optional `query` request parameter `dueAfter`
  - added the new optional `query` request parameter `dueBefore`
  - …6 more

[Change history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/task/tasks/:projectId/get.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) · [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/usekaneo/kaneo-api/revisions/9d1da42c10ce/schema)
