CONNECT APP
Build with Clockify
Productivity
- API key
MCP
Give your agent Clockify tools
Every Clockify action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Clockify account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "clockify",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Add Members To Project:
const result = await mcp.callTool({
name: "clockify-add-members-to-project",
arguments: {
workspaceId: "Workspace",
projectId: "Project",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "clockify",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Add Members To Project:
result = await session.call_tool("clockify-add-members-to-project", {
"workspaceId": "Workspace",
"projectId": "Project",
})API PROXY
Call the Clockify API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Clockify API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.clockify.me/api/v1/user",
})
// Any allowed Clockify endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.clockify.me/api/v1/user
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuY2xvY2tpZnkubWUvYXBpL3YxL3VzZXI?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Clockify actions from your backend
Connect a user's Clockify account once, then run Add Members To Project on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "clockify-add-members-to-project",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
clockify: { authProvisionId: "apn_xxxxxxx" },
workspaceId: "Workspace",
projectId: "Project",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="clockify-add-members-to-project",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"clockify": {"authProvisionId": "apn_xxxxxxx"},
"workspaceId": "Workspace",
"projectId": "Project",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "clockify-add-members-to-project",
"configured_props": {
"clockify": { "authProvisionId": "apn_xxxxxxx" },
"workspaceId": "Workspace",
"projectId": "Project"
}
}'TOOLS
Clockify actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Add Members To Project
actionAdds member(s) to a project in Clockify. See the documentationWritev0.0.5 -
Add Task To Project
actionAdds a task to an existing project in a Clockify workspace. Tasks are the units of work that time entries are logged against, so create the task before calling Log Time Entry or Start Timer with a task. Optionally assign workspace members to it. Use List Projects to find the project ID. See the documentationWritev0.0.5 -
Create Client
actionCreates a new client in a Clockify workspace. Requires a client name; address and note are optional. See the documentationWritev0.0.2 -
Create Invoice
actionCreates a new invoice for a client in a Clockify workspace. Set Import From and Import To to bill tracked time: the invoice is created and the time entries logged in that period are imported as line items. Leave both blank to create an empty invoice. The invoice is created first and the tracked time is imported in a second request, so if the import fails the invoice still exists and can be removed with Delete Invoice or retried. Chain Update Invoice afterwards to set the subject, note or status. See the documentationWritev0.0.2 -
Create Project
actionCreates a new project in a Clockify workspace. Only the name is required; link the project to a client so its time can be invoiced, and set an hourly rate to make tracked time billable at that rate. Use Add Task To Project afterwards to add the tasks that time entries are logged against. See the documentationWritev0.0.5 -
Create Tag
actionCreates a new tag in a Clockify workspace. Requires the tag name. See the documentationWritev0.0.2 -
Delete Client
actionDeletes a client from a Clockify workspace. This cannot be undone. Clockify only allows deleting archived clients, so this action archives the client first if it isn't already. Use List Clients to find the ID of the client to delete. See the documentation and the update endpoint used for the archive stepWritev0.0.2 -
Delete Invoice
actionDeletes an invoice from a Clockify workspace. This cannot be undone. Use List Invoices to find the ID of the invoice to delete. See the documentationWritev0.0.2 -
Delete Tag
actionDeletes a tag from a Clockify workspace. This cannot be undone. Use List Tags to find the ID of the tag to delete. See the documentationWritev0.0.2 -
Get Time Entry Report
actionGet a time entry report. See the documentationRead-onlyv0.0.3 -
List Clients
actionList all clients in a Clockify workspace. Optionally filter by a substring of the client name or by archived status, and page through results with the page and page size inputs. See the documentationRead-onlyv0.0.2 -
List Invoices
actionReturns a single page of invoices in a Clockify workspace. Use thepageandpageSizeinputs to page through results. See the documentationRead-onlyv0.0.2 -
List Projects
actionList all projects in a Clockify workspace. See the documentationRead-onlyv0.0.3 -
List Tags
actionList all tags in a Clockify workspace. Optionally filter by a substring of the tag name, and page through results with the page and page size inputs. See the documentationRead-onlyv0.0.2 -
List Tasks
actionReturns a single page of tasks in a Clockify project, optionally filtered by a substring of the task name or by active status. Tasks belong to a project, so set both Workspace and Project — use List Projects to find the project ID. Use thePageandPage Sizeinputs to page through results. See the documentationRead-onlyv0.0.3 -
List Time Entries
actionList all time entries in a Clockify workspace. See the documentationRead-onlyv0.0.3 -
List Workspace Options
actionLists the workspaces the authenticated user belongs to, as{ label, value }pairs wherevalueis the workspace ID that every other Clockify action requires. Call this first when you don't already know which workspace to operate on. See the documentationRead-onlyv0.0.3 -
Log Time Entry
actionLogs a completed time entry with an explicit start and end time in Clockify — use this to backfill time already tracked elsewhere. Use Start Timer instead if you want to start a running timer with no end time yet. See the documentation, or logging for another member whenUseris setWritev0.0.2 -
Start Timer
actionStarts a running timer for a new time entry in Clockify — no end time is set. Use Stop Timer to stop it, or Update Time Entry to set an end time later. Use Log Time Entry instead if you already know both the start and end time. See the documentation, or starting for another member whenUseris setWritev0.0.2 -
Stop Timer
actionStops the currently running timer for a workspace member in Clockify, setting its end time. See the documentationWritev0.0.2 -
Update Client
actionUpdates an existing client in a Clockify workspace. Set only the fields you want to change — Clockify's update endpoint replaces the whole client, so this action fetches the current record first and merges your changes into it. Use List Clients to find the ID of the client to update. See the documentationWritev0.0.2 -
Update Invoice
actionUpdates an existing invoice in a Clockify workspace. Clockify's update endpoint replaces the entire invoice, so this action first fetches the current invoice and merges your changes into it — fields you don't set are left unchanged, including the invoice's tax and discount percentages, which this action preserves but cannot edit.Statusis applied through a separate endpoint, so it is sent as a second request after the field changes are saved, and setting it alone skips the replace entirely. Clockify offers no transaction across the two endpoints: if the status request fails, the field changes have already been applied. Line items and imported time cannot be set through Clockify's public API. Use List Invoices to find the ID of the invoice to update. See the documentation and the status endpointWritev0.0.2 -
Update Tag
actionUpdates the name of an existing tag in a Clockify workspace. Use List Tags to find the ID of the tag to update. See the documentationWritev0.0.2 -
Update Time Entry
actionUpdates an existing time entry in Clockify — change its start/end time, project, task, description, billable status, or tags. Clockify's update endpoint replaces the entire entry, so this action first fetches the current entry and merges your changes into it before saving — fields you don't set are left unchanged. Use List Time Entries to find the ID of the entry to update. See the documentationWritev0.0.2
EVENTS
Clockify triggers
Event sources your backend can deploy for users and receive through a webhook.
No Clockify triggers are available yet.
MULTI-APP
Use Clockify with other popular apps
Most products don't stop at one integration. Pair Clockify with the other apps your users rely on, and ship use cases that span both.
- App slug
- clockify
- Authentication
- API key
- Categories
- Productivity
- Actions
- 24
- Triggers
- 0
- API proxy
- Available