---
title: "List projects"
method: GET
path: "/project"
tags: ["Projects"]
---

# List projects

`GET /project`

List a workspace's projects in sidebar order, each with rollup task statistics. Archived projects are excluded unless includeArchived is set.

## Query parameters

- `workspaceId` string, required
- `includeArchived` string — Pass "true" to include archived projects in the list.

## Response `200`

List of projects

- ProjectListItem[]
  - `id` string, required
  - `workspaceId` string, required
  - `slug` string, required — Short prefix used in task identifiers, e.g. KAN-12.
  - `icon` string, nullable, required
  - `name` string, required
  - `description` string, nullable, required
  - `createdAt` string, date-time, required
  - `isPublic` boolean, nullable, required — When true the project's board is readable without signing in, via /api/public-project/{id}.
  - `archivedAt` string, date-time, nullable, required — Non-null once archived; archived projects are hidden by default.
  - `position` number, required — Sidebar order, ascending.
  - `lastTaskNumber` number, required — Highest task number issued in this project; the next task gets this plus one.
  - `statistics` ProjectStatistics, required
    - `completionPercentage` number, required
    - `totalTasks` number, required
    - `dueDate` string, date-time, nullable, required — The soonest due date among the project's open tasks.
  - `archivedTasks` BoardTask[], required — Always empty.
    - `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 — Always empty.
    - `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
  - `columns` BoardColumn[], required — Always empty.
    - `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

## Other responses

- `400` — Workspace ID could not be determined
- `401` — Missing or invalid credentials
- `403` — No access to the workspace

## Changes

- **2026-08-24** `08bbb5bedb5d` — 10 breaking, 4 info
  - the `items/` response's property type/format changed from `object`/`` to ``/`` for status `200`
  - removed the required property `items/archivedAt` from the response with the `200` status
  - removed the required property `items/createdAt` from the response with the `200` status
  - removed the required property `items/description` from the response with the `200` status
  - …10 more
- **2026-07-11** `32cece1ebe43` — 1 breaking, 2 info
  - the `items/createdAt` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - added the new optional `query` request parameter `includeArchived`
  - added the required property `items/archivedAt` to the response with the `200` status
- **2026-03-05** `c45ef22a736c` — 3 breaking, 3 info
  - the response property `items/description` became nullable for the status `200`
  - the response property `items/icon` became nullable for the status `200`
  - the response property `items/isPublic` became nullable for the status `200`
  - response property `items/description` list-of-types was narrowed by removing types `null` from media type `application/json` of response `200`
  - …2 more
- …earlier changes not shown

[Full history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/project/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/7ccee4eec682/schema)
