Webhook URL

When an event that your webhook is subscribed to occurs, ClickUp will send details about the event to the URL you provided when creating the webhook.

If no protocol is specified in the URL, the default will be https.

Note

Non-SSL protocols may not be supported in the future. We recommend using secure protocols whenever possible.

Requests to your URL will always follow these criteria:

  • Always sent using the POST method.
  • The Content-Type will always be application/json .
  • The webhook_id , event , and resource ID will be included in the body.
  • If a history item exists describing the event, it will be included in a history_items array.

The {{webhook_id}}:{{history_item_id}} can be used as an idempotency key.

Here is an example request:

Copy
Copied
POST https://yourdomain.com/webhook
Content-Type: application/json

Typing of webhook response notes

  • history_items[x].user.id is an integer, not a string.
  • Some boolean values (eg. Custom Field checkmark) might be NULL instead of false when unset.
  • Custom Field values are not normalized for their type. Make sure to cast to correct type.

Example response

Here is an example response:

Copy
Copied
{
    "webhook_id": "7689a169-a000-4985-8676-6902b96d6627",
    "event": "taskUpdated",
    "task_id": "task_id",
    "history_items": [
        {
            "id": "33169",
            "type": 1,
            "date": "1575650190085",
            "field": "status",
            "parent_id": "list_id",
            "data": {
                "status_type": "closed"
            },
            "source": null,
            "user": {
                "id": 183, 
                "username": "John Doe",
                "email": "example@email.com",
                "color": "#827718",
                "initials": "JK",
                "profilePicture": "https://dev-attachments-public.clickup.com/profilePictures/183_nx1.jpg"
            },
            "before": {
                "status": "open",
                "color": "#d3d3d3",
                "orderindex": 0,
                "type": "open"
            },
            "after": {
                "status": "complete",
                "color": "#6bc950",
                "orderindex": 1,
                "type": "closed"
            }
        }
    ]
}