Time Tracking
Public API

Clocks an employee in at the current server time, creating an open clock entry (end: null). Proxy clock-in for a different employee requires time_tracking:timesheets.write scope plus permission to manage the target employee's time.

OAuth Scopes: time_tracking:timesheets.write

post/api/v1/time-tracking/clock-ins

Request

Request body

employeeIdinteger required

The employee to clock in.

timezonestring required

IANA timezone name for the clock-in.

Example request

{
  "employeeId": 384,
  "timezone": "America/Denver",
  "clockInLocation": {
    "latitude": 40.7608,
    "longitude": -111.891,
    "accuracy": 5,
    "address": "123 Main St"
  }
}

Response

Successfully clocked in. Returns the new open clock entry.

idinteger

Identifier for the clock entry.

employeeIdinteger

The employee who owns the entry.

timesheetIdinteger

The timesheet (pay period) this entry rolls up to.

datestring date

Calendar date the entry is attributed to (in the entry's timezone).

startstring date-time

Clock-in timestamp, ISO 8601 with the offset of the entry's timezone.

endstring date-time nullable

Clock-out timestamp. Null while the employee is actively clocked in.

timezonestring

IANA timezone name under which start / end were recorded.

hoursnumber float

Computed elapsed hours between start and end. Zero while the entry is open.

notestring nullable

Free-text note attached to the entry.

projectIdinteger nullable

Project the time was logged against.

taskIdinteger nullable

Task within the project.

schedulingShiftIdstring uuid nullable

The scheduled shift this entry was worked against.

startSource'USER' | 'SYSTEM' nullable

How start was set: USER or SYSTEM. Read-only; server-set.

endSource'USER' | 'SYSTEM' nullable

How end was set: USER or SYSTEM. Read-only; server-set.

clockedInByinteger nullable

The employee id of the actor who recorded clock-in. Differs from employeeId on proxy clock-in. Null when the actor is not an employee.

clockedOutByinteger nullable

The employee id of the actor who recorded clock-out. Null when the actor is not an employee.

createdAtstring date-time

When the entry was created.

updatedAtstring date-time

When the entry was last modified.

Example response

{
  "id": 58231,
  "employeeId": 384,
  "timesheetId": 1042,
  "date": "2026-03-17",
  "start": "2026-03-17T08:00:00-07:00",
  "end": "2026-03-17T17:00:00-07:00",
  "timezone": "America/Denver",
  "hours": 9,
  "projectId": 19,
  "taskId": 47,
  "clockInLocation": {
    "latitude": 40.7608,
    "longitude": -111.891,
    "accuracy": 5,
    "address": "123 Main St, Lindon, UT"
  },
  "clockOutLocation": {
    "latitude": 40.7608,
    "longitude": -111.891,
    "accuracy": 5,
    "address": "123 Main St, Lindon, UT"
  },
  "schedulingShiftId": "9f4b3e2c-1a2d-4e5f-8b9c-1d2e3f4a5b6c",
  "startSource": "USER",
  "endSource": "USER",
  "clockedInBy": 42,
  "clockedOutBy": 42,
  "createdAt": "2026-03-17T08:00:00Z",
  "updatedAt": "2026-03-17T17:00:00Z"
}

Changes