Event
trigger.clockify_event
TriggerBusiness appsconnection requiredruns in-engine
Registers one Clockify webhook per selected event in the tenant's workspace at publish and starts one run per delivery, checked against Clockify's token.
Start a run when a Clockify workspace event arrives (time entry, project, task, approval…).
Connection
- Required
- Yes — the node will not save without one
- Auth type
- API key
- Providers
- Clockify
- Secret shape
- the Clockify API key (X-Api-Key)
- Resolved by
- config.connection_id, else the tenant's single clockify connection
- Note
- Webhooks may only be created by a workspace owner or admin, so a key generated by a regular member fails at publish. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a URL Clockify can reach.
Configuration
4 fields, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
workspace_id The workspace the webhooks are created in. Only workspace owners and admins may create them, so the connection's key must belong to one. | string | Yes | — | — | 64a687e29ae1f428e7ebe303 |
events Which events to subscribe to. One Clockify webhook is registered per event and deleted again when the workflow is unpublished or disabled — and Clockify caps webhooks per workspace (three on the Free plan), so a long list can be refused at publish with Clockify's own message. | array | No | ["NEW_TIME_ENTRY"] | ≥ 1 characters; array of string | — |
trigger_source_type What the ids in 'Trigger source' refer to. Leave WORKSPACE_ID to fire on everything in the workspace; pick PROJECT_ID or USER_ID to narrow it. | string | No | WORKSPACE_ID | one of "PROJECT_ID", "USER_ID", "TAG_ID", "TASK_ID", "WORKSPACE_ID", "ASSIGNMENT_ID", "EXPENSE_ID" | — |
trigger_source The ids to narrow the subscription to, matching the type above. Leave empty with WORKSPACE_ID — the workspace id is then what gets registered. | array | No | — | array of string | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"events": [
"NEW_TIME_ENTRY"
],
"trigger_source_type": "WORKSPACE_ID",
"workspace_id": "64a687e29ae1f428e7ebe303"
}Output
One shape.
clockify event
A flat envelope with Clockify's own object under `payload`. `payload` keys depend on which event fired.
Extra keys beyond the ones listed can appear.
| Field | Type | Example |
|---|---|---|
event The Clockify event name, e.g. NEW_TIME_ENTRY. Empty when the delivery carries no event header — Clockify does not document one, so branch on the payload rather than on this when it matters. | string | NEW_TIME_ENTRY |
id The id of the object the event is about (the time entry, project, task…), lifted out of the payload so the next node need not dig for it. | string | 65df50f5d2dd8f23a685374e |
workspace_id The Clockify workspace the event happened in, lifted out of the payload. | string | 64a687e29ae1f428e7ebe303 |
payload Clockify's own object, verbatim — a time entry for the TIME_ENTRY_* and TIMER_* events, a project for PROJECT_*, and so on. Its keys depend on the event, which is why this shape is open. | object | — |
{
"event": "NEW_TIME_ENTRY",
"id": "65df50f5d2dd8f23a685374e",
"payload": {
"billable": true,
"description": "Design review",
"id": "65df50f5d2dd8f23a685374e",
"projectId": "54a687e29ae1f428e7ebe909",
"timeInterval": {
"duration": "PT1H30M",
"end": "2026-09-08T10:30:00Z",
"start": "2026-09-08T09:00:00Z"
},
"userId": "5a0ab5acb07987125438b60f",
"workspaceId": "64a687e29ae1f428e7ebe303"
},
"workspace_id": "64a687e29ae1f428e7ebe303"
}Notes
- Publishing creates one webhook per selected event; unpublishing, disabling or archiving deletes all of them, so a workspace never keeps delivering to a dead workflow.
- Each delivery is checked against the token Clockify issued for that webhook before any run starts; an unrecognised token is refused with 401.
- Clockify retries a failed delivery four times over 72 hours. Runs are deduplicated on the event's own content, so a retry rejoins the first run.
- Clockify's own reference does not name the header the token arrives in, so every documented candidate is checked — see the module docstring.
Related Clockify nodes
See Event run in a workflow.
In a technical demo we add the Clockify connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.