Claude-code-plugins-plus-skills clickup-hello-world
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/clickup-pack/skills/clickup-hello-world" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-clickup-hello-world && rm -rf "$T"
manifest:
plugins/saas-packs/clickup-pack/skills/clickup-hello-world/SKILL.mdsource content
ClickUp Hello World
Overview
Walk through the ClickUp hierarchy and make your first API calls. ClickUp's data model: Workspace (called "team" in API v2) > Space > Folder (optional) > List > Task.
Prerequisites
- Completed
setupclickup-install-auth - Valid
in environmentCLICKUP_API_TOKEN
ClickUp Hierarchy
Workspace (team_id) GET /api/v2/team └── Space (space_id) GET /api/v2/team/{team_id}/space ├── List GET /api/v2/space/{space_id}/list (folderless lists) └── Folder GET /api/v2/space/{space_id}/folder └── List GET /api/v2/folder/{folder_id}/list └── Task GET /api/v2/list/{list_id}/task
Step 1: Discover Your Workspace
# Get authorized workspaces (returns team_id needed for all subsequent calls) curl -s https://api.clickup.com/api/v2/team \ -H "Authorization: $CLICKUP_API_TOKEN" | jq '.teams[] | {id, name}'
Response shape:
{ "teams": [{ "id": "1234567", "name": "My Workspace", "color": "#536cfe", "members": [{ "user": { "id": 123, "username": "john", "email": "john@example.com" } }] }] }
Step 2: List Spaces
TEAM_ID="1234567" curl -s "https://api.clickup.com/api/v2/team/${TEAM_ID}/space?archived=false" \ -H "Authorization: $CLICKUP_API_TOKEN" | jq '.spaces[] | {id, name}'
Step 3: Get Lists in a Space
SPACE_ID="12345678" # Folderless lists (directly in Space) curl -s "https://api.clickup.com/api/v2/space/${SPACE_ID}/list" \ -H "Authorization: $CLICKUP_API_TOKEN" | jq '.lists[] | {id, name}' # Or lists inside folders curl -s "https://api.clickup.com/api/v2/space/${SPACE_ID}/folder" \ -H "Authorization: $CLICKUP_API_TOKEN" | jq '.folders[] | {id, name, lists: [.lists[] | {id, name}]}'
Step 4: Create Your First Task
LIST_ID="900100200300" curl -s -X POST "https://api.clickup.com/api/v2/list/${LIST_ID}/task" \ -H "Authorization: $CLICKUP_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Hello from the ClickUp API!", "description": "Created via API v2", "priority": 3, "status": "to do" }' | jq '{id, name, url}'
// TypeScript equivalent async function createFirstTask(listId: string) { const task = await clickupRequest(`/list/${listId}/task`, { method: 'POST', body: JSON.stringify({ name: 'Hello from the ClickUp API!', description: 'Created via API v2', priority: 3, // 1=Urgent, 2=High, 3=Normal, 4=Low status: 'to do', assignees: [123456], // user IDs (optional) due_date: Date.now() + 86400000, // tomorrow (Unix ms) due_date_time: true, }), }); console.log(`Task created: ${task.name} (${task.id})`); console.log(`URL: ${task.url}`); return task; }
Create Task Response Shape
{ "id": "abc123", "custom_id": null, "name": "Hello from the ClickUp API!", "status": { "status": "to do", "color": "#d3d3d3", "type": "open" }, "priority": { "id": "3", "priority": "normal", "color": "#6fddff" }, "date_created": "1695000000000", "date_updated": "1695000000000", "due_date": "1695086400000", "url": "https://app.clickup.com/t/abc123", "list": { "id": "900100200300", "name": "My List" }, "folder": { "id": "456", "name": "My Folder" }, "space": { "id": "12345678" } }
Error Handling
| Error | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Missing/invalid token | Check |
| 404 Not Found | Invalid list_id/team_id | Verify IDs via GET /team |
| 400 Bad Request | Missing field | Task name is required |
| 429 Rate Limited | Too many requests | Wait for |
Resources
Next Steps
Proceed to
clickup-core-workflow-a for workspace/space/task management patterns.