This page is the public browser-readable guide for the Kanbalone JSON API.

API Examples

All examples assume http://127.0.0.1:3000.

Health Check

curl -s http://127.0.0.1:3000/api/health

List Boards

curl -s http://127.0.0.1:3000/api/boards

Get Board Shell

curl -s http://127.0.0.1:3000/api/boards/3

Create Board

curl -s -X POST http://127.0.0.1:3000/api/boards \
  -H 'content-type: application/json' \
  --data '{
    "name": "Agent Tasks",
    "laneNames": ["todo", "doing", "review", "done"]
  }'

Create Tag

curl -s -X POST http://127.0.0.1:3000/api/boards/3/tags \
  -H 'content-type: application/json' \
  --data '{
    "name": "frontend",
    "color": "#2563eb"
  }'

Create Ticket

curl -s -X POST http://127.0.0.1:3000/api/boards/3/tickets \
  -H 'content-type: application/json' \
  --data '{
    "laneId": 9,
    "title": "Draft API usage guide",
    "bodyMarkdown": "Document the most common ticket operations.",
    "priority": 4,
    "tagIds": [3],
    "blockerIds": []
  }'

Move Ticket To Done And Mark Resolved

curl -s -X PATCH http://127.0.0.1:3000/api/tickets/6 \
  -H 'content-type: application/json' \
  --data '{
    "laneId": 11,
    "isResolved": true
  }'

Move Ticket Back To Todo And Reopen

curl -s -X PATCH http://127.0.0.1:3000/api/tickets/6 \
  -H 'content-type: application/json' \
  --data '{
    "laneId": 9,
    "isResolved": false
  }'

Bulk Mark Resolved

curl -s -X POST http://127.0.0.1:3000/api/boards/3/tickets/bulk-complete \
  -H 'content-type: application/json' \
  --data '{
    "ticketIds": [4, 5, 6],
    "isResolved": true
  }'

Bulk Transition By Lane Name

curl -s -X POST http://127.0.0.1:3000/api/boards/3/tickets/bulk-transition \
  -H 'content-type: application/json' \
  --data '{
    "ticketIds": [4, 5, 6],
    "laneName": "Done",
    "isResolved": true
  }'

Set Blocker

curl -s -X PATCH http://127.0.0.1:3000/api/tickets/7 \
  -H 'content-type: application/json' \
  --data '{
    "blockerIds": [6]
  }'

Set Parent

curl -s -X PATCH http://127.0.0.1:3000/api/tickets/5 \
  -H 'content-type: application/json' \
  --data '{
    "parentTicketId": 4
  }'

Add Comment

curl -s -X POST http://127.0.0.1:3000/api/tickets/6/comments \
  -H 'content-type: application/json' \
  --data '{
    "bodyMarkdown": "Confirmed on local UI and API."
  }'

Edit Comment

curl -s -X PATCH http://127.0.0.1:3000/api/comments/12 \
  -H 'content-type: application/json' \
  --data '{
    "bodyMarkdown": "Confirmed on local UI, API, and archive flow."
  }'

Delete Comment

curl -s -X DELETE http://127.0.0.1:3000/api/comments/12

Archive Ticket

curl -s -X PATCH http://127.0.0.1:3000/api/tickets/6 \
  -H 'content-type: application/json' \
  --data '{
    "isArchived": true
  }'

Filter Ticket Summaries

curl -s 'http://127.0.0.1:3000/api/boards/3/tickets?resolved=false'
curl -s 'http://127.0.0.1:3000/api/boards/3/tickets?lane_id=11'
curl -s 'http://127.0.0.1:3000/api/boards/3/tickets?tag=frontend'
curl -s 'http://127.0.0.1:3000/api/boards/3/tickets?archived=all'
curl -s 'http://127.0.0.1:3000/api/boards/3/tickets?q=sidebar'
curl -s 'http://127.0.0.1:3000/api/boards/3/tickets?q=%23123'

Reorder Tickets

curl -s -X POST http://127.0.0.1:3000/api/boards/3/tickets/reorder \
  -H 'content-type: application/json' \
  --data '{
    "items": [
      { "ticketId": 4, "laneId": 9, "position": 0 },
      { "ticketId": 5, "laneId": 9, "position": 1 },
      { "ticketId": 6, "laneId": 11, "position": 0 }
    ]
  }'

Export Board

curl -s http://127.0.0.1:3000/api/boards/3/export > board-3.json

Import Board

curl -s -X POST http://127.0.0.1:3000/api/boards/import \
  -H 'content-type: application/json' \
  --data @board-3.json

Import Large Local Seed Data

/api/boards/import can also handle larger local-only payloads.

curl -s -X POST http://127.0.0.1:3000/api/boards/import \
  -H 'content-type: application/json' \
  --data @perf-5000-board.json

After import, check the list through the lightweight summary route.

curl -s 'http://127.0.0.1:3000/api/boards/6/tickets?resolved=false'
curl -s 'http://127.0.0.1:3000/api/boards/6/tickets?lane_id=20'

Subscribe To Board Updates With SSE

curl -N http://127.0.0.1:3000/api/boards/3/events
data: {"boardId":3,"event":"board_updated","sentAt":"2026-04-10T00:00:00.000Z"}

List Comments

curl -s http://127.0.0.1:3000/api/tickets/6/comments

List Activity

curl -s http://127.0.0.1:3000/api/tickets/6/activity

Get Relations

curl -s http://127.0.0.1:3000/api/tickets/6/relations

Transition By Lane Name

curl -s -X PATCH http://127.0.0.1:3000/api/tickets/6/transition \
  -H 'content-type: application/json' \
  --data '{
    "laneName": "Done",
    "isResolved": true
  }'