> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corsair.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Kanbanize API reference

> API reference for the Kanbanize plugin in Corsair: every `kanbanize.api.*` operation with its input and output types, taken from the plugin's Zod schemas.

> [!NOTE]
>
> **New to Corsair?** See [API access](https://docs.corsair.dev/concepts/api.md), [authentication](https://docs.corsair.dev/concepts/auth.md), and [error handling](https://docs.corsair.dev/concepts/error-handling).

## Boards

### create

`boards.create`

Create a Kanban board or an AI Canvas in a workspace; it starts with a cards workflow and an initiatives workflow

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.boards.create({ workspace_id: 3, name: 'Product delivery', description: 'Everything the team ships', type: 1 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `workspace_id` | `number` | Yes | The workspace to create the board in. |
| `name` | `string` | Yes | — |
| `description` | `string` | No | — |
| `type` | `1 \| 2` | No | `1` for a Kanban board, `2` for an AI Canvas. Defaults to `1`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   board_id: number,
>   workspace_id?: number | null,
>   is_archived?: 0 | 1 | null,
>   name?: string | null,
>   description?: string | null,
>   type?: number | null,
>   revision?: number | null
> }
> ```

***

### delete

`boards.delete`

Delete a board with every card, workflow, column and lane on it; it cannot be restored

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.boards.delete({ board_id: 1075 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### get

`boards.get`

One board with its workspace, type and revision

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.boards.get({ board_id: 1075 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   board_id: number,
>   workspace_id?: number | null,
>   is_archived?: 0 | 1 | null,
>   name?: string | null,
>   description?: string | null,
>   type?: number | null,
>   revision?: number | null
> }
> ```

***

### list

`boards.list`

List boards, optionally limited to IDs, workspaces or the boards the key’s user is assigned to, with optional workflows and structure

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.boards.list({ workspace_ids: [3], is_archived: 0, fields: ['board_id', 'name'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_ids` | `number[]` | No | Only these boards. |
| `workspace_ids` | `number[]` | No | Only boards in these workspaces. |
| `is_archived` | `0 \| 1` | No | `0` for live boards, `1` for archived ones. |
| `if_assigned` | `0 \| 1` | No | `1` for only the boards the key’s user is assigned to. |
| `fields` | `(board_id \| workspace_id \| is_archived \| name \| description \| type \| revision)[]` | No | Return only these fields. The record’s ID is always included. |
| `expand` | `(workflows \| settings \| structure \| effective_cycle_time_column_ids \| data_fields)[]` | No | Include these nested objects. |

A list such as `board_ids` goes as one comma-separated value, which is how the API documents it.

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   board_id: number,
>   workspace_id?: number | null,
>   is_archived?: 0 | 1 | null,
>   name?: string | null,
>   description?: string | null,
>   type?: number | null,
>   revision?: number | null
> }[]
> ```

***

### update

`boards.update`

Rename a board, change its description, or archive and restore it

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.boards.update({ board_id: 1075, name: 'Delivery', is_archived: 0 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `name` | `string` | No | — |
| `description` | `string` | No | — |
| `is_archived` | `0 \| 1` | No | `1` for on, `0` for off. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   board_id: number,
>   workspace_id?: number | null,
>   is_archived?: 0 | 1 | null,
>   name?: string | null,
>   description?: string | null,
>   type?: number | null,
>   revision?: number | null
> }
> ```

***

## Cards

### create

`cards.create`

Create a card in a column and lane, with an owner, priority, deadline, tags, custom fields and subtasks, or from a template

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.cards.create({ title: 'Ship the pricing page', column_id: 15876, lane_id: 9838, owner_user_id: 12, priority: 2, tag_ids_to_add: [31] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `column_id` | `number` | Yes | The column the new card goes in, from `columns.list`. |
| `lane_id` | `number` | Yes | The lane the new card goes in, from `lanes.list`. |
| `position` | `number` | No | `0` is the top. |
| `title` | `string` | Yes | The card title. |
| `description` | `string` | No | — |
| `custom_id` | `string` | No | — |
| `owner_user_id` | `number` | No | — |
| `type_id` | `number` | No | — |
| `size` | `number` | No | — |
| `priority` | `1 \| 2 \| 3 \| 4` | No | `1` critical, `2` high, `3` average, `4` low. |
| `color` | `string` | No | Hexadecimal, such as `a1b2c3`. |
| `deadline` | `string` | No | ISO 8601 with a timezone offset. |
| `co_owner_ids_to_add` | `number[]` | No | — |
| `watcher_ids_to_add` | `number[]` | No | — |
| `tag_ids_to_add` | `number[]` | No | — |
| `milestone_ids_to_add` | `number[]` | No | — |
| `template_id` | `number` | No | Create the card from this template. |
| `custom_fields_to_add_or_update` | `object[]` | No | — |
| `subtasks_to_add` | `object[]` | No | — |
| `watch` | `0 \| 1` | No | `1` to have the key’s user watch the new card. |

`title`, `column_id` and `lane_id` are required: Businessmap places every new card in a column and a lane. Businessmap answers with a one-card array; the plugin returns that card as the `data` object, the same shape `cards.get` returns.

> [accordion] custom\_fields\_to\_add\_or\_update full type
>
> ```ts theme={null}
> {
>   field_id: number,
>   value?: string | number | string[] | null,
>   selected_values_to_add_or_update?: {
>     value_id: number,
>     position?: number
>   }[],
>   selected_value_ids_to_remove?: number[],
>   other_value?: string | null,
>   contributor_ids_to_add?: number[],
>   contributor_ids_to_remove?: number[],
>   vote?: 0 | 1,
>   comment?: string | null
> }[]
> ```

> [accordion] subtasks\_to\_add full type
>
> ```ts theme={null}
> {
>   description: string,
>   owner_user_id?: number,
>   deadline?: string
> }[]
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   card_id: number,
>   custom_id?: string | null,
>   board_id?: number | null,
>   workflow_id?: number | null,
>   title?: string | null,
>   owner_user_id?: number | null,
>   type_id?: number | null,
>   color?: string | null,
>   section?: number | null,
>   column_id?: number | null,
>   lane_id?: number | null,
>   last_column_id?: number | null,
>   last_lane_id?: number | null,
>   position?: number | null,
>   description?: string | null,
>   size?: number | null,
>   priority?: number | null,
>   deadline?: string | null,
>   reporter?: {
>     type?: string | null,
>     value?: number | string | null
>   } | null,
>   created_at?: string | null,
>   revision?: number | null,
>   last_modified?: string | null,
>   in_current_position_since?: string | null,
>   is_blocked?: 0 | 1 | null,
>   block_reason?: {
>     block_type?: number | null,
>     reason_id?: number | null,
>     comment?: string | null
>   } | null,
>   finished_subtask_count?: number | null,
>   unfinished_subtask_count?: number | null,
>   tag_ids?: number[] | null,
>   custom_fields?: Record<string, any>[] | null,
>   subtasks?: Record<string, any>[] | null,
>   linked_cards?: Record<string, any>[] | null
> }
> ```

***

### delete

`cards.delete`

Delete a card with its comments and subtasks; it cannot be restored

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.cards.delete({ card_id: 539522 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |
| `exceeding_reason` | `string` | No | Needed when deleting a card from a board that reaches a limit. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### get

`cards.get`

One card with its description, custom fields, subtasks and linked cards

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.cards.get({ card_id: 539522 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   card_id: number,
>   custom_id?: string | null,
>   board_id?: number | null,
>   workflow_id?: number | null,
>   title?: string | null,
>   owner_user_id?: number | null,
>   type_id?: number | null,
>   color?: string | null,
>   section?: number | null,
>   column_id?: number | null,
>   lane_id?: number | null,
>   last_column_id?: number | null,
>   last_lane_id?: number | null,
>   position?: number | null,
>   description?: string | null,
>   size?: number | null,
>   priority?: number | null,
>   deadline?: string | null,
>   reporter?: {
>     type?: string | null,
>     value?: number | string | null
>   } | null,
>   created_at?: string | null,
>   revision?: number | null,
>   last_modified?: string | null,
>   in_current_position_since?: string | null,
>   is_blocked?: 0 | 1 | null,
>   block_reason?: {
>     block_type?: number | null,
>     reason_id?: number | null,
>     comment?: string | null
>   } | null,
>   finished_subtask_count?: number | null,
>   unfinished_subtask_count?: number | null,
>   tag_ids?: number[] | null,
>   custom_fields?: Record<string, any>[] | null,
>   subtasks?: Record<string, any>[] | null,
>   linked_cards?: Record<string, any>[] | null
> }
> ```

***

### list

`cards.list`

Cards filtered by board, workflow, column, lane, owner, state or date, paged and with optional `expand` for custom fields, subtasks and links

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.cards.list({ board_ids: [1075], state: 'active', page: 1, per_page: 50, expand: ['custom_fields'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_ids` | `number[]` | No | — |
| `board_ids` | `number[]` | No | — |
| `workflow_ids` | `number[]` | No | — |
| `state` | `active \| archived \| discarded` | No | Defaults to `active`. |
| `column_ids` | `number[]` | No | — |
| `lane_ids` | `number[]` | No | — |
| `owner_user_ids` | `number[]` | No | — |
| `type_ids` | `number[]` | No | — |
| `custom_ids` | `string[]` | No | Only cards with these custom IDs. |
| `is_blocked` | `0 \| 1` | No | `1` for on, `0` for off. |
| `priorities` | `number[]` | No | — |
| `sizes` | `number[]` | No | — |
| `colors` | `string[]` | No | — |
| `last_column_ids` | `number[]` | No | — |
| `last_lane_ids` | `number[]` | No | — |
| `version_ids` | `number[]` | No | — |
| `archived_from_date` | `string` | No | Archived on or after this date, `YYYY-MM-DD`. |
| `archived_to_date` | `string` | No | — |
| `discarded_from_date` | `string` | No | — |
| `discarded_to_date` | `string` | No | — |
| `created_from_date` | `string` | No | — |
| `created_to_date` | `string` | No | — |
| `last_modified_from_date` | `string` | No | — |
| `last_modified_to_date` | `string` | No | — |
| `deadline_from_date` | `string` | No | — |
| `deadline_to_date` | `string` | No | — |
| `page` | `number` | No | 1-based page. |
| `per_page` | `number` | No | Cards per page. Defaults to 200. |
| `fields` | `string[]` | No | Return only these fields. The record’s ID is always included. |
| `expand` | `(custom_fields \| stickers \| tag_ids \| milestone_ids \| co_owner_ids \| watcher_ids \| attachments \| cover_image \| checked_column_checklist_items \| annotations \| subtasks \| linked_cards \| transitions \| block_times \| logged_times)[]` | No | Include these nested objects. |

The only paginated read. `next_page` is null on the last page; `per_page` defaults to 200 and tops out at 1000.

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |
| `next_page` | `number \| null` | Yes | The next page while more remain; null on the last page. |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   pagination?: {
>     all_pages?: number | null,
>     current_page?: number | null,
>     results_per_page?: number | null
>   } | null,
>   data: {
>     card_id: number,
>     custom_id?: string | null,
>     board_id?: number | null,
>     workflow_id?: number | null,
>     title?: string | null,
>     owner_user_id?: number | null,
>     type_id?: number | null,
>     color?: string | null,
>     section?: number | null,
>     column_id?: number | null,
>     lane_id?: number | null,
>     last_column_id?: number | null,
>     last_lane_id?: number | null,
>     position?: number | null,
>     description?: string | null,
>     size?: number | null,
>     priority?: number | null,
>     deadline?: string | null,
>     reporter?: {
>       type?: string | null,
>       value?: number | string | null
>     } | null,
>     created_at?: string | null,
>     revision?: number | null,
>     last_modified?: string | null,
>     in_current_position_since?: string | null,
>     is_blocked?: 0 | 1 | null,
>     block_reason?: {
>       block_type?: number | null,
>       reason_id?: number | null,
>       comment?: string | null
>     } | null,
>     finished_subtask_count?: number | null,
>     unfinished_subtask_count?: number | null,
>     tag_ids?: number[] | null,
>     custom_fields?: Record<string, any>[] | null,
>     subtasks?: Record<string, any>[] | null,
>     linked_cards?: Record<string, any>[] | null
>   }[]
> }
> ```

***

### update

`cards.update`

Change a card’s fields, move it to another column or lane, add or remove tags and custom fields, or archive and discard it

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.cards.update({ card_id: 539522, column_id: 15877, priority: 1, tag_ids_to_add: [33] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |
| `column_id` | `number` | No | The column the card sits in. On update, the card moves there. |
| `lane_id` | `number` | No | The lane the card sits in. On update, the card moves there. |
| `position` | `number` | No | `0` is the top. |
| `title` | `string` | No | — |
| `description` | `string` | No | — |
| `custom_id` | `string \| null` | No | — |
| `owner_user_id` | `number \| null` | No | null removes the owner. |
| `type_id` | `number \| null` | No | — |
| `size` | `number \| null` | No | null counts as a size of 1. |
| `priority` | `1 \| 2 \| 3 \| 4` | No | `1` critical, `2` high, `3` average, `4` low. |
| `color` | `string` | No | Hexadecimal, such as `a1b2c3`. |
| `deadline` | `string \| null` | No | ISO 8601 with a timezone offset. null removes the deadline. |
| `co_owner_ids_to_add` | `number[]` | No | — |
| `watcher_ids_to_add` | `number[]` | No | — |
| `tag_ids_to_add` | `number[]` | No | — |
| `milestone_ids_to_add` | `number[]` | No | — |
| `tag_ids_to_remove` | `number[]` | No | — |
| `milestone_ids_to_remove` | `number[]` | No | — |
| `co_owner_ids_to_remove` | `number[]` | No | — |
| `watcher_ids_to_remove` | `number[]` | No | — |
| `custom_fields_to_add_or_update` | `object[]` | No | — |
| `custom_field_ids_to_remove` | `number[]` | No | — |
| `subtasks_to_add` | `object[]` | No | — |
| `is_archived` | `0 \| 1` | No | `1` archives the card. |
| `is_discarded` | `0 \| 1` | No | `1` discards the card. |

Moving into a column whose WIP limit is reached answers 409 with code `L001`, which is not retried.

> [accordion] custom\_fields\_to\_add\_or\_update full type
>
> ```ts theme={null}
> {
>   field_id: number,
>   value?: string | number | string[] | null,
>   selected_values_to_add_or_update?: {
>     value_id: number,
>     position?: number
>   }[],
>   selected_value_ids_to_remove?: number[],
>   other_value?: string | null,
>   contributor_ids_to_add?: number[],
>   contributor_ids_to_remove?: number[],
>   vote?: 0 | 1,
>   comment?: string | null
> }[]
> ```

> [accordion] subtasks\_to\_add full type
>
> ```ts theme={null}
> {
>   description: string,
>   owner_user_id?: number,
>   deadline?: string
> }[]
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   card_id: number,
>   custom_id?: string | null,
>   board_id?: number | null,
>   workflow_id?: number | null,
>   title?: string | null,
>   owner_user_id?: number | null,
>   type_id?: number | null,
>   color?: string | null,
>   section?: number | null,
>   column_id?: number | null,
>   lane_id?: number | null,
>   last_column_id?: number | null,
>   last_lane_id?: number | null,
>   position?: number | null,
>   description?: string | null,
>   size?: number | null,
>   priority?: number | null,
>   deadline?: string | null,
>   reporter?: {
>     type?: string | null,
>     value?: number | string | null
>   } | null,
>   created_at?: string | null,
>   revision?: number | null,
>   last_modified?: string | null,
>   in_current_position_since?: string | null,
>   is_blocked?: 0 | 1 | null,
>   block_reason?: {
>     block_type?: number | null,
>     reason_id?: number | null,
>     comment?: string | null
>   } | null,
>   finished_subtask_count?: number | null,
>   unfinished_subtask_count?: number | null,
>   tag_ids?: number[] | null,
>   custom_fields?: Record<string, any>[] | null,
>   subtasks?: Record<string, any>[] | null,
>   linked_cards?: Record<string, any>[] | null
> }
> ```

***

## Columns

### create

`columns.create`

Create a main column in a workflow section, or a subcolumn under another column

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.columns.create({ board_id: 1075, name: 'In progress', position: 1, workflow_id: 1695, section: 3 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `name` | `string` | Yes | — |
| `position` | `number` | Yes | `0` is the leftmost. |
| `workflow_id` | `number` | No | A main column, in a workflow. Needs `section`. Cannot be used with `parent_column_id`. |
| `section` | `1 \| 2 \| 3 \| 4` | No | `1` backlog, `2` requested, `3` progress, `4` done. Required with `workflow_id`. |
| `parent_column_id` | `number` | No | A subcolumn, under this parent. Cannot be used with `workflow_id`. |
| `description` | `string` | No | — |
| `color` | `string` | No | Hexadecimal, such as `a1b2c3`. |

A main column takes `workflow_id` and `section`; a subcolumn takes `parent_column_id` and no section.

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   column_id: number,
>   workflow_id?: number | null,
>   section?: number | null,
>   parent_column_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null,
>   limit?: number | null
> }
> ```

***

### delete

`columns.delete`

Delete a column and its subcolumns; cards in it are lost, so they are moved first in practice

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.columns.delete({ board_id: 1075, column_id: 15876 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `column_id` | `number` | Yes | The column ID. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### get

`columns.get`

One column with its section, position and WIP limit

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.columns.get({ board_id: 1075, column_id: 15876 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `column_id` | `number` | Yes | The column ID. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   column_id: number,
>   workflow_id?: number | null,
>   section?: number | null,
>   parent_column_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null,
>   limit?: number | null
> }
> ```

***

### list

`columns.list`

The columns on a board, including subcolumns

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.columns.list({ board_id: 1075 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `fields` | `string[]` | No | Return only these fields. The record’s ID is always included. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   column_id: number,
>   workflow_id?: number | null,
>   section?: number | null,
>   parent_column_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null,
>   limit?: number | null
> }[]
> ```

***

### update

`columns.update`

Rename a column, set its WIP limit, move it between sections, or reparent a subcolumn

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.columns.update({ board_id: 1075, column_id: 15876, name: 'Doing', limit: 8 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `column_id` | `number` | Yes | The column ID. |
| `name` | `string` | No | — |
| `description` | `string` | No | — |
| `color` | `string` | No | — |
| `position` | `number` | No | — |
| `limit` | `number` | No | Work-in-progress limit. |
| `section` | `1 \| 2 \| 3 \| 4` | No | Move a main column to another section. |
| `parent_column_id` | `number` | No | Move a subcolumn under another parent. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   column_id: number,
>   workflow_id?: number | null,
>   section?: number | null,
>   parent_column_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null,
>   limit?: number | null
> }
> ```

***

## Comments

### create

`comments.create`

Add a comment to a card

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.comments.create({ card_id: 539522, text: 'Blocked on the plan table copy.' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |
| `text` | `string` | Yes | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   comment_id: number,
>   type?: string | null,
>   author?: Record<string, any> | null,
>   text?: string | null,
>   created_at?: string | null,
>   last_modified?: string | null
> }
> ```

***

### list

`comments.list`

The comments on a card, oldest first

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.comments.list({ card_id: 539522 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   comment_id: number,
>   type?: string | null,
>   author?: Record<string, any> | null,
>   text?: string | null,
>   created_at?: string | null,
>   last_modified?: string | null
> }[]
> ```

***

## Lanes

### create

`lanes.create`

Create a lane on a workflow, or a nested lane under another lane

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.lanes.create({ board_id: 1075, name: 'Expedite', position: 0, workflow_id: 1695 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `name` | `string` | Yes | — |
| `position` | `number` | Yes | — |
| `workflow_id` | `number` | No | A top-level lane on this workflow. Cannot be used with `parent_lane_id`. |
| `parent_lane_id` | `number` | No | A nested lane under this one. Cannot be used with `workflow_id`. |
| `description` | `string` | No | — |
| `color` | `string` | No | — |

A lane sits on a `workflow_id` or under a `parent_lane_id`, never both.

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   lane_id: number,
>   workflow_id?: number | null,
>   parent_lane_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null
> }
> ```

***

### delete

`lanes.delete`

Delete a lane with its nested lanes and any cards in them

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.lanes.delete({ board_id: 1075, lane_id: 9838 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `lane_id` | `number` | Yes | The lane ID. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### get

`lanes.get`

One lane on a board

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.lanes.get({ board_id: 1075, lane_id: 9838 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `lane_id` | `number` | Yes | The lane ID. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   lane_id: number,
>   workflow_id?: number | null,
>   parent_lane_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null
> }
> ```

***

### list

`lanes.list`

The lanes on a board, including nested ones

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.lanes.list({ board_id: 1075 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   lane_id: number,
>   workflow_id?: number | null,
>   parent_lane_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null
> }[]
> ```

***

### update

`lanes.update`

Rename a lane, move it, or reparent it

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.lanes.update({ board_id: 1075, lane_id: 9838, name: 'Urgent' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `lane_id` | `number` | Yes | The lane ID. |
| `name` | `string` | No | — |
| `description` | `string` | No | — |
| `color` | `string` | No | — |
| `position` | `number` | No | — |
| `parent_lane_id` | `number` | No | The lane ID. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   lane_id: number,
>   workflow_id?: number | null,
>   parent_lane_id?: number | null,
>   position?: number | null,
>   name?: string | null,
>   description?: string | null,
>   color?: string | null
> }
> ```

***

## Limits

### get

`limits.get`

The account’s hourly and minutely request ceilings, which is what a 429 is measured against

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.limits.get({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   type?: string | null,
>   limit?: number | null
> }[]
> ```

***

## Me

### get

`me.get`

The user the API key belongs to

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.me.get({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   user_id: number,
>   email?: string | null,
>   username?: string | null,
>   realname?: string | null,
>   avatar?: string | null
> }
> ```

***

## Subtasks

### create

`subtasks.create`

Add a subtask to a card, with an owner and a deadline

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.subtasks.create({ card_id: 539522, description: 'Get the plan table from finance', owner_user_id: 12 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |
| `description` | `string` | Yes | — |
| `owner_user_id` | `number` | No | — |
| `deadline` | `string` | No | ISO 8601 with a timezone offset. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   subtask_id: number,
>   description?: string | null,
>   owner_user_id?: number | null,
>   deadline?: string | null,
>   finished_at?: string | null,
>   position?: number | null
> }
> ```

***

### delete

`subtasks.delete`

Delete a subtask from a card; it cannot be restored

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.subtasks.delete({ card_id: 539522, subtask_id: 4401 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |
| `subtask_id` | `number` | Yes | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### list

`subtasks.list`

The subtasks of a card

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.subtasks.list({ card_id: 539522 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   subtask_id: number,
>   description?: string | null,
>   owner_user_id?: number | null,
>   deadline?: string | null,
>   finished_at?: string | null,
>   position?: number | null
> }[]
> ```

***

### update

`subtasks.update`

Change a subtask, or mark it finished or unfinished

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.subtasks.update({ card_id: 539522, subtask_id: 4401, is_finished: 1 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `card_id` | `number` | Yes | The card ID, as returned by `cards.list`. |
| `subtask_id` | `number` | Yes | — |
| `description` | `string` | No | — |
| `owner_user_id` | `number` | No | — |
| `deadline` | `string` | No | — |
| `is_finished` | `0 \| 1` | No | `1` marks the subtask done. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   subtask_id: number,
>   description?: string | null,
>   owner_user_id?: number | null,
>   deadline?: string | null,
>   finished_at?: string | null,
>   position?: number | null
> }
> ```

***

## Tags

### list

`tags.list`

Every tag on the account, with its availability and enabled state

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.tags.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   tag_id: number,
>   label?: string | null,
>   color?: string | null,
>   availability?: number | null,
>   is_enabled?: 0 | 1 | null
> }[]
> ```

***

## Users

### list

`users.list`

Every user on the account, for looking up owner and watcher IDs

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.users.list({ fields: ['user_id', 'email', 'realname'] });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `fields` | `string[]` | No | Return only these fields. The record’s ID is always included. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   user_id: number,
>   username?: string | null,
>   realname?: string | null,
>   email?: string | null,
>   avatar?: string | null,
>   is_enabled?: 0 | 1 | null
> }[]
> ```

***

## Webhooks

### create

`webhooks.create`

Register a URL to receive a board’s events. The plugin does not handle the deliveries itself

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.webhooks.create({ url: 'https://corsair.example/hooks/kanbanize', board_id: 1075 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `url` | `string` | Yes | The HTTP or HTTPS endpoint to notify. |
| `board_id` | `number` | Yes | The board whose events it receives. |
| `is_enabled` | `0 \| 1` | No | Defaults to `1`. |

Registers a URL with Businessmap. The plugin does not handle the deliveries itself.

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   webhook_id: number,
>   url?: string | null,
>   is_enabled?: 0 | 1 | null,
>   board_id?: number | null,
>   secret?: string | null
> }
> ```

***

### delete

`webhooks.delete`

Delete a webhook so its URL stops receiving events

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.webhooks.delete({ webhook_id: 77 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `webhook_id` | `number` | Yes | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### list

`webhooks.list`

Webhooks registered on the account, with their board and URL

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.webhooks.list({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   webhook_id: number,
>   url?: string | null,
>   is_enabled?: 0 | 1 | null,
>   board_id?: number | null,
>   secret?: string | null
> }[]
> ```

***

### update

`webhooks.update`

Point a webhook at another URL or board, or enable and disable it

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.webhooks.update({ webhook_id: 77, is_enabled: 0 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `webhook_id` | `number` | Yes | — |
| `url` | `string` | No | — |
| `board_id` | `number` | No | The board ID, as returned by `boards.list`. |
| `is_enabled` | `0 \| 1` | No | `1` for on, `0` for off. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   webhook_id: number,
>   url?: string | null,
>   is_enabled?: 0 | 1 | null,
>   board_id?: number | null,
>   secret?: string | null
> }
> ```

***

## Workflows

### create

`workflows.create`

Create a cards, initiative or timeline workflow on a board

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.workflows.create({ board_id: 1075, type: 0, name: 'Software development', position: 0 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `type` | `0 \| 1 \| 2` | Yes | `0` for a cards workflow, `1` for an initiative workflow, `2` for a timeline workflow. |
| `name` | `string` | No | — |
| `position` | `number` | No | `0` is the topmost. |
| `is_enabled` | `0 \| 1` | No | `1` for on, `0` for off. |
| `is_collapsible` | `0 \| 1` | No | `1` for on, `0` for off. |

Type `0` is cards, `1` is initiative, `2` is timeline.

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   workflow_id: number,
>   name?: string | null,
>   type?: number | null,
>   position?: number | null,
>   is_enabled?: 0 | 1 | null,
>   is_collapsible?: 0 | 1 | null
> }
> ```

***

### delete

`workflows.delete`

Delete a workflow with its columns, lanes and any cards in them; it cannot be restored

**Risk:** `destructive` · **Irreversible**

```ts theme={null}
await corsair.kanbanize.api.workflows.delete({ board_id: 1075, workflow_id: 1695 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `workflow_id` | `number` | Yes | The workflow ID, from `workflows.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `success` | `true` | Yes | The resource is gone. |

***

### get

`workflows.get`

One workflow on a board

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.workflows.get({ board_id: 1075, workflow_id: 1695 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `workflow_id` | `number` | Yes | The workflow ID, from `workflows.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   workflow_id: number,
>   name?: string | null,
>   type?: number | null,
>   position?: number | null,
>   is_enabled?: 0 | 1 | null,
>   is_collapsible?: 0 | 1 | null
> }
> ```

***

### list

`workflows.list`

The workflows on a board, in display order

**Risk:** `read`

```ts theme={null}
await corsair.kanbanize.api.workflows.list({ board_id: 1075 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object[]` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   workflow_id: number,
>   name?: string | null,
>   type?: number | null,
>   position?: number | null,
>   is_enabled?: 0 | 1 | null,
>   is_collapsible?: 0 | 1 | null
> }[]
> ```

***

### update

`workflows.update`

Rename a workflow, move it, or enable and disable it

**Risk:** `write`

```ts theme={null}
await corsair.kanbanize.api.workflows.update({ board_id: 1075, workflow_id: 1695, name: 'Delivery', is_enabled: 1 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `board_id` | `number` | Yes | The board ID, as returned by `boards.list`. |
| `workflow_id` | `number` | Yes | The workflow ID, from `workflows.list`. |
| `name` | `string` | No | — |
| `position` | `number` | No | — |
| `is_enabled` | `0 \| 1` | No | `1` for on, `0` for off. |
| `is_collapsible` | `0 \| 1` | No | `1` for on, `0` for off. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `data` | `object` | Yes | — |

> [accordion] data full type
>
> ```ts theme={null}
> {
>   workflow_id: number,
>   name?: string | null,
>   type?: number | null,
>   position?: number | null,
>   is_enabled?: 0 | 1 | null,
>   is_collapsible?: 0 | 1 | null
> }
> ```

***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.