Skip to main content
Version: 0.1.0

ClickUp Webhook Endpoint

This page documents the ClickUp webhook HTTP endpoint exposed by the web server and how to run it in local and queue-backed modes.

See also

For end-to-end setup and handler wiring, see Webhooks Integration.

Endpoint

POST /webhook/clickup

Receives ClickUp webhook payloads and returns a simple acknowledgement when accepted.

Request

{
"event": "taskCreated",
"task_id": "task_123",
"list_id": "list_123",
"space_id": "space_123",
"webhook_id": "wh_123",
"history_items": []
}
FieldTypeRequiredDescription
eventstringyesClickUp event name; mapped to ClickUpWebhookEventType
webhook_idstringnoClickUp webhook id
task_id, list_id, folder_id, space_id, goal_id, key_result_idstringdependsIdentifiers present depending on the event type
history_itemsarraynoChange history items when included by ClickUp

Extra fields from ClickUp are allowed and preserved (tolerant parsing in DTO).

Examples by feature level

Task

{
"event": "taskUpdated",
"webhook_id": "wh_123",
"task_id": "task_123",
"list_id": "list_123",
"folder_id": "folder_123",
"space_id": "space_123",
"history_items": [
{ "field": "status", "before": "Open", "after": "In progress" },
{ "field": "assignees", "added": ["user_1"], "removed": [] }
],
"data": {
"name": "Fix critical bug",
"status": { "status": "in progress", "orderindex": 1 },
"priority": 3,
"due_date": "2025-11-20T10:20:30Z",
"tags": ["backend", "urgent"]
}
}
FieldTypeRequiredDescription
eventstringyesClickUp event name
webhook_idstringnoWebhook identifier
task_idstringyesTask identifier
list_idstringnoParent list identifier
folder_idstringnoParent folder identifier
space_idstringnoParent space identifier
history_itemsarraynoChange history entries provided by ClickUp
dataobjectnoAdditional event data (status, priority, etc.)

List

{
"event": "listUpdated",
"webhook_id": "wh_123",
"list_id": "list_123",
"space_id": "space_123",
"data": { "name": "Sprint Backlog", "archived": false }
}
FieldTypeRequiredDescription
eventstringyesClickUp event name
webhook_idstringnoWebhook identifier
list_idstringyesList identifier
space_idstringnoParent space identifier
dataobjectnoAdditional list info (name, archived, etc.)

Folder

{
"event": "folderUpdated",
"webhook_id": "wh_123",
"folder_id": "folder_123",
"space_id": "space_123",
"data": { "name": "Product Roadmap" }
}
FieldTypeRequiredDescription
eventstringyesClickUp event name
webhook_idstringnoWebhook identifier
folder_idstringyesFolder identifier
space_idstringnoParent space identifier
dataobjectnoFolder metadata (e.g., name)

Space

{
"event": "spaceUpdated",
"webhook_id": "wh_123",
"space_id": "space_123",
"data": { "name": "Engineering", "private": true }
}
FieldTypeRequiredDescription
eventstringyesClickUp event name
webhook_idstringnoWebhook identifier
space_idstringyesSpace identifier
dataobjectnoSpace metadata (e.g., name, privacy)

Goal

{
"event": "goalUpdated",
"webhook_id": "wh_123",
"goal_id": "goal_123",
"data": { "name": "Q4 Revenue", "percent_completed": 0.42 }
}
FieldTypeRequiredDescription
eventstringyesClickUp event name
webhook_idstringnoWebhook identifier
goal_idstringyesGoal identifier
dataobjectnoGoal progress fields

Key Result

{
"event": "keyResultUpdated",
"webhook_id": "wh_123",
"key_result_id": "kr_123",
"goal_id": "goal_123",
"data": { "name": "Close 50 enterprise deals", "current": 17, "target": 50 }
}
FieldTypeRequiredDescription
eventstringyesClickUp event name
webhook_idstringnoWebhook identifier
key_result_idstringyesKey result identifier
goal_idstringnoParent goal identifier
dataobjectnoKey result metrics

More details and references

Webhook payload references
  • Official docs: Task, List, Folder, Space, Goal/Key Result
  • Payload shape varies by event. Unknown fields are tolerated and preserved.
  • Example payloads used in tests live in test/contract_test/web_server/event/fixtures/clickup_webhooks/ and are auto-refreshed by CI.

Response

{ "ok": true }
FieldTypeDescription
okbooleanAlways true when payload is accepted

Error Handling

If the server encounters an error, it will respond with an appropriate HTTP status code and a JSON response containing error details.

Common Status Codes

Status CodeDescription
200Success - The request was processed successfully
400Bad Request - The payload was malformed or contained invalid fields
404Not Found - The requested resource was not found
500Internal Server Error - An unexpected error occurred on the server

Error Response Format

{
"error": {
"message": "Description of the error",
"code": "ERROR_CODE"
}
}