TempusLog API
Log time, start timers and pull reports from your own scripts and tools. Free, with a personal API key. For AI apps like Claude or ChatGPT, use MCP instead.
Authentication
- In TempusLog, open Settings, API keys, and create a key. Pick Read only or Read and write. Copy it: it's shown once.
- Send it with every request:
Authorization: Bearer tl_...
- Base URL:
https://tempuslog.com/api. JSON in and out. Times are ISO 8601 with an offset; dates areYYYY-MM-DD. - A key acts as you: it sees and changes only what you can in the app. Read only keys can only make GET requests.
- Keys can't manage your account, workspaces, team, keys or connected apps. Do that in the app.
- Up to 300 requests a minute per key. Delete a key in Settings and it stops working at once.
Endpoints
Paths are relative to https://tempuslog.com/api. {workspace} is a workspace id from /me.
| Method | Path | What it does |
|---|---|---|
GET | /me | You, your preferences and the workspaces you belong to (their ids). |
GET | /w/{workspace} | Workspace settings: name, week start, workday length. |
GET | /w/{workspace}/team | People in the workspace (owners, admins and project admins). |
GET | /w/{workspace}/track/projects | Projects you can log to, with their tasks. |
GET | /w/{workspace}/track/members | People whose time you can see and log. |
GET | /w/{workspace}/entries?from=YYYY-MM-DD&to=YYYY-MM-DD | Your time entries (add userId=... for someone else's, where allowed). Up to 62 days. |
GET | /w/{workspace}/entries/running | Your running timer, if any. |
POST | /w/{workspace}/entries | Start a timer or log time (see below). |
PATCH | /w/{workspace}/entries/{id} | Change an entry: description, projectId, taskId, tags, billable, startAt and endAt, or date and durationSeconds. |
POST | /w/{workspace}/entries/{id}/stop | Stop a running timer. |
DELETE | /w/{workspace}/entries/{id} | Delete an entry. |
GET | /w/{workspace}/reports?from=...&to=... | Report rows and totals. Filters: members, projects, clients, tasks (comma separated ids), tags (comma separated names), billable=yes|no, q (text). |
GET | /w/{workspace}/projects | Projects with clients, counts and your role. |
POST | /w/{workspace}/projects | Create a project (owners and admins): name, clientId, color, billableDefault. |
POST | /w/{workspace}/projects/{id}/tasks | Add a task (people who manage the project): name. |
GET | /w/{workspace}/clients | Clients. |
Examples
Log 1 hour 30 minutes on a project yesterday, no clock times:
curl -X POST https://tempuslog.com/api/w/$WS/entries \
-H "Authorization: Bearer $TEMPUSLOG_KEY" -H "Content-Type: application/json" \
-d '{"kind":"duration","date":"2026-10-05","durationSeconds":5400,
"projectId":"$PROJECT","description":"Design review"}'Log with start and end:
-d '{"kind":"timed","startAt":"2026-10-05T09:00:00+02:00",
"endAt":"2026-10-05T11:00:00+02:00","description":"Workshop"}'Start a timer (stops your running one):
-d '{"kind":"timer","description":"Support","projectId":"$PROJECT"}'Last week's report:
curl "https://tempuslog.com/api/w/$WS/reports?from=2026-09-28&to=2026-10-04" \ -H "Authorization: Bearer $TEMPUSLOG_KEY"
Other optional fields on new entries: taskId, tags (list of text), billable, and userId to log for someone else where the app allows it.
Errors and changes
- Errors come back as JSON with a
message: 400 bad input, 401 missing or wrong key, 403 not allowed, 404 not found (or not yours), 429 too many requests. - The API is new. We keep these endpoints stable and list any change on this page first.
- Questions or something missing? contact@mile.dev