canonical: https://jentic.com/apis/app.clicktime.com/clicktime

# ClickTime API

Jentic publishes the only available OpenAPI specification for ClickTime API, keeping it validated and agent-ready. ClickTime is a time-tracking, expense, and project-budgeting platform used by professional services firms to bill clients accurately and forecast capacity. The 1.3 REST surface exposes time entries, expenses, jobs, tasks, clients, users, and the company record so integrators can sync ClickTime data into accounting, project management, or analytics tooling. Authentication uses a bearer token derived from a ClickTime API key.

## For AI agents

Log time entries, manage expenses, and read jobs, tasks, clients, and users in ClickTime via a versioned bearer-authenticated REST API.

## Scope

Does not handle creating jobs, tasks, or clients, running invoicing, or executing payroll - use for time entries, expenses, and reading workspace metadata only.

## Capabilities

- Create, retrieve, update, and delete time entries against /companies/{companyId}/users/{userId}/timeentries
- Log expenses for a user via POST /companies/{companyId}/users/{userId}/expenses
- List a company's jobs, tasks, and clients to drive project picklists
- Read user records and the current authenticated user via GET /me
- Pull the ClickTime company record for tenant-aware integrations

## Use cases

### Project Time Tracking from External Tools

Engineering and consulting teams log time from inside Jira, Asana, or Slack rather than the ClickTime UI, so timesheets stay accurate without context switching. POST /companies/{companyId}/users/{userId}/timeentries records the entry against the right job and task, while GET /companies/{companyId}/jobs and GET /companies/{companyId}/tasks back the picklist that the user sees.

Example prompt: Call POST /companies/{companyId}/users/{userId}/timeentries with the userId, jobId, taskId, hours, and date for the work done.

### Expense Report Submission

Finance teams replace email attachments with a structured expense submission flow that posts directly to ClickTime. POST /companies/{companyId}/users/{userId}/expenses creates the entry against the user, and GET /companies/{companyId}/users/{userId}/expenses lists submitted items so a manager can review the pending queue.

Example prompt: Submit an expense via POST /companies/{companyId}/users/{userId}/expenses with the amount, category, and date for an out-of-pocket reimbursement.

### Project Profitability Reporting

Operations and finance teams pull time entries and combine them with billing rates to produce per-project margin reports. Iterating GET /companies/{companyId}/users with a per-user GET /companies/{companyId}/users/{userId}/timeentries call yields the timesheet feed; jobs and tasks expose the project context needed to attribute the time to the right engagement.

Example prompt: Iterate users via GET /companies/{companyId}/users and pull each user's time entries via GET /companies/{companyId}/users/{userId}/timeentries for the reporting window.

### AI Agent Time-Tracking Assistant

An AI assistant that helps a consultant or engineer summarise their week and post timesheets uses Jentic to call ClickTime without managing the bearer token directly. Jentic exposes the time-entry, job, and task endpoints by intent, validates inputs against the schema, and isolates credentials.

Example prompt: Search Jentic for 'log a time entry to ClickTime', load the schema for POST /companies/{companyId}/users/{userId}/timeentries, and execute it with the user's hours for each job for the day.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /me | Get the currently authenticated user. |
| POST | /companies/{companyId}/users/{userId}/timeentries | Create a time entry for a user. |
| GET | /companies/{companyId}/users/{userId}/timeentries | List a user's time entries. |
| PUT | /companies/{companyId}/users/{userId}/timeentries/{timeEntryId} | Update an existing time entry. |
| DELETE | /companies/{companyId}/users/{userId}/timeentries/{timeEntryId} | Delete a time entry. |
| POST | /companies/{companyId}/users/{userId}/expenses | Create an expense entry for a user. |
| GET | /companies/{companyId}/jobs | List jobs for the company. |
| GET | /companies/{companyId}/tasks | List tasks for the company. |

## Key resources

- **Time Entries** — Create, list, retrieve, update, and delete time entries against jobs and tasks for a user.
- **Expenses** — List and create expense entries for a user under the user-scoped path.
- **Jobs** — List and retrieve jobs at the company level to drive project picklists.
- **Tasks** — List and retrieve tasks at the company level.
- **Clients** — List clients in the ClickTime workspace.
- **Users** — List users, retrieve a single user, and fetch the currently authenticated user via /me.
- **Company** — Retrieve the ClickTime company record for the authenticated workspace.

## Why Jentic

- **Setup:** Wiring ClickTime by hand means learning its bearer auth and threading companyId and userId through every time-entry and expense path yourself. Through Jentic you install once, import the ClickTime API from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** ClickTime puts the company and user ids in the URL path (/companies/{companyId}/users/{userId}/timeentries/...), so a rule can pin your agent to one user's time entries and expenses in one company. You choose the operations it may call, so destructive ones like deleting a time entry are not included unless you add them.
- **Credential handling:** Your ClickTime bearer token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'log a time entry' or 'list all jobs', and Jentic returns the matching ClickTime operation with its path and body schema so the agent calls the right endpoint without reading the ClickTime help reference.

## Related APIs

- **Toggl API** — Lightweight time-tracking API focused on simple start/stop entries.
- **Everhour API** — Time tracking API with deeper integrations into Asana, Trello, and Jira out of the box.
- **Timely API** — Automatic time-tracking API that captures activity passively rather than via manual entries.
- **Factorial HR API** — Sync ClickTime users and time data into the HR system of record for payroll-ready summaries.

## FAQ

### Why is there no official OpenAPI spec for ClickTime API?

ClickTime publishes its developer reference as HTML at app.clicktime.com/api/1.3/help. Jentic generates and maintains this spec so that AI agents and developers can call ClickTime API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the ClickTime API use?

ClickTime uses HTTP Bearer authentication - generate an API key from your ClickTime profile and pass it as Authorization: Bearer <token>. Through Jentic the token is stored encrypted in the vault and injected at call time, so it never enters the agent's prompt context.

### Can I create new jobs or tasks via the API?

Not in this version. The 1.3 surface exposes GET-only endpoints for /companies/{companyId}/jobs, /companies/{companyId}/tasks, and /companies/{companyId}/clients - useful for picklists but not for provisioning. Job and task creation is performed inside the ClickTime workspace by an administrator.

### What are the rate limits for the ClickTime API?

Rate limits are not declared in the OpenAPI spec. ClickTime applies plan-level throttles that surface as 429 responses; treat batch reporting jobs as paginated and cache the results of jobs, tasks, and clients calls rather than re-fetching on every page load.

### How do I post a time entry through Jentic?

Run pip install jentic, then search Jentic for 'log a time entry', load the schema for POST /companies/{companyId}/users/{userId}/timeentries, and execute it with the userId, jobId, taskId, hours, and date. Jentic injects the bearer token from your stored ClickTime credentials. Run it through Jentic One, the self-hosted execution layer.

### Can the API tell me who the current user is?

Yes. GET /me returns the currently authenticated ClickTime user, which is useful when the same bearer token is shared across tools and the application needs to attribute time to the person who connected the account.

### Can I limit what my agent is allowed to do with the ClickTime API?

Yes. Because you run Jentic One yourself, your own rules decide which ClickTime operations and credentials the agent may use. Since ClickTime carries the company and user ids in the URL path, like /companies/{companyId}/users/{userId}/timeentries, you can pin the agent to a single user's time entries and expenses within one company. You also choose the operations it may call, so a destructive one like DELETE /companies/{companyId}/users/{userId}/timeentries/{timeEntryId} is left out unless you explicitly add it.
