Time Tracking
Public API

Create Clock Entry

Changed on

Manually creates a time tracking clock entry (corrections, retroactive entry). Distinct from the real-time clock-in process resource. The parent daily entry and timesheet are resolved (and created if needed) from start + timezone; the entry is rejected with 409 when the resolved timesheet's type does not accept clock entries. start and end must fall on the same calendar day in the given timezone; an entry that would cross local midnight, including one ending at exactly 00:00 the next day, is rejected with 422. Submit one entry per day instead. Geolocation is persisted only when the employee's configuration has it enabled.

OAuth Scopes: time_tracking:timesheets.write

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

Request

Request body

employeeIdinteger required

The employee the clock entry belongs to.

startstring date-time required

Clock-in timestamp (ISO 8601).

endstring date-time required

Clock-out timestamp (ISO 8601). Must be after start and on the same calendar day as start in the given timezone; an end of exactly 00:00 the next day is rejected.

timezonestring required

IANA timezone identifier the times are recorded under.

notestring nullable

Free-text note attached to the entry.

projectIdinteger nullable

Project the time was logged against.

taskIdinteger nullable

Task within the project.

Example request

{
  "employeeId": 384,
  "start": "2026-03-17T08:00:00-07:00",
  "end": "2026-03-17T17:00:00-07:00",
  "timezone": "America/Denver",
  "note": "Forgot to clock in",
  "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"
  }
}

Response

Clock entry created successfully.

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