---
title: "List boards"
method: GET
path: "/open/v1/boards"
tags: ["Boards"]
---

# List boards

`GET /open/v1/boards`

List all boards belonging to the calling workspace as a flat array, depth-first ordered (parent then its descendants then the next sibling). Reconstruct the tree on the client by following `parent_id` links — `children` is always empty on this surface to avoid duplicating the same nodes across the response.

Top-level boards carry `parent_id == workspace_id` as a sentinel.

Page-based pagination — pass `page=2`, `page=3`, ... to walk the list. Each board is returned exactly once across all pages.

Returns: `code=0` success; `code=40001` workspace context missing.

## Query parameters

- `page` integer — 1-based page number (default 1).
- `page_size` integer — Items per page (1-100, default 20).

## Response `200`

Successful Response

- OpenBoardListResponse — Envelope for all open API responses. code=0 means success.
  - `code` integer
  - `message` string
  - `data` OpenBoardListData — Page-based pagination wrapper (boards, brands).
    - `items` OpenBoard[]
      - `board_id` string, required — Board identifier (UUID, dashed).
      - `name` string, required — Board display name set by the workspace user.
      - `parent_id` string — Parent board id. For a top-level board this carries the workspace id (not another board) as a sentinel — treat any value that isn't a member of the result set as 'root'.
      - `ad_num` integer — Number of ads currently pinned under this board (workspace-scoped count).
      - `children` OpenBoard[] — Direct child boards (one level). Populated by `GET /open/v1/boards/{board_id}` only. On `GET /open/v1/boards` this list is always empty — that endpoint returns a flat, depth-first array; rebuild the tree client-side via `parent_id` links.
    - `total` integer
    - `page` integer
    - `page_size` integer — Number of items actually returned on this page (== len(items)). On the last page or when the matching set is smaller than the requested page size, this is less than what the caller asked for.

## Other responses

- `400` — Invalid request — a query parameter, path parameter, or body field failed validation.

---

[API](https://skmtc.net/tryatria/apis/atria-open-api.md) · [All operations](https://skmtc.net/tryatria/apis/atria-open-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tryatria/atria-open-api/revisions/548d57b611ea/schema)
