Docs menu
DocsAPI reference

Kanban boards

Read and write the user's real boards — full parity with the built-in Kanban.

Read and write the user's real Kanban boards — the SAME store the built-in Kanban section uses, so your changes show up live there and its changes show up in your app. Capability: boards (declared, never prompts; works headless). You have full parity with the built-in, including creating and deleting boards — an app never needs to send the user off to the built-in Kanban to do something.

// app.json: "capabilities": ["boards"]
const boards = await window.chatoss.boards.list();            // → [{ id, name }]
const board  = await window.chatoss.boards.get(boards[0].id);
// → { id, name, columns: [{ id, name }], cards: [{ id, title, description?, columnId, done?,
//      subtasks?, labels?, comments?, attachments? }], labels? }

const boardId = await window.chatoss.boards.createBoard('Launch plan');  // → new board id
await window.chatoss.boards.deleteBoard(boardId);                        // board + everything in it

The full method list

  • Boards: list()[{ id, name }] · get(boardId) → the whole board · createBoard(name?, folderId?) → id · deleteBoard(boardId).
  • Cards: createCard(boardId, { title, description?, columnId }) → id · updateCard(boardId, cardId, { title?, description?, done? }) (done also moves it to the board's Done column) · moveCard(boardId, cardId, toColumnId, toIndex?) (appends unless toIndex is given) · deleteCard(boardId, cardId).
  • Columns: createColumn(boardId, { name }) → id · renameColumn(boardId, columnId, name) · deleteColumn(boardId, columnId) (and every card in it) · reorderColumns(boardId, orderedColumnIds) (must list EVERY column id).
  • Subtasks: addSubtask(boardId, cardId, title) → id · updateSubtask(boardId, cardId, subtaskId, { title?, completed? }) · deleteSubtask(boardId, cardId, subtaskId).
  • Labels: createLabel(boardId, name) → id · renameLabel(boardId, labelId, name) · deleteLabel(boardId, labelId) · addLabelOption(boardId, labelId, name, color?) → id · updateLabelOption(boardId, labelId, optionId, { name?, color? }) · deleteLabelOption(boardId, labelId, optionId) · setCardLabel(boardId, cardId, labelId, optionId) · clearCardLabel(boardId, cardId, labelId).
  • Comments: addComment(boardId, cardId, text, author?) → id (author defaults to 'agent') · updateComment(boardId, cardId, commentId, text) · deleteComment(boardId, cardId, commentId).
  • Attachments: addAttachment(boardId, cardId, { name, dataUrl }) → id · removeAttachment(boardId, cardId, attachmentId).

🔴 If your app has an AI agent, give it a tool for every one of these that its UI exposes — including createBoard/deleteBoard. A board app whose agent can move cards but not create a board is the exact defect this list exists to prevent.