Time Tracking
Public API

Clocks an employee out at the current server time, closing the employee's open clock entry (end set, endSource: USER). Proxy clock-out 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-outs

Request

Request body

employeeIdinteger required

The employee to clock out.

Example request

{
  "employeeId": 384,
  "clockOutLocation": {
    "latitude": 40.7608,
    "longitude": -111.891,
    "accuracy": 5,
    "address": "123 Main St"
  }
}

Response

Successfully clocked out. Returns the closed 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