ClickUp

Interact with ClickUp project management platform via REST API. Use when working with tasks, spaces, lists, assignees, or any ClickUp workflow automation. Handles pagination, subtasks, and common query patterns. Use for task management, reporting, automation, or any ClickUp-related queries.

Instalar
$clawhub install clickup

ClickUp Skill

Interact with ClickUp's REST API for task management, reporting, and workflow automation.

Configuration

Before using this skill, ensure the following are configured in TOOLS.md:

  • API Token: CLICKUP_API_KEY

  • Team/Workspace ID: CLICKUP_TEAM_ID

  • Space IDs (optional, for filtering)

  • List IDs (optional, for creating tasks)

Quick Start

Using the Helper Script

The fastest way to query ClickUp:


# Set environment variables
export CLICKUP_API_KEY="pk_..."
export CLICKUP_TEAM_ID="90161392624"

# Get all open tasks
./scripts/clickup-query.sh tasks

# Get task counts (parent vs subtasks)
./scripts/clickup-query.sh task-count

# Get assignee breakdown
./scripts/clickup-query.sh assignees

# Get specific task
./scripts/clickup-query.sh task <task-id>

Direct API Calls

For custom queries or operations not covered by the helper script:


# Get all open tasks (with subtasks and pagination)
curl "https://api.clickup.com/api/v2/team/{team_id}/task?include_closed=false&subtasks=true" \
  -H "Authorization: {api_key}"

Critical Rules

1. ALWAYS Include Subtasks

Never query tasks without subtasks=true:


# ✅ CORRECT
?subtasks=true

# ❌ WRONG
(no subtasks parameter)

Why: Without this parameter, you miss potentially 70%+ of actual tasks. Parent tasks are just containers; real work happens in subtasks.

2. Handle Pagination

ClickUp API returns max 100 tasks per page. Always loop until last_page: true:

page=0
while true; do
    result=$(curl -s "...&page=$page" -H "Authorization: $CLICKUP_API_KEY")

    # Process tasks
    echo "$result" | jq '.tasks[]'

    # Check if done
    is_last=$(echo "$result" | jq -r '.last_page')
    [ "$is_last" = "true" ] && break

    ((page++))
done

Why: Workspaces with 300+ tasks need 3-4 pages. Missing pages = incomplete data.

3. Distinguish Parent Tasks vs Subtasks


# Parent tasks have parent=null
jq '.tasks[] | select(.parent == null)'

# Subtasks have parent != null
jq '.tasks[] | select(.parent != null)'

Common Operations

Get Task Counts


# Using helper script (recommended)
./scripts/clickup-query.sh task-count

# Direct API with jq
curl -s "https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true" \
  -H "Authorization: {api_key}" | \
jq '{
    total: (.tasks | length),
    parents: ([.tasks[] | select(.parent == null)] | length),
    subtasks: ([.tasks[] | select(.parent != null)] | length)
}'

Get Assignee Breakdown


# Using helper script (recommended)
./scripts/clickup-query.sh assignees

# Direct API
curl -s "https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true" \
  -H "Authorization: {api_key}" | \
jq -r '.tasks[] | 
    if .assignees and (.assignees | length) > 0 
    then .assignees[0].username 
    else "Unassigned" 
    end' | sort | uniq -c | sort -rn

Create a Task

curl "https://api.clickup.com/api/v2/list/{list_id}/task" \
  -X POST \
  -H "Authorization: {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Task Name",
    "description": "Description here",
    "assignees": [user_id],
    "status": "to do",
    "priority": 3
  }'

Update a Task

curl "https://api.clickup.com/api/v2/task/{task_id}" \
  -X PUT \
  -H "Authorization: {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Name",
    "status": "in progress",
    "priority": 2
  }'

Get Specific Task


# Using helper script
./scripts/clickup-query.sh task {task_id}

# Direct API
curl "https://api.clickup.com/api/v2/task/{task_id}" \
  -H "Authorization: {api_key}"

Advanced Queries

Filter by Space

curl "https://api.clickup.com/api/v2/team/{team_id}/task?space_ids[]={space_id}&subtasks=true" \
  -H "Authorization: {api_key}"

Filter by List

curl "https://api.clickup.com/api/v2/list/{list_id}/task?subtasks=true" \
  -H "Authorization: {api_key}"

Include Closed Tasks

curl "https://api.clickup.com/api/v2/team/{team_id}/task?include_closed=true&subtasks=true" \
  -H "Authorization: {api_key}"

Reference Documentation

For detailed API documentation, query patterns, and troubleshooting:

Read: references/api-guide.md

Covers:

  • Full API endpoint reference

  • Response structure details

  • Common gotchas and solutions

  • Rate limits and best practices

  • Task object schema

Workflow Patterns

Daily Standup Report


# Get all open tasks grouped by assignee
./scripts/clickup-query.sh assignees

# Get specific team member's tasks (use user ID, not username!)
curl "https://api.clickup.com/api/v2/team/{team_id}/task?subtasks=true&assignees[]={user_id}" \
  -H "Authorization: {api_key}"

Task Audit


# Count tasks by status
./scripts/clickup-query.sh tasks | \
  jq -r '.tasks[].status.status' | sort | uniq -c | sort -rn

# Find unassigned tasks
./scripts/clickup-query.sh tasks | \
  jq '.tasks[] | select(.assignees | length == 0)'

Priority Analysis


# Count by priority
./scripts/clickup-query.sh tasks | \
  jq -r '.tasks[] | .priority.priority // "none"' | sort | uniq -c | sort -rn

Tips

  • Helper script first: Use scripts/clickup-query.sh for common operations

  • Direct API for custom: Use curl when you need specific filters or updates

  • Always read api-guide.md: Contains full endpoint reference and troubleshooting

  • Check TOOLS.md: For workspace-specific IDs and configuration

  • Test with small queries: When unsure, test with | head -n 5 first

  • Filter by user ID: Use assignees[]={user_id} parameter, not jq username matching

Troubleshooting

  • Missing tasks? → Add subtasks=true

  • Only 100 tasks returned? → Implement pagination loop

  • 401 Unauthorized? → Check CLICKUP_API_KEY is set correctly

  • Rate limit error? → Wait 1 minute (100 requests/min limit)

  • Empty assignees array? → Task is unassigned (not an error)

  • Assignee filter returns fewer tasks than expected? → Use user ID in assignees[] param, not jq text matching

Detalles

Versión
v1.2.0
Descargas
2,435
Estrellas
6

Skills populares

Stealth Browser
Ultimate stealth browser automation with anti-detection, Cloudflare bypass, CAPTCHA solving, persistent sessions, and silent operation. Use for any web automation requiring bot detection evasion, login persistence, headless browsing, or bypassing security measures. Triggers on "bypass cloudflare", "solve captcha", "stealth browse", "silent automation", "persistent login", "anti-detection", or any task needing undetectable browser automation. When user asks to "login to X website", automatically use headed mode for login, then save session for future headless reuse.
小红书 - RedNote
小红书全能助手 — 文案生成、封面制作、内容发布与管理。当用户要求写小红书笔记、生成小红书文案/标题/封面、发小红书、搜索小红书、评论点赞收藏等任何小红书相关操作时使用。支持一站式从文案创作到自动发布的完整流程。封面AI生图需配置可选环境变量(GEMINI_API_KEY 或 IMG_API_KEY 或 HUNYUAN_SECRET_ID+KEY)。
Playwright (Automation + MCP + Scraper)
Browser automation via Playwright MCP. Navigate websites, click elements, fill forms, take screenshots, extract data, and debug real browser workflows. Use when (1) you need a real browser, not static fetch; (2) the task involves Playwright MCP, browser tools, Playwright tests, scripts, or JS-rendered pages; (3) the user wants navigation, forms, screenshots, PDFs, downloads, or browser-driven extraction turned into a reliable outcome.