API Reference
KnotDo REST API
The KnotDo API lets you programmatically read and write tasks, lists, and webhooks. Available on Braid and Rope plans at general release.
Base URL
https://api.knotdo.app/v1Authentication
Authorization: Bearer YOUR_API_KEYGenerate keys in Workspace Settings → API Keys.
Webhook Events
task.createdtask.updatedtask.completedtask.deletedlist.createdlist.updatedEach webhook payload includes a X-KnotDo-Signature header. Verify it using your webhook secret to confirm authenticity.
Authentication
/users/meReturns the authenticated user's profile.
Example Response
{ "id": "usr_...", "email": "[email protected]", "name": "Your Name", "plan": "strand", "createdAt": "2026-01-01T00:00:00Z" }Task Lists
/listsReturns all task lists in the authenticated workspace.
Query Parameters
workspace_idstringFilter by workspace ID. Defaults to primary workspace.Example Response
{ "data": [{ "id": "lst_...", "name": "Work", "color": "blue", "taskCount": 12, "createdAt": "..." }] }/listsCreates a new task list.
Request Body (JSON)
namestring *List name (max 100 chars)colorstringColor: slate, blue, green, red, amber, violet, rose, etc.defaultViewstringlist | kanban | gantt | calendarExample Response
{ "id": "lst_...", "name": "New List", "color": "blue", "createdAt": "..." }/lists/:idUpdates a task list.
Request Body (JSON)
namestringNew list namecolorstringNew colorExample Response
{ "id": "lst_...", "name": "Updated Name", "updatedAt": "..." }/lists/:idDeletes a list and all its tasks. Irreversible.
Example Response
{ "ok": true }Tasks
/tasksReturns tasks in the workspace. Filter by list, status, assignee, or due date.
Query Parameters
list_idstringFilter by liststatusstringtodo | in_progress | done | archivedassignee_idstringFilter by assignee user IDdue_beforeISO 8601Tasks due before this datedue_afterISO 8601Tasks due after this datelimitnumberMax results (default 50, max 200)offsetnumberPagination offsetExample Response
{ "data": [{ "id": "tsk_...", "title": "...", "status": "todo", "priority": "high", "dueDate": null, "assigneeId": null }], "total": 42 }/tasksCreates a new task.
Request Body (JSON)
listIdstring *ID of the list to create the task intitlestring *Task title (max 500 chars)notesstringTask notes/description (markdown supported)statusstringtodo (default) | in_progress | doneprioritystringnone (default) | low | medium | high | urgentdueDateISO 8601Due dateassigneeIdstringUser ID to assign the task toparentIdstringParent task ID (creates a subtask)Example Response
{ "id": "tsk_...", "title": "...", "status": "todo", "createdAt": "..." }/tasks/:idUpdates a task. Only include fields you want to change.
Request Body (JSON)
titlestringNew titlenotesstringNew notesstatusstringtodo | in_progress | done | archivedprioritystringnone | low | medium | high | urgentdueDateISO 8601 | nullSet or clear due dateassigneeIdstring | nullSet or clear assigneeExample Response
{ "id": "tsk_...", "title": "...", "status": "done", "updatedAt": "..." }/tasks/:idDeletes a task and all its subtasks. Irreversible.
Example Response
{ "ok": true }Webhooks
/webhooksLists all configured webhooks for the workspace.
Example Response
{ "data": [{ "id": "whk_...", "url": "https://your-app.com/hook", "events": ["task.created", "task.completed"], "isActive": true }] }/webhooksCreates a webhook endpoint.
Request Body (JSON)
urlstring *HTTPS URL to receive webhook eventsnamestring *Friendly name for this webhookeventsstring[] *Events to subscribe to (see event list below)Example Response
{ "id": "whk_...", "url": "...", "secret": "whsec_...", "events": [...] }Rate Limits
Braid plan
600 requests / 10 min
Rope plan
3,000 requests / 10 min
Rate limit headers
X-RateLimit-RemainingX-RateLimit-Reset
Questions about the API?
Contact us →