Documentation
Public API
Boards API

Boards API

REST API reference for boards, lists, labels, and the activity log. For the product overview and UI walkthrough, see Boards.

Boards, lists, labels, and the activity log are all available via the Flokan public API, so you can manage your kanban from your own scripts, n8n flows, or any HTTP client.

Authentication

All requests require a workspace API key minted in Workspace Settings → API Keys. Pass the key in the Authorization header:

Authorization: Bearer flk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

The key must include the boards scope, and the workspace's plan must include the Boards & Sheets feature.

Base URL

https://app.flokan.com/api/v1

Resolving boards by short ID

Every endpoint that accepts a :boardId in the path also accepts the board's short ID (e.g. MKT-7) in place of the UUID. The API resolves both, so the same URL works for human-readable links and machine-generated UUIDs.

Boards

GET /boards — List boards

Query params

ParamTypeNotes
pageintegerDefault 1
per_pageintegerDefault 50, max 100
typestringkanban or spreadsheet
searchstringCase-insensitive name match

Response 200

{
  "success": true,
  "data": [
    {
      "id": "f24a8c52-...",
      "short_id": "MKT-1",
      "name": "Marketing Pipeline",
      "type": "kanban",
      "workspace_id": "...",
      "background_image": null,
      "background_color": "#0F172A",
      "profile_image": null,
      "activity_enabled": true,
      "linked_files_enabled": true,
      "description": "Q2 launch board",
      "position": 0,
      "created_by": "...",
      "created_at": "2026-04-12T09:00:00.000Z",
      "updated_at": "2026-04-12T09:00:00.000Z"
    }
  ],
  "meta": { "page": 1, "per_page": 50, "total": 1, "total_pages": 1 }
}

POST /boards — Create a board

Request body

FieldTypeRequiredNotes
namestringyes1–200 characters
typestringnokanban (default) or spreadsheet
descriptionstringnoUp to 5000 characters
background_imagestringnoURL up to 2000 characters
background_colorstringnoUp to 50 characters
profile_imagestringnoURL up to 2000 characters
activity_enabledbooleannoDefault true
linked_files_enabledbooleannoDefault true

The user who created the API key is automatically added as a board member.

Response 201 — same shape as the list item above.

GET /boards/:boardId — Get a board

Returns the board record plus aggregate counts:

{
  "success": true,
  "data": {
    "id": "f24a8c52-...",
    "short_id": "MKT-1",
    "name": "Marketing Pipeline",
    "list_count": 5,
    "member_count": 4,
    "card_count": 23
  }
}

PUT /boards/:boardId — Update a board

Request body — all fields optional. Allowed: name, description, background_image, background_color, profile_image, activity_enabled, linked_files_enabled, position.

DELETE /boards/:boardId — Delete a board

Soft-deletes the board (and cascades archives its lists/cards) via a safe RPC.

{ "success": true, "data": { "id": "...", "deleted": true } }

Lists

GET /boards/:boardId/lists — List the columns of a board

Each list includes a card_count (non-archived cards). Sorted by column_index then position.

POST /boards/:boardId/lists — Create a list

Request body

FieldTypeRequiredNotes
titlestringyes1–500 characters
column_indexintegerno0–999999. Omit to let the server pick the next column.
background_colorstringnoUp to 50 characters

GET /boards/:boardId/lists/:listId — Get one list

Returns the list with card_count.

PUT /boards/:boardId/lists/:listId — Update a list

Allowed fields: title, position, column_index, background_color.

DELETE /boards/:boardId/lists/:listId — Delete a list

Cascades to all cards in the list.

PUT /boards/:boardId/lists/reorder — Bulk reorder lists in a column

Request body

{ "list_ids": ["uuid1", "uuid2", "uuid3"] }

All list_ids must share the same column_index. To move a list between columns, use PUT /lists/:listId first. Returns all lists on the board after the reorder.

Labels

GET /boards/:boardId/labels — List labels

POST /boards/:boardId/labels — Create a label

Request body

FieldTypeRequiredNotes
namestringyes1–100 characters, unique per board
colorstringyes1–50 characters (hex or named)

Returns 409 if a label with the same name already exists on the board.

PUT /boards/:boardId/labels/:labelId — Rename or recolor a label

DELETE /boards/:boardId/labels/:labelId — Delete a label

Also unassigns the label from every card it was attached to.

Activity

GET /boards/:boardId/activity — Read the activity log

Query params

ParamTypeNotes
limitintegerDefault 50, max 100
offsetintegerDefault 0
card_iduuidFilter to one card

Each entry contains action_type, details, user_id, and created_at.

Errors

All error responses use the envelope { "success": false, "error": "..." }. Common status codes:

CodeMeaning
400Validation error (bad UUID, missing required field, list spans multiple columns on reorder, …)
401Missing or invalid API key
403Missing boards scope or feature not enabled on the workspace plan
404Board, list, or label not found in this workspace
409Duplicate label name on the same board
429Rate limit exceeded — see Retry-After header and X-RateLimit-* headers
500Unexpected server error

Rate limits

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. The per-minute limit is determined by the workspace's billing plan.