Connect external tools and custom integrations. See also integrations and webhooks or set up an AI assistant (MCP).
ck_...) — you'll only see it once.Authorization: Bearer header on any request below.Test it:
curl -H "Authorization: Bearer ck_your_key_here" \ /api/v1/boards
All requests require a Bearer token in the Authorization header. Keys are scoped to your organization and respect your permissions.
Base URL
/api/v1Rate limit
60 requests / minute / keySuccess
{
"data": { ... },
"meta": {
"total": 42,
"page": 1,
"limit": 25
}
}Error
{
"error": {
"code": "unauthorized",
"message": "Invalid API key"
}
}Rate-limit headers on every response: X-RateLimit-Remaining, X-RateLimit-Reset.
/api/v1/boardsboards:readList the boards you're a member of (admins see all boards in the organization). Supports pagination with ?page and ?limit.
curl -H "Authorization: Bearer YOUR_KEY" \ /api/v1/boards?page=1&limit=25
Response:
{
"data": [
{ "id": "abc123", "name": "Sales Pipeline", "color": "#6366f1", "createdAt": "..." }
],
"meta": { "total": 5, "page": 1, "limit": 25 }
}/api/v1/boardsboards:writeCreate a new board.
curl -X POST \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"New Board","description":"From API"}' \
/api/v1/boards/api/v1/boards/:idboards:readGet a board's full details including groups, columns, and members.
/api/v1/boards/:idboards:writeUpdate a board's name, description, or color.
/api/v1/boards/:idboards:writePermanently delete a board.
/api/v1/boards/:boardId/groupsboards:readList all groups in a board.
/api/v1/boards/:boardId/groupsboards:writeCreate a new group in a board.
curl -X POST \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Q1 Leads","color":"#00c875"}' \
/api/v1/boards/BOARD_ID/groups/api/v1/boards/:boardId/itemsitems:readList items in a board. Filter by group with ?group_id=...
/api/v1/boards/:boardId/itemsitems:writeCreate a new item in a group. Pass column values keyed by column ID.
curl -X POST \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp — Lead from LinkedIn",
"group_id": "GROUP_ID",
"values": {
"COLUMN_ID_1": "john@acme.com",
"COLUMN_ID_2": "https://linkedin.com/in/example"
}
}' \
/api/v1/boards/BOARD_ID/items/api/v1/boards/:boardId/items/upsertitems:writeBatch upsert items (create or update). Perfect for syncs like LinkedIn — pass a match_column_id (e.g. your email column) and we'll auto-detect duplicates to update instead of creating new items. Max 500 items per request.
curl -X POST \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"group_id": "GROUP_ID",
"match_column_id": "EMAIL_COL_ID",
"items": [
{
"name": "Acme Corp",
"match_value": "john@acme.com",
"values": {
"LINKEDIN_COL_ID": "https://linkedin.com/in/john",
"STATUS_COL_ID": "New lead"
}
},
{ "name": "Beta Inc", "match_value": "jane@beta.com", "values": {} }
]
}' \
/api/v1/boards/BOARD_ID/items/upsertResponse:
{
"data": {
"created": 1,
"updated": 1,
"total": 2,
"items": [
{ "id": "...", "name": "Acme Corp", "action": "updated" },
{ "id": "...", "name": "Beta Inc", "action": "created" }
]
}
}/api/v1/items/:iditems:readGet a single item with all its values.
/api/v1/items/:iditems:writeUpdate an item's name.
/api/v1/items/:id/valuesitems:writeSet a column value on an item. Pass { columnId, value, assignedUserId? }.
curl -X PATCH \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"columnId":"COL_ID","value":"Working on it"}' \
/api/v1/items/ITEM_ID/values/api/v1/items/:iditems:writeDelete an item permanently.
/api/v1/items/:id/updatesupdates:readList all updates (comments) on an item.
/api/v1/items/:id/updatesupdates:writePost a new update on an item.
curl -X POST \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"Lead replied — schedule follow-up"}' \
/api/v1/items/ITEM_ID/updatesNeed something more? Manage your API keys