InTouch Hub · Blue Isle Software

Clockify

Read time entries, projects, clients and users from Clockify. Paginates everything (Clockify defaults to 50 per page) and converts ISO-8601 durations to hours.

Provided free and as is, without warranty of any kind — including merchantability, fitness for a particular purpose, and the accuracy or completeness of any result. See the licence. You are responsible for checking what this produces before relying on it.

consultingoperationsreportstatustime-trackingtimesheettimesheetsutilization

clockify

Time entries, projects, clients and users from Clockify.

Use case

Clockify's free tier is generous, so it is what the smallest firms run. This connector pulls the entries so a workflow can compute utilization and billable hours without anyone re-keying a timesheet.

Operations

operation endpoint covers
me GET /user the token's owner
list-workspaces GET /workspaces
list-users GET /workspaces/{id}/users
list-projects GET /workspaces/{id}/projects
list-clients GET /workspaces/{id}/clients
user-time-entries GET /workspaces/{id}/user/{uid}/time-entries one person
workspace-report POST {reports}/workspaces/{id}/reports/detailed everyone

Use workspace-report for anything about the firm. user-time-entries covers exactly one person, and a report built from it will under-report without ever looking wrong.

Setup

Create an API key in Clockify under Profile Settings → API.

It goes in the X-Api-Key header as the raw key — no Bearer, no prefix of any kind. A 401 here is almost always someone having added one.

Store it in the InTouch credential vault, not in the workflow.

Three things that bite

pageSize defaults to 50. Fifty. A single person's week can exceed that, and a caller that does not paginate takes the first fifty records as the answer. This connector paginates everything at 200 per page and publishes truncated when it stops at the 25-page cap.

Durations are ISO 8601 strings, not numbers. "PT1H30M", not 1.5. The connector adds an hours field beside each timeIntervalPT1H30M1.5, P1DT2H26.0 — and leaves the original string in place. A duration it cannot parse gets no hours field rather than a zero, so a parse failure cannot quietly become "worked no time."

The reports API is on a different host. Core is api.clockify.me/api/v1; reports are reports.api.clockify.me/v1. A 404 on a reports call while everything else works is nearly always the base URL rather than the path.

Regional accounts

Clockify pins some workspaces to a region (euc1., use2., …). If yours is one, set baseOverride and reportsOverride rather than assuming the global hosts.

Published outputs

key meaning
result JSON array of records, with hours added to time entries
status HTTP status of the last call
count records returned
truncated "true" if the page cap stopped the walk — result is incomplete

Source

clockify.py, tool.iml

Publishes

The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.

Input Properties

Every property this tool accepts, from its own tool.iml.

Property Type Required Default Description
apiKey string yes Clockify API key (Profile Settings). Sent raw in the X-Api-Key header, with no 'Bearer' prefix.
operation string yes One of: me, list-workspaces, list-users, list-projects, list-clients, user-time-entries, workspace-report
workspaceId string no Workspace id. Required for everything except me and list-workspaces.
userId string no User id. Required for user-time-entries.
startDate string no Start date YYYY-MM-DD (or full ISO instant). Required for workspace-report.
endDate string no End date YYYY-MM-DD (or full ISO instant). Required for workspace-report.
baseOverride string no Override the core API base URL for a regional account, e.g. https://euc1.clockify.me/api/v1
reportsOverride string no Override the reports API base URL for a regional account. The reports API is on a DIFFERENT host from the core API.