Access the ClickUp API with managed OAuth authentication. Manage tasks, lists, folders, spaces, workspaces, users, and webhooks for work management.
Reference
Get Authorized Workspaces
GET /clickup/api/v2/teamExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/team')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"teams": [
{
"id": "1234567",
"name": "Acme Corp",
"color": "#7B68EE",
"avatar": null,
"members": [
{
"user": {
"id": 123,
"username": "Alice Johnson",
"email": "alice@acme.com"
}
}
]
}
]
}Get Spaces
GET /clickup/api/v2/team/{team_id}/spaceQuery parameters:
archived- Include archived spaces (true/false)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/team/1234567/space')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"spaces": [
{
"id": "90120001",
"name": "Engineering",
"private": false,
"statuses": [
{"status": "to do", "type": "open"},
{"status": "in progress", "type": "custom"},
{"status": "done", "type": "closed"}
]
}
]
}Get a Space
GET /clickup/api/v2/space/{space_id}Create a Space
POST /clickup/api/v2/team/{team_id}/spaceExample:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'name': 'New Space', 'multiple_assignees': True, 'features': {'due_dates': {'enabled': True}, 'time_tracking': {'enabled': True}}}).encode()
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/team/1234567/space', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFUpdate a Space
PUT /clickup/api/v2/space/{space_id}Delete a Space
DELETE /clickup/api/v2/space/{space_id}Get Folders
GET /clickup/api/v2/space/{space_id}/folderQuery parameters:
archived- Include archived folders (true/false)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/space/90120001/folder')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"folders": [
{
"id": "456789",
"name": "Sprint 1",
"orderindex": 0,
"hidden": false,
"space": {"id": "90120001", "name": "Engineering"},
"task_count": "12",
"lists": []
}
]
}Get a Folder
GET /clickup/api/v2/folder/{folder_id}Create a Folder
POST /clickup/api/v2/space/{space_id}/folderExample:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'name': 'New Folder'}).encode()
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/space/90120001/folder', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFUpdate a Folder
PUT /clickup/api/v2/folder/{folder_id}Delete a Folder
DELETE /clickup/api/v2/folder/{folder_id}Get Lists
GET /clickup/api/v2/folder/{folder_id}/listQuery parameters:
archived- Include archived lists (true/false)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/folder/456789/list')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"lists": [
{
"id": "901234",
"name": "Backlog",
"orderindex": 0,
"status": {"status": "active", "color": "#87909e"},
"task_count": 25,
"folder": {"id": "456789", "name": "Sprint 1"}
}
]
}Get Folderless Lists
GET /clickup/api/v2/space/{space_id}/listGet a List
GET /clickup/api/v2/list/{list_id}Create a List
POST /clickup/api/v2/folder/{folder_id}/listExample:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'name': 'New List'}).encode()
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/folder/456789/list', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFCreate Folderless List
POST /clickup/api/v2/space/{space_id}/listUpdate a List
PUT /clickup/api/v2/list/{list_id}Delete a List
DELETE /clickup/api/v2/list/{list_id}Get Tasks
GET /clickup/api/v2/list/{list_id}/taskQuery parameters:
archived- Include archived tasks (true/false)page- Page number (0-indexed)order_by- Sort by field (created, updated, due_date)reverse- Reverse sort order (true/false)subtasks- Include subtasks (true/false)statuses[]- Filter by statusinclude_closed- Include closed tasks (true/false)assignees[]- Filter by assignee IDsdue_date_gt- Due date greater than (Unix ms)due_date_lt- Due date less than (Unix ms)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/list/901234/task?include_closed=true')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"tasks": [
{
"id": "abc123",
"name": "Implement login feature",
"status": {"status": "in progress", "type": "custom", "color": "#4194f6"},
"priority": {"id": "2", "priority": "high", "color": "#f9d900"},
"due_date": "1709251200000",
"assignees": [{"id": 123, "username": "Alice Johnson", "email": "alice@acme.com"}],
"description": "Add OAuth login flow",
"date_created": "1707436800000",
"date_updated": "1708646400000"
}
]
}Get a Task
GET /clickup/api/v2/task/{task_id}Query parameters:
custom_task_ids- Use custom task IDs (true/false)team_id- Required when using custom_task_idsinclude_subtasks- Include subtasks (true/false)
Example:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/task/abc123')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFCreate a Task
POST /clickup/api/v2/list/{list_id}/task
Content-Type: application/json
{
"name": "Task name",
"description": "Task description",
"assignees": [123],
"status": "to do",
"priority": 2,
"due_date": 1709251200000,
"tags": ["api", "backend"],
"parent": null
}Fields:
name(required) - Task titledescription- Task description (supports markdown)assignees- Array of user IDsstatus- Status name (must match a status in the list)priority- Priority level (1=urgent, 2=high, 3=normal, 4=low, null=none)due_date- Unix timestamp in millisecondsdue_date_time- Include time in due date (true/false)start_date- Unix timestamp in millisecondstime_estimate- Time estimate in millisecondstags- Array of tag namesparent- Parent task ID (for subtasks)custom_fields- Array of custom field objects
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'name': 'Complete API integration', 'description': 'Integrate with the new external API', 'priority': 2, 'due_date': 1709251200000, 'assignees': [123]}).encode()
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/list/901234/task', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFUpdate a Task
PUT /clickup/api/v2/task/{task_id}Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'status': 'complete', 'priority': None}).encode()
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/task/abc123', data=data, method='PUT')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFDelete a Task
DELETE /clickup/api/v2/task/{task_id}Get Filtered Team Tasks
GET /clickup/api/v2/team/{team_id}/taskQuery parameters:
page- Page number (0-indexed)order_by- Sort fieldstatuses[]- Filter by statusesassignees[]- Filter by assigneeslist_ids[]- Filter by list IDsspace_ids[]- Filter by space IDsfolder_ids[]- Filter by folder IDs
Get Current User
GET /clickup/api/v2/userExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/user')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"user": {
"id": 123,
"username": "Alice Johnson",
"email": "alice@acme.com",
"color": "#7B68EE",
"profilePicture": "https://...",
"initials": "AJ",
"week_start_day": 0,
"timezone": "America/New_York"
}
}Get Webhooks
GET /clickup/api/v2/team/{team_id}/webhookExample:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/team/1234567/webhook')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFCreate Webhook
POST /clickup/api/v2/team/{team_id}/webhook
Content-Type: application/json
{
"endpoint": "https://example.com/webhook",
"events": ["taskCreated", "taskUpdated", "taskDeleted"],
"space_id": "90120001",
"folder_id": "456789",
"list_id": "901234",
"task_id": "abc123"
}Events:
taskCreated,taskUpdated,taskDeletedtaskPriorityUpdated,taskStatusUpdatedtaskAssigneeUpdated,taskDueDateUpdatedtaskTagUpdated,taskMovedtaskCommentPosted,taskCommentUpdatedtaskTimeEstimateUpdated,taskTimeTrackedUpdatedlistCreated,listUpdated,listDeletedfolderCreated,folderUpdated,folderDeletedspaceCreated,spaceUpdated,spaceDeletedgoalCreated,goalUpdated,goalDeletedkeyResultCreated,keyResultUpdated,keyResultDeleted
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'endpoint': 'https://example.com/webhook', 'events': ['taskCreated', 'taskUpdated']}).encode()
req = urllib.request.Request('https://api.maton.ai/clickup/api/v2/team/1234567/webhook', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFResponse:
{
"id": "webhook123",
"webhook": {
"id": "webhook123",
"userid": 123,
"team_id": "1234567",
"endpoint": "https://example.com/webhook",
"client_id": "...",
"events": ["taskCreated", "taskUpdated"],
"health": {"status": "active", "fail_count": 0},
"secret": "..."
}
}Update a Webhook
PUT /clickup/api/v2/webhook/{webhook_id}Delete a Webhook
DELETE /clickup/api/v2/webhook/{webhook_id}