Referenca

Projects & Kanban

Core project and board endpoints.

ClaudeChatGPTCursor

List projects

GET /v1/projects

curl "$API/v1/projects" \
-H "Authorization: Bearer fel_..."
const { data } = await fetch(`${API}/v1/projects`, {
headers: { Authorization: `Bearer ${apiKey}` },
}).then((r) => r.json())
console.log(data.projects)
import requests
print(requests.get(f"{API}/v1/projects", headers=headers).json())

Response 200

{
"ok": true,
"data": {
  "projects": [
    {
      "id": "prj_01HXYZ",
      "name": "Website redesign",
      "description": "Q3 launch",
      "status": "active",
      "companyId": "co_01ABC",
      "company": { "id": "co_01ABC", "name": "Acme Co" },
      "createdAt": "2026-08-01T10:00:00.000Z"
    }
  ]
}
}

Create project

POST /v1/projects

curl -X POST "$API/v1/projects" \
-H "Authorization: Bearer fel_..." \
-H "Content-Type: application/json" \
-d '{"name":"Website redesign","description":"Q3 launch"}'
const { data } = await fetch(`${API}/v1/projects`, {
method: 'POST',
headers: {
  Authorization: `Bearer ${apiKey}`,
  'Content-Type': 'application/json',
},
body: JSON.stringify({
  name: 'Website redesign',
  description: 'Q3 launch',
}),
}).then((r) => r.json())
console.log(data.project)
import requests
r = requests.post(
f"{API}/v1/projects",
headers=headers,
json={"name": "Website redesign", "description": "Q3 launch"},
)
print(r.json())
{
"name": "Website redesign",
"description": "Q3 launch"
}

Response 201

{
"ok": true,
"data": {
  "project": {
    "id": "prj_01HXYZ",
    "name": "Website redesign",
    "description": "Q3 launch",
    "status": "active",
    "companyId": null,
    "createdAt": "2026-08-08T09:15:00.000Z"
  }
}
}

List columns

GET /v1/projects/:id/kanban/columns

curl "$API/v1/projects/$PROJECT_ID/kanban/columns" \
-H "Authorization: Bearer fel_..."
const { data } = await fetch(
`${API}/v1/projects/${projectId}/kanban/columns`,
{ headers: { Authorization: `Bearer ${apiKey}` } },
).then((r) => r.json())
console.log(data.columns)
import requests
print(requests.get(
f"{API}/v1/projects/{project_id}/kanban/columns",
headers=headers,
).json())

Response 200

{
"ok": true,
"data": {
  "columns": [
    { "id": "col_backlog", "name": "Backlog", "position": 0, "projectId": "prj_01HXYZ" },
    { "id": "col_progress", "name": "In progress", "position": 1, "projectId": "prj_01HXYZ" },
    { "id": "col_review", "name": "Review", "position": 2, "projectId": "prj_01HXYZ" }
  ]
}
}

Create card

POST /v1/projects/:id/kanban/cards

curl -X POST "$API/v1/projects/$PROJECT_ID/kanban/cards" \
-H "Authorization: Bearer fel_..." \
-H "Content-Type: application/json" \
-d '{"columnId":"col_123","title":"Homepage hero","estimateHours":4}'
const { data } = await fetch(
`${API}/v1/projects/${projectId}/kanban/cards`,
{
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    columnId: 'col_123',
    title: 'Homepage hero',
    estimateHours: 4,
  }),
},
).then((r) => r.json())
console.log(data.card)
import requests
r = requests.post(
f"{API}/v1/projects/{project_id}/kanban/cards",
headers=headers,
json={
  "columnId": "col_123",
  "title": "Homepage hero",
  "estimateHours": 4,
},
)
print(r.json())
{
"columnId": "col_123",
"title": "Homepage hero",
"estimateHours": 4
}

Response 201

{
"ok": true,
"data": {
  "card": {
    "id": "card_01HERO",
    "projectId": "prj_01HXYZ",
    "columnId": "col_123",
    "title": "Homepage hero",
    "estimateHours": 4,
    "position": 0,
    "createdAt": "2026-08-08T09:20:00.000Z"
  }
}
}

Get card

GET /v1/kanban/cards/:cardId

curl "$API/v1/kanban/cards/$CARD_ID" \
-H "Authorization: Bearer fel_..."
const { data } = await fetch(
`${API}/v1/kanban/cards/${cardId}`,
{ headers: { Authorization: `Bearer ${apiKey}` } },
).then((r) => r.json())
console.log(data.card)
import requests
print(requests.get(
f"{API}/v1/kanban/cards/{card_id}",
headers=headers,
).json())

Response 200

{
"ok": true,
"data": {
  "card": {
    "id": "card_01HERO",
    "projectId": "prj_01HXYZ",
    "columnId": "col_123",
    "title": "Homepage hero",
    "description": null,
    "estimateHours": 4,
    "comments": [],
    "attachments": [],
    "createdAt": "2026-08-08T09:20:00.000Z",
    "updatedAt": "2026-08-08T09:20:00.000Z"
  }
}
}

Update card

PUT /v1/kanban/cards/:cardId

curl -X PUT "$API/v1/kanban/cards/$CARD_ID" \
-H "Authorization: Bearer fel_..." \
-H "Content-Type: application/json" \
-d '{"title":"Homepage hero v2","columnId":"col_review"}'
const { data } = await fetch(
`${API}/v1/kanban/cards/${cardId}`,
{
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: 'Homepage hero v2',
    columnId: 'col_review',
  }),
},
).then((r) => r.json())
console.log(data.card)
import requests
r = requests.put(
f"{API}/v1/kanban/cards/{card_id}",
headers=headers,
json={
  "title": "Homepage hero v2",
  "columnId": "col_review",
},
)
print(r.json())
{
"title": "Homepage hero v2",
"columnId": "col_review"
}

Response 200

{
"ok": true,
"data": {
  "card": {
    "id": "card_01HERO",
    "projectId": "prj_01HXYZ",
    "columnId": "col_review",
    "title": "Homepage hero v2",
    "estimateHours": 4,
    "updatedAt": "2026-08-08T11:02:00.000Z"
  }
}
}

Add card comment

POST /v1/kanban/cards/:cardId/comments

curl -X POST "$API/v1/kanban/cards/$CARD_ID/comments" \
-H "Authorization: Bearer fel_..." \
-H "Content-Type: application/json" \
-d '{"body":"Client prefers the wider crop."}'
const { data } = await fetch(
`${API}/v1/kanban/cards/${cardId}/comments`,
{
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ body: 'Client prefers the wider crop.' }),
},
).then((r) => r.json())
console.log(data.comment)
import requests
r = requests.post(
f"{API}/v1/kanban/cards/{card_id}/comments",
headers=headers,
json={"body": "Client prefers the wider crop."},
)
print(r.json())
{
"body": "Client prefers the wider crop."
}

Response 201

{
"ok": true,
"data": {
  "comment": {
    "id": "cmt_01NOTE",
    "cardId": "card_01HERO",
    "body": "Client prefers the wider crop.",
    "authorId": "acc_01STAFF",
    "createdAt": "2026-08-08T11:05:00.000Z"
  }
}
}