---
title: "List everyone who can see the board"
method: GET
path: "/projects/{id}/members"
---

# List everyone who can see the board

`GET /projects/{id}/members`

## Request

- Base URL: `https://craaft.io/api/v1`
- URL: `https://craaft.io/api/v1/projects/{id}/members`
- Auth: HTTP bearer

Returns explicit `project_members` grants alongside implicit rows
for workspace owners/admins and (when the board is workspace-visible)
every workspace member. The `source` field discriminates the three
kinds. Any caller who can see the board may read this.

## Response `200`

OK

- BoardMember[]
  - `userId` string, uuid, required
  - `name` string, required
  - `email` string, email, required
  - `username` string, required
  - `avatarUrl` string, required: Empty when no upload; otherwise /api/v1/users/{id}/avatar
  - `role` 'admin' | 'contributor', required
  - `source` 'explicit' | 'workspace-admin' | 'workspace-visible', required: How this row gets access. `explicit` = stored `project_members` row. `workspace-admin` = implicit because they're a workspace owner/admin. `workspace-visible` = implicit because the project is `visibility=workspace`.
  - `createdAt` string, date-time, required

## Other responses

- `401`: Missing or invalid token
- `404`: Resource doesn't exist or caller isn't a member of its workspace

---

[API](https://skmtc.dev/craaft/apis/craaft-api.md) · [All operations](https://skmtc.dev/craaft/apis/craaft-api/llms.txt) · [OpenAPI document](https://skmtc.dev/craaft/apis/craaft-api/revisions/3a1e9d30d7dc?raw)
