API Reference
API Reference

/time-tracking/time-entries

Bulk creates complete time entries for one or more employees (max 500). Required scope: w_time_tracking.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
🚧

This endpoint uses the w_time_tracking scope, which must be enabled through the Integrations section found within the Settings menu.

This endpoint supports both user tokens and account tokens.

📘

Unlike the single-entry endpoint, bulk creation only supports complete entries where both clock_in_time and clock_out_time are provided for each item.

A maximum of 500 entries can be submitted per request.

Validation rules

  • Time format: ISO 8601 with a timezone designator — UTC (Z) or a numeric offset (e.g. 2024-09-27T09:00:00Z, 2024-09-27T11:00:00+02:00). Times are stored in UTC.
  • Seconds and milliseconds: Truncated to the start of the minute server-side.
  • Clock-out time: Must be greater than or equal to clock-in time, and on the same date as clock-in or exactly at the start of the next day in the employee's timezone.
  • Employee start date: Time entries prior to an employee's start date are not permitted.
  • Future entries: Clock-out time cannot be after the end of the current day in the employee's timezone.
  • Active clocks: Active clocks are treated as conflicting entries if they overlap with the new entry. Use override_overlapping: true to archive them automatically.

Response

Returns an array of the created entries. clock_in_time and clock_out_time are returned as ISO 8601 in UTC (with the Z suffix) — see GET /time-tracking/time-entries.

[
  {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "employee_id": "3fc9a811",
    "clock_in_time": "2024-01-15T09:00:00.000Z",
    "clock_out_time": "2024-01-15T17:30:00.000Z",
    "note": "Regular shift"
  },
  {
    "uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "employee_id": "4ad7b922",
    "clock_in_time": "2024-01-15T08:00:00.000Z",
    "clock_out_time": "2024-01-15T16:00:00.000Z",
    "note": null
  }
]

Error responses

StatusCodeDescription
400Invalid request body (e.g. invalid format, too many entries)
400timeEntry.bulkValidationFailedOne or more entries failed validation. See below for the error response format.

Validation error response

When validation fails for one or more entries, the response includes a structured errors array with details for each failed entry. Entries are processed as a transaction — if any entry fails, the entire request fails.

{
  "error": "Validation failed for one or more time entries.",
  "code": "timeEntry.bulkValidationFailed",
  "errors": [
    {
      "index": 0,
      "employee_id": "12345",
      "code": "clockIn.conflictingEntriesExist",
      "error": "There already exists an active clock."
    },
    {
      "index": 2,
      "employee_id": "67890",
      "code": "timeEntry.previousToEmployeeStartDateNotPermitted",
      "error": "Employees may not enter worked hours prior to their start date."
    }
  ]
}

Validation error codes

CodeDescription
employee.notExistsEmployee does not exist or is not active
timeTrackingPolicy.notAssignedEmployee does not have a time tracking policy assigned
timeTracking.erganiRestrictionThis operation is not available for Ergani-related time tracking
timeEntry.previousToEmployeeStartDateNotPermittedTime entry is prior to employee's start date
timeEntryCreate.futureDayNotPermittedEntries after the end of day (in employee's timezone) are not allowed
clockIn.conflictingEntriesExistCannot create entry when the employee already has an active clock
clockOut.isBeforeClockInClock-out time is before clock-in time
timeEntryCreate.conflictingEntriesExistOverlapping time entries exist (when override_overlapping is false)
timeTracking.lockErrorConcurrent modification error
Body Params
time_entries
array of objects
required

Array of time entry objects (max 500)

time_entries*
Responses

Language
Credentials
Header
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json