Agent skill
clickup
ClickUp API for tasks and spaces. Use when user mentions "ClickUp", "clickup.com", shares a ClickUp link, "ClickUp task", or asks about ClickUp workspace.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/clickup
SKILL.md
ClickUp API
Manage tasks, lists, folders, spaces, and workspaces in ClickUp via the REST API.
Official docs:
https://developer.clickup.com/reference
When to Use
Use this skill when you need to:
- List workspaces, spaces, folders, and lists
- Create, update, delete, and search tasks
- Manage comments on tasks
- Track time entries for tasks
- Organize work with tags and custom fields
How to Use
All examples below assume you have CLICKUP_TOKEN set.
Base URL: https://api.clickup.com/api/v2
ClickUp uses numeric IDs for all resources. The hierarchy is: Workspace (team) > Space > Folder > List > Task.
User & Workspaces
Get Authorized User
curl -s "https://api.clickup.com/api/v2/user" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.user | {id, username, email}'
List Workspaces
curl -s "https://api.clickup.com/api/v2/team" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.teams[] | {id, name}'
Spaces
List Spaces in a Workspace
curl -s "https://api.clickup.com/api/v2/team/<team_id>/space?archived=false" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.spaces[] | {id, name}'
Get Space Details
curl -s "https://api.clickup.com/api/v2/space/<space_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.'
Create Space
Write to /tmp/clickup_request.json:
{
"name": "New Space",
"multiple_assignees": true,
"features": {
"due_dates": { "enabled": true },
"time_tracking": { "enabled": true }
}
}
curl -s -X POST "https://api.clickup.com/api/v2/team/<team_id>/space" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name}'
Delete Space
curl -s -X DELETE "https://api.clickup.com/api/v2/space/<space_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Folders
List Folders in a Space
curl -s "https://api.clickup.com/api/v2/space/<space_id>/folder?archived=false" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.folders[] | {id, name}'
Create Folder
Write to /tmp/clickup_request.json:
{
"name": "New Folder"
}
curl -s -X POST "https://api.clickup.com/api/v2/space/<space_id>/folder" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name}'
Update Folder
Write to /tmp/clickup_request.json:
{
"name": "Updated Folder Name"
}
curl -s -X PUT "https://api.clickup.com/api/v2/folder/<folder_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name}'
Delete Folder
curl -s -X DELETE "https://api.clickup.com/api/v2/folder/<folder_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Lists
List Lists in a Folder
curl -s "https://api.clickup.com/api/v2/folder/<folder_id>/list?archived=false" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.lists[] | {id, name, task_count}'
List Folderless Lists in a Space
curl -s "https://api.clickup.com/api/v2/space/<space_id>/list?archived=false" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.lists[] | {id, name, task_count}'
Create List
Write to /tmp/clickup_request.json:
{
"name": "New List",
"content": "List description here"
}
curl -s -X POST "https://api.clickup.com/api/v2/folder/<folder_id>/list" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name}'
Update List
Write to /tmp/clickup_request.json:
{
"name": "Updated List Name",
"content": "Updated description"
}
curl -s -X PUT "https://api.clickup.com/api/v2/list/<list_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name}'
Delete List
curl -s -X DELETE "https://api.clickup.com/api/v2/list/<list_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Tasks
List Tasks in a List
curl -s "https://api.clickup.com/api/v2/list/<list_id>/task?archived=false" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.tasks[] | {id, name, status: .status.status, assignees: [.assignees[].username], due_date}'
Get Task Details
curl -s "https://api.clickup.com/api/v2/task/<task_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '{id, name, description, status: .status.status, priority: .priority, due_date, assignees: [.assignees[].username]}'
Create Task
Write to /tmp/clickup_request.json:
{
"name": "New Task",
"description": "Task description here",
"status": "to do",
"priority": 3,
"due_date": 1774934400000,
"due_date_time": false
}
curl -s -X POST "https://api.clickup.com/api/v2/list/<list_id>/task" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name, status: .status.status}'
Create Task with Assignees
Write to /tmp/clickup_request.json:
{
"name": "Assigned Task",
"description": "Task with assignees",
"assignees": [123456],
"status": "to do",
"priority": 2
}
curl -s -X POST "https://api.clickup.com/api/v2/list/<list_id>/task" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name, assignees: [.assignees[].username]}'
Update Task
Write to /tmp/clickup_request.json:
{
"name": "Updated Task Name",
"description": "Updated description",
"status": "in progress",
"priority": 1
}
curl -s -X PUT "https://api.clickup.com/api/v2/task/<task_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '{id, name, status: .status.status}'
Delete Task
curl -s -X DELETE "https://api.clickup.com/api/v2/task/<task_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Get Filtered Team Tasks
curl -s "https://api.clickup.com/api/v2/team/<team_id>/task?statuses[]=to%20do&statuses[]=in%20progress&assignees[]=<user_id>&page=0" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.tasks[] | {id, name, status: .status.status}'
Comments
List Task Comments
curl -s "https://api.clickup.com/api/v2/task/<task_id>/comment" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.comments[] | {id, comment_text, user: .user.username, date}'
Create Task Comment
Write to /tmp/clickup_request.json:
{
"comment_text": "This is a comment on the task."
}
curl -s -X POST "https://api.clickup.com/api/v2/task/<task_id>/comment" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '.'
Update Comment
Write to /tmp/clickup_request.json:
{
"comment_text": "Updated comment text."
}
curl -s -X PUT "https://api.clickup.com/api/v2/comment/<comment_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '.'
Delete Comment
curl -s -X DELETE "https://api.clickup.com/api/v2/comment/<comment_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Time Tracking
List Time Entries
curl -s "https://api.clickup.com/api/v2/team/<team_id>/time_entries" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.data[] | {id, task: .task.name, duration, start, end}'
Create Time Entry
Write to /tmp/clickup_request.json:
{
"description": "Working on task",
"start": 1774934400000,
"duration": 3600000,
"tid": "<task_id>"
}
curl -s -X POST "https://api.clickup.com/api/v2/team/<team_id>/time_entries" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" --header "Content-Type: application/json" -d @/tmp/clickup_request.json | jq '.data | {id, duration, start}'
Delete Time Entry
curl -s -X DELETE "https://api.clickup.com/api/v2/team/<team_id>/time_entries/<timer_id>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Tags
List Space Tags
curl -s "https://api.clickup.com/api/v2/space/<space_id>/tag" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)" | jq '.tags[] | {name, tag_fg, tag_bg}'
Add Tag to Task
curl -s -X POST "https://api.clickup.com/api/v2/task/<task_id>/tag/<tag_name>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Remove Tag from Task
curl -s -X DELETE "https://api.clickup.com/api/v2/task/<task_id>/tag/<tag_name>" --header "Authorization: Bearer $(printenv CLICKUP_TOKEN)"
Guidelines
- ClickUp uses numeric IDs for all resources. Use
jqto extractidandnamefields. - The resource hierarchy is: Workspace (team) > Space > Folder > List > Task. Lists can also exist directly under a Space (folderless lists).
- Task statuses are lowercase strings (e.g.,
to do,in progress,complete). Available statuses depend on the list configuration. - Priority values: 1 (urgent), 2 (high), 3 (normal), 4 (low). Use
nullfor no priority. - Dates are Unix timestamps in milliseconds. Convert with:
date -d "2026-04-01" +%s000. - Pagination: tasks endpoint returns up to 100 results per page. Use
page=0,page=1, etc. - Use
archived=falsequery parameter to exclude archived items from list endpoints. - Write request bodies to
/tmp/clickup_request.jsonbefore sending. - Rate limits: ClickUp allows 100 requests per minute per token. Back off on 429 responses.
- Use
<placeholder>for dynamic IDs that the user must replace (e.g.,<task_id>,<list_id>).
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
brave-search
Brave Search API for web search. Use when user says "search web", "Brave search", or asks to "find on web" without specifying Google.
supadata
Supadata API for YouTube/web data. Use when user mentions "Supadata", "YouTube data", "channel stats", or web scraping data.
roadmap-planning
Build and prioritize product roadmaps using scoring models like RICE, ICE, and value-effort matrices. Activate when creating a product roadmap, prioritizing features, sequencing initiatives, mapping dependencies, balancing team capacity, choosing between Now/Next/Later or quarterly planning, or communicating roadmap tradeoffs to executives and stakeholders.
qdrant
Qdrant API for vector search. Use when user mentions "Qdrant", "vector database", "semantic search", or embeddings storage.
calendly
Calendly scheduling API. Use when user mentions "Calendly", "calendly.com", "schedule a meeting", "booking link", "event types", or asks about interview scheduling.
stripe
Stripe API for payments. Use when user mentions "Stripe", "payment", "subscription", "billing", "invoice", or asks about payment processing.
Didn't find tool you were looking for?