---
title: "Get a public project board"
method: GET
path: "/public-project/{id}"
tags: ["Projects"]
---

# Get a public project board

`GET /public-project/{id}`

## Request

- Base URL: `https://cloud.kaneo.app/api`
- URL: `https://cloud.kaneo.app/api/public-project/{id}`
- Auth: none required

Read a public board in bounded task pages. Visibility is checked before loading tasks. Continue through pagination.totalPages for all tasks and through relatedPage/pagination.relatedTotalPages for their complete related records.

## Path parameters

- `id` string, required

## Query parameters

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

## Response `200`

A public board page

- PublicBoardPage
  - `id` string, required
  - `name` string, required
  - `slug` string, required
  - `icon` string, nullable, required
  - `description` string, nullable, required
  - `descriptionDeferred` boolean: True when a project description above 64 KiB is omitted; use project detail or public project description pages for full text.
  - `isPublic` boolean, nullable, required
  - `workspaceId` string, required
  - `backgroundVersion` string, nullable, 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
    - `position` number
    - `tasks` BoardTask[], required
      - `id` string, required
      - `title` string, required
      - `number` number, nullable, required
      - `description` string, nullable, required
      - `descriptionDeferred` boolean: True when the list omits a large description; load the task detail or description pages to read it. Do not replace stored text with this null summary.
      - `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
      - `recurrence` TaskRecurrence, required: When a task with this rule moves into a final column, the next task is created with its dates moved forward by one interval from the completed task's due date.
        - `frequency` 'daily' | 'weekly' | 'monthly' | 'yearly', required
        - `interval` integer, required: Repeat every this many days, weeks, months, or years.
        - `weekdays` integer[]: Weekly rules only: the days to repeat on, 0 for Sunday to 6 for Saturday. Without them, a weekly rule repeats on the due date's weekday.
        - `timeZone` string, required: IANA time zone used to keep the next due date on the same local day and time.
      - `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
      - `subtaskCounts` object, required: Direct subtasks in the workspace; completed means a final column in the child project. Public boards count only children in public projects.
        - `completed` integer, required
        - `total` integer, required
      - `labels` TaskLabel[], required
        - `id` string, required
        - `name` string, required
        - `color` string, required
      - `externalLinks` TaskExternalLink[], required
        - `id` string, required
        - `taskId` string, required
        - `integrationId` string, nullable, 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
    - `descriptionDeferred` boolean: True when the list omits a large description; load the task detail or description pages to read it. Do not replace stored text with this null summary.
    - `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
    - `recurrence` TaskRecurrence, required: When a task with this rule moves into a final column, the next task is created with its dates moved forward by one interval from the completed task's due date.
      - `frequency` 'daily' | 'weekly' | 'monthly' | 'yearly', required
      - `interval` integer, required: Repeat every this many days, weeks, months, or years.
      - `weekdays` integer[]: Weekly rules only: the days to repeat on, 0 for Sunday to 6 for Saturday. Without them, a weekly rule repeats on the due date's weekday.
      - `timeZone` string, required: IANA time zone used to keep the next due date on the same local day and time.
    - `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
    - `subtaskCounts` object, required: Direct subtasks in the workspace; completed means a final column in the child project. Public boards count only children in public projects.
      - `completed` integer, required
      - `total` integer, required
    - `labels` TaskLabel[], required
      - `id` string, required
      - `name` string, required
      - `color` string, required
    - `externalLinks` TaskExternalLink[], required
      - `id` string, required
      - `taskId` string, required
      - `integrationId` string, nullable, 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
    - `descriptionDeferred` boolean: True when the list omits a large description; load the task detail or description pages to read it. Do not replace stored text with this null summary.
    - `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
    - `recurrence` TaskRecurrence, required: When a task with this rule moves into a final column, the next task is created with its dates moved forward by one interval from the completed task's due date.
      - `frequency` 'daily' | 'weekly' | 'monthly' | 'yearly', required
      - `interval` integer, required: Repeat every this many days, weeks, months, or years.
      - `weekdays` integer[]: Weekly rules only: the days to repeat on, 0 for Sunday to 6 for Saturday. Without them, a weekly rule repeats on the due date's weekday.
      - `timeZone` string, required: IANA time zone used to keep the next due date on the same local day and time.
    - `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
    - `subtaskCounts` object, required: Direct subtasks in the workspace; completed means a final column in the child project. Public boards count only children in public projects.
      - `completed` integer, required
      - `total` integer, required
    - `labels` TaskLabel[], required
      - `id` string, required
      - `name` string, required
      - `color` string, required
    - `externalLinks` TaskExternalLink[], required
      - `id` string, required
      - `taskId` string, required
      - `integrationId` string, nullable, 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: Always paginated: 50 tasks by default, at most 100 per page. Continue through totalPages to retrieve all tasks. For each task page, follow relatedPage through relatedTotalPages to retrieve all labels, external links and columns (100 related rows per kind per request, plus up to 100 columns needed to represent the tasks).
    - `total` number, required
    - `page` number, required
    - `pageSize` number, required
    - `totalPages` number, required
    - `relatedPage` number, required
    - `relatedPageSize` number, required
    - `relatedTotalPages` number, required
    - `relatedRevision` string: Public board labels and external links revision for this task page. Restart pagination if it changes during related-page continuations.
    - `revision` string: Public board content, membership and ordering revision, including related records and visible subtask progress. Restart pagination if it changes between task or related pages.

## Other responses

- `400`: Invalid pagination or filters
- `403`: Project is not public
- `404`: Project not found
- `503`: Task list request timed out

## Changes

- **2026-10-26** `d5856f0c1849`: 12 breaking, 3 warning, 3 info
  - the `allOf[#/components/schemas/Board]/archivedTasks/items/recurrence` response's property type changed from `object, null` to no type for status `200`
  - the `allOf[#/components/schemas/Board]/columns/items/tasks/items/recurrence` response's property type changed from `object, null` to no type for status `200`
  - the `allOf[#/components/schemas/Board]/plannedTasks/items/recurrence` response's property type changed from `object, null` to no type for status `200`
  - removed the required property `allOf[#/components/schemas/Board]/archivedTasks/items/recurrence/frequency` from the response with the `200` status
  - …14 more
- **2026-10-26** `d1d37e98039b`: 3 info
  - added the required property `allOf[#/components/schemas/Board]/archivedTasks/items/recurrence` to the response with the `200` status
  - added the required property `allOf[#/components/schemas/Board]/columns/items/tasks/items/recurrence` to the response with the `200` status
  - added the required property `allOf[#/components/schemas/Board]/plannedTasks/items/recurrence` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/public-project/:id/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.dev/usekaneo/apis/kaneo-api/revisions/741a49dfb347?raw)
