Skip to content

REST / OpenAPI reference

The canonical, machine-readable REST contract is the OpenAPI 3 document the api generates from the shared Zod DTOs. It is always available live at:

GET /openapi.json

A committed snapshot lives at docs/reference/openapi.json — load it into any OpenAPI viewer (Swagger UI, Redoc, Stoplight, Insomnia, Postman) or code generator. The snapshot is regenerated from the running api with pnpm docs:openapi:snapshot, and pnpm docs:openapi:check fails if it drifts, so this reference can't silently rot.

For the narrative conventions — authentication, idempotency (clientMutationId), ?since polling, moves, the error envelope, rate limits — see Agents → REST. For DTO shapes, packages/shared (Zod) is the single source of truth.

Endpoints

The complete operation list, grouped by resource, generated from the snapshot:

.well-known

MethodPathSummary
GET/.well-known/oauth-authorization-server

actors

MethodPathSummary
GET/api/actors/{actorId}/webhooksList an agent's actor-scoped webhook subscriptions
POST/api/actors/{actorId}/webhooksRegister an actor-scoped webhook for an agent (the agent's own token, or a human admin of a board it works on). Secret returned once.
DELETE/api/actors/{actorId}/webhooks/{webhookId}Delete an agent's actor-scoped webhook subscription

attachments

MethodPathSummary
PUT/api/attachments/{id}/content
POST/api/attachments/{id}/completeConfirm an attachment upload
GET/api/attachments/{id}
DELETE/api/attachments/{id}

auth

MethodPathSummary
POST/api/auth/register
POST/api/auth/login
POST/api/auth/logout
POST/api/auth/logout-all
GET/api/auth/me

automations

MethodPathSummary
PATCH/api/automations/{id}Update an automation rule (admin only)
DELETE/api/automations/{id}Delete an automation rule (admin only)
GET/api/automations/{id}/runsPer-rule run history (activity-backed, admin only). ?limit= (default 50, max 200).

boards

MethodPathSummary
GET/api/boards
POST/api/boardsCreate a board
GET/api/boards/{id}
PATCH/api/boards/{id}Update a board
PUT/api/boards/{id}/favoriteStar/unstar the board for the calling member
POST/api/boards/{id}/listsCreate a list
GET/api/boards/{id}/membersList a board's members
POST/api/boards/{id}/membersAdd a member by email or actorId (admin only)
PATCH/api/boards/{id}/members/{actorId}Change a member's role (admin only)
DELETE/api/boards/{id}/members/{actorId}Remove a member (admin only)
GET/api/boards/{id}/agentsAgent roster: agent members + credential metadata (admin only)
PATCH/api/boards/{id}/members/{actorId}/capabilitiesEdit an agent's capability flags (admin only; instance-global effect)
DELETE/api/boards/{id}/members/{actorId}/credentials/{credentialId}Revoke one of an agent member's API-token credentials (admin only)
GET/api/boards/{id}/labelsList a board's label palette
POST/api/boards/{id}/labelsCreate a board label
GET/api/boards/{id}/fieldsList a board's fields
POST/api/boards/{id}/fieldsCreate a custom field
PATCH/api/boards/{id}/fields/{fieldId}Update a field
DELETE/api/boards/{id}/fields/{fieldId}Archive a custom field
POST/api/boards/{id}/fields/{fieldId}/reorderReorder a field between neighbors
GET/api/boards/{id}/viewsList the saved views visible to the caller (board-shared + own personal)
POST/api/boards/{id}/viewsCreate a saved view (personal by default; shared:true is admin-gated)
GET/api/boards/{id}/activityBoard activity feed (?since= poll)
GET/api/boards/{id}/webhooksList a board's webhook subscriptions (admin only)
POST/api/boards/{id}/webhooksCreate a webhook subscription (admin only)
PATCH/api/boards/{id}/webhooks/{webhookId}Update a webhook subscription (admin only). Re-activating clears the auto-disable failure streak.
DELETE/api/boards/{id}/webhooks/{webhookId}Delete a webhook subscription (admin only)
GET/api/boards/{id}/integrationsList a board's integrations
POST/api/boards/{id}/integrationsInstall an integration (admin only) — returns token + secret once
GET/api/boards/{id}/integrations/{integrationId}Get one integration
PATCH/api/boards/{id}/integrations/{integrationId}Update / enable / disable an integration (admin only)
DELETE/api/boards/{id}/integrations/{integrationId}Remove an integration (admin only)
PUT/api/boards/{id}/integrations/{integrationId}/secretsSet an integration's secrets (admin only; write-only)
GET/api/boards/{id}/linksList a board's links, optionally filtered by external_id
GET/api/boards/{id}/sessionsA board's agent sessions, newest first (?state= filters, e.g. state=awaiting_input for everything blocked on a human)
GET/api/boards/{id}/automationsList a board's automation rules (admin only)
POST/api/boards/{id}/automationsCreate an automation rule (admin only)

cards

MethodPathSummary
GET/api/cards/{id}
PATCH/api/cards/{id}Edit a card, or move it with
GET/api/cards/by-key/{key}Fetch a card by its human-readable key (e.g. TRK-42)
POST/api/cards/{id}/archive
POST/api/cards/{id}/labelsApply a label to a card
DELETE/api/cards/{id}/labels/{labelId}Remove a label from a card
PUT/api/cards/{id}/fields/{fieldId}Set a custom field value on a card
DELETE/api/cards/{id}/fields/{fieldId}Clear a custom field value on a card
POST/api/cards/{id}/assigneesAssign a member (human or agent) to a card
DELETE/api/cards/{id}/assignees/{actorId}Unassign an actor from a card
POST/api/cards/{id}/delegationDelegate a card to an agent (replaces any existing delegation)
DELETE/api/cards/{id}/delegationRemove a card's delegation
GET/api/cards/{id}/commentsList a card's comments
POST/api/cards/{id}/commentsAdd a comment to a card
GET/api/cards/{id}/checklist-itemsList a card's checklist items in order
POST/api/cards/{id}/checklist-itemsAdd a checklist item to the end of a card's checklist
GET/api/cards/{id}/attachments
POST/api/cards/{id}/attachmentsDeclare an attachment upload on a card
GET/api/cards/{id}/activityCard activity feed (?since= poll)
GET/api/cards/{id}/linksList a card's external links
POST/api/cards/{id}/linksLink a card to an external object (integration only)
POST/api/cards/{id}/eventsEmit an integration vcs.* event for a card (integration only)
DELETE/api/cards/{id}/links/{linkId}Remove a card link (integration only)
PUT/api/cards/{id}/watchWatch a card (idempotent; viewer role suffices)
DELETE/api/cards/{id}/watchStop watching a card (idempotent)
POST/api/cards/{id}/sessionsOpen an agent session on a card (api-triggered)

checklist-items

MethodPathSummary
PATCH/api/checklist-items/{id}Update a checklist item (text / done / assignee). done:true stamps doneAt/doneBy
DELETE/api/checklist-items/{id}Delete a checklist item (hard delete; activity keeps history)
POST/api/checklist-items/{id}/reorderMove a checklist item between the named neighbor items (server derives the rank)

comments

MethodPathSummary
PATCH/api/comments/{id}Edit a comment (author only)
DELETE/api/comments/{id}Delete a comment (author only)

deliveries

MethodPathSummary
POST/api/deliveries/{id}/redeliverManually re-deliver a logged delivery (admin only). One attempt, same stable X-Kanban-Delivery-Id, fresh signature.

lists

MethodPathSummary
PATCH/api/lists/{id}Rename or reorder a list
POST/api/lists/{id}/archiveArchive (soft-delete) a list
POST/api/lists/{id}/cardsCreate a card

me

MethodPathSummary
GET/api/me/preferencesMy personal preferences (auto-watch)
PATCH/api/me/preferencesUpdate my personal preferences

notifications

MethodPathSummary
GET/api/notificationsList my notifications (newest first; ?unread filters, cursor pages)
POST/api/notifications/{id}/readMark one of my notifications read (idempotent)
POST/api/notifications/read-allMark ALL my unread notifications read (idempotent)

oauth

MethodPathSummary
POST/api/oauth/register
GET/api/oauth/authorize
POST/api/oauth/authorize
POST/api/oauth/token

openapi.json

MethodPathSummary
GET/openapi.json
MethodPathSummary
GET/api/search/cardsFull-text card search (title + description) with structured filters. Scoped to one board with ?boardId, else to every board the principal can read. Arrays are comma-separated; fieldValues is a JSON-encoded array; a q like TRK-42 resolves that card first.

sessions

MethodPathSummary
GET/api/sessions/mineThe caller's own agent sessions across every board (?state= filters). The polling fallback for an endpoint-less agent.
GET/api/sessions/{id}Fetch one agent session (state, statusText, trigger, stale)
GET/api/sessions/{id}/eventsA session's event trail. ?since=<event id
POST/api/sessions/{id}/eventsPost one protocol op (update

tokens

MethodPathSummary
GET/api/tokens
POST/api/tokens
DELETE/api/tokens/{id}

views

MethodPathSummary
PATCH/api/views/{id}Update a saved view (name / filters / shared toggle — sharing is admin-gated)
DELETE/api/views/{id}Delete a saved view (hard delete)
POST/api/views/{id}/reorderMove a saved view between the named neighbor views (server derives the rank)

webhooks

MethodPathSummary
GET/api/webhooks/{id}/deliveriesDelivery log for a subscription, newest attempt first (admin only). ?limit= caps the page (default 50, max 200).

ws

MethodPathSummary
GET/ws

ws-ticket

MethodPathSummary
POST/api/ws-ticketMint a single-use, short-TTL WebSocket handshake ticket for the caller

Released under the AGPL-3.0 license.