Skip to content
TTrackTimer
API documentation

Get the active timer

View Markdown

Read the key owner’s current timer in the bound workspace.

GET /api/v1/timer

Required scope: timers:read

Returns the active timer only if it belongs to the key's workspace. Requires bearer authentication and timers:read. No query parameters or body.

curl "https://www.tracktimer.app/api/v1/timer" \
  --header "Authorization: Bearer $TRACKTIMER_API_KEY"

Response — 200

timer is null or an object with these fields:

  • id: UUID of this timer/time entry.
  • clientId, projectId: client and project UUIDs.
  • clientName, projectName: nonempty display names.
  • billable: boolean indicating whether the entry is billable.
  • note: string up to 500 characters, or null.
  • startedAt: ISO 8601 timestamp with timezone offset, normally UTC Z.
  • serverNow: server timestamp used for this response's elapsed calculation.
  • elapsedSeconds: nonnegative integer elapsed seconds as of serverNow.
  • payRateCents: nonnegative integer hourly pay rate in cents, snapshotted on the entry. This is not the client billing rate.
  • currency: always "USD".

Integer duration and pay-rate fields are bounded by 2,147,483,647.

{
  "timer": {
    "id": "33333333-3333-4333-8333-333333333333",
    "clientId": "11111111-1111-4111-8111-111111111111",
    "clientName": "Northstar",
    "projectId": "22222222-2222-4222-8222-222222222222",
    "projectName": "Website refresh",
    "billable": true,
    "note": "Homepage revisions",
    "startedAt": "2026-09-10T16:00:00.000Z",
    "serverNow": "2026-09-10T16:05:00.000Z",
    "elapsedSeconds": 300,
    "payRateCents": 5000,
    "currency": "USD"
  }
}

{"timer":null} means no active timer is visible in this workspace. The user can still have an active timer in another workspace.

Elapsed time is a server-calculated snapshot, not a live stream. Poll within the shared limit. Pay rate is the start-time snapshot; client billing rates and project margins are not exposed. See shared errors.