| name | clickup-core-workflow-a |
| description | Manage ClickUp tasks via API v2: create, read, update, delete tasks with
assignees, priorities, due dates, subtasks, and statuses.
Trigger: "clickup task", "create clickup task", "update task status",
"manage clickup tasks", "clickup CRUD", "clickup task management".
|
| allowed-tools | Read, Write, Edit, Bash(curl:*), Grep |
| version | 1.0.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","productivity","clickup"] |
| compatible-with | claude-code |
ClickUp Core Workflow A — Task Management
Overview
CRUD operations on ClickUp tasks via API v2. Tasks live in Lists and support assignees, priorities (1-4), statuses, due dates, tags, checklists, and custom fields.
Endpoints
| Operation | Method | Endpoint |
|---|
| Create task | POST | /api/v2/list/{list_id}/task |
| Get task | GET | /api/v2/task/{task_id} |
| Update task | PUT | /api/v2/task/{task_id} |
| Delete task | DELETE | /api/v2/task/{task_id} |
| Get tasks in list | GET | /api/v2/list/{list_id}/task |
| Add task to list | POST | /api/v2/list/{list_id}/task/{task_id} |
| Create subtask | POST | /api/v2/list/{list_id}/task (with parent field) |
Create Task
interface CreateTaskBody {
name: string;
description?: string;
markdown_description?: string;
assignees?: number[];
tags?: string[];
status?: string;
priority?: 1 | 2 | 3 | 4 | null;
due_date?: number;
due_date_time?: boolean;
start_date?: number;
start_date_time?: boolean;
time_estimate?: number;
notify_all?: boolean;
parent?: string;
links_to?: ;
?: <{
: ;
: ;
}>;
}
() {
(, {
: ,
: .(task),
});
}
(, {
: ,
: ,
: [],
: ,
: ,
: .() + ,
: ,
: [, ],
});
Get Tasks (with Filtering)
async function getTasks(listId: string, params: Record<string, string> = {}) {
const query = new URLSearchParams({
archived: 'false',
include_closed: 'false',
subtasks: 'true',
...params,
});
return clickupRequest(`/list/${listId}/task?${query}`);
}
const tasks = await getTasks('900100200300', {
'assignees[]': '183',
'statuses[]': 'in progress',
order_by: 'due_date',
reverse: 'true',
page: '0',
});
Update Task
async function updateTask(taskId: string, updates: Partial<CreateTaskBody>) {
return clickupRequest(`/task/${taskId}`, {
method: 'PUT',
body: JSON.stringify(updates),
});
}
await updateTask('abc123', {
status: 'complete',
assignees: { add: [456], rem: [] },
});
Create Subtask
await createTask('900100200300', {
name: 'Write unit tests for auth fix',
parent: 'abc123',
assignees: [183],
priority: 3,
});
Bulk Operations
async function searchTasks(teamId: string, query: string) {
return clickupRequest(`/team/${teamId}/task?${new URLSearchParams({
page: '0',
order_by: 'updated',
reverse: 'true',
include_closed: 'true',
subtasks: 'true',
})}`);
}
Error Handling
| Status | Cause | Solution |
|---|
| 400 | Missing name field | Task name is required |
| 401 | Invalid token | Re-authenticate |
| 404 | Invalid list_id or task_id | Verify IDs via GET endpoints |
| 403 | No permission on this list | Check workspace membership |
Resources
Next Steps
For spaces, folders, and lists management see clickup-core-workflow-b.