GET/api/v1/board-groups
GET /api/board-groups — the org's groups in nav order (any member may
read; rendering input for the tree).
Responses
Security: bearer
POST/api/v1/board-groups
POST /api/board-groups — creates a nav group (ManageBoards gated);
emits `board.group_created`.
Request body
CreateGroupRequest
Responses
Security: bearer
PATCH/api/v1/board-groups/{id}
PATCH /api/board-groups/{id} — renames/reorders a group. ManageBoards
OR the group's owner may do this; emits `board.group_updated`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Request body
UpdateGroupRequest
Responses
Security: bearer
DELETE/api/v1/board-groups/{id}
DELETE /api/board-groups/{id} — removes a group; member boards become
ungrouped, never deleted. ManageBoards OR the group's owner; emits
`board.group_removed`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
GET/api/v1/boards
GET /api/boards
Responses
Security: bearer
POST/api/v1/boards
POST /api/boards — creates a board seeded with the four default statuses.
Request body
CreateBoardRequest
Responses
Security: bearer
POST/api/v1/boards/favorite
POST /api/boards/favorite — toggles a board favorite for the current
user (user-scoped; any authenticated member may star boards they can
see). Emits `board.favorite_toggled` in-tx.
Request body
FavoriteRequest
Responses
Security: bearer
GET/api/v1/boards/nav
GET /api/boards/nav — every org board annotated with the current
user's favorite mark, board role, and group assignment.
Responses
Security: bearer
GET/api/v1/boards/{id}/checklist-template
GET /api/boards/{id}/checklist-template
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
PUT/api/v1/boards/{id}/checklist-template
PUT /api/boards/{id}/checklist-template — creates or replaces the
board's template wholesale and sets the enforcement toggle; emits
`board.checklist_template_updated` and audits the change.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Request body
PutChecklistTemplateRequest
Responses
Security: bearer
DELETE/api/v1/boards/{id}/checklist-template
DELETE /api/boards/{id}/checklist-template — removes the template.
Ticket instances demote to ad-hoc items; with no template left,
close-time enforcement is off by construction regardless of the toggle.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
PUT/api/v1/boards/{id}/group
PUT /api/boards/{id}/group — assigns/unassigns the board's nav group.
Board-admin gated (ConfigureBoard); emits `board.group_updated`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Request body
AssignGroupRequest
Responses
Security: bearer
GET/api/v1/boards/{id}/members
GET /api/boards/{id}/members — the roster (ConfigureBoard gated).
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
PUT/api/v1/boards/{id}/members
PUT /api/boards/{id}/members — adds or re-roles one membership.
ManageMembers gated (board admin); emits `board.membership_updated`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Request body
UpsertMemberRequest
Responses
Security: bearer
DELETE/api/v1/boards/{id}/members/{user_id}
DELETE /api/boards/{id}/members/{user_id} — removes one membership;
the user falls back to org-governed access. Emits
`board.membership_removed`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
user_id | path | string | Yes | |
Responses
Security: bearer
GET/api/v1/boards/{id}/statuses
GET /api/boards/{id}/statuses
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
POST/api/v1/boards/{id}/statuses
POST /api/boards/{id}/statuses — adds a custom status bound to a
semantic category; emits `board.status_added`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Request body
CreateStatusRequest
Responses
Security: bearer
GET/api/v1/boards/{id}/statuses/usage
boards_status_usage
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
PATCH/api/v1/boards/{id}/statuses/{status_id}
PATCH /api/boards/{id}/statuses/{status_id} — rebinds/reorders/renames a
status; emits `board.status_updated`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
status_id | path | string | Yes | |
Request body
UpdateStatusRequest
Responses
Security: bearer
DELETE/api/v1/boards/{id}/statuses/{status_id}
DELETE /api/boards/{id}/statuses/{status_id} — removes a custom status.
Without `reassign_to` a status holding tickets is refused (409), as before.
With it, every ticket moves first — set-based, mirroring the per-ticket
status-change invariants exactly (denormalised category, one-shot
`resolved_at`, SLA pause bookkeeping) — and each moved ticket gets its own
`ticket.status_changed` outbox row, so a bulk move is as auditable as a
single one. Automations naming the status are paused, never repointed.
Emits `board.status_removed`.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
status_id | path | string | Yes | |
reassign_to | query | — | No | Move every ticket in this status to `reassign_to` and then delete it.
Must be another status on the same board. Absent, a status holding
tickets is refused with 409 and nothing changes. |
Responses
Security: bearer
GET/api/v1/boards/{id}/transitions
GET /api/boards/{id}/transitions — the board's effective workflow.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Responses
Security: bearer
PUT/api/v1/boards/{id}/transitions
PUT /api/boards/{id}/transitions — atomically replaces the explicit
transition matrix; emits `board.transitions_updated`. Endpoints must be
statuses of THIS board and self-transitions are rejected.
Parameters
| Name | In | Type | Required | Description |
|---|
id | path | string | Yes | |
Request body
SetTransitionsRequest
Responses
Security: bearer