Time Tracking
Public API

Update Time Tracking Import Row

Changed on

Corrects one row of a time tracking import using JSON Merge Patch (RFC 7396) semantics: only the properties present in the body are applied and omitted properties are unchanged. The row is auto-corrected and re-validated afterwards, so the response carries its refreshed errors and corrections. While the import is DRAFT any data field may be corrected; once it is COMPLETE only hoursWorked may be sent, and the new value is carried through to the time tracking record the row created. Content-Type: application/merge-patch+json is preferred because it names those semantics, but application/json is also accepted.

OAuth Scopes: time_tracking:imports.write

patch/api/v1/time-tracking/imports/{id}/rows/{rowId}

Request

Path parameters

idinteger required

The import ID.

rowIdinteger required

The import row ID.

Request body

employeeNumberstring

Employee number the hours belong to.

dateWorkedstring

Date the hours were worked, as YYYY-MM-DD.

hoursWorkedstring

Hours worked, to at most four decimal places.

rateType'REGULAR' | 'OVERTIME' | 'DOUBLE_TIME'

How the hours are paid.

payRatestring nullable

Hourly rate the hours are paid at.

payCodestring nullable

Pay code applied to the hours.

projectNamestring nullable

Project the hours are tracked against.

taskNamestring nullable

Task the hours are tracked against.

shiftDifferentialNamestring nullable

Shift differential applied to the hours.

holidayNamestring nullable

Company holiday the hours are attributed to.

qualifiedOvertimeHoursstring nullable

Hours that qualify for overtime.

Example request

{
  "employeeNumber": "134",
  "dateWorked": "2026-05-11",
  "hoursWorked": "7.5",
  "rateType": "REGULAR",
  "payRate": "15.67",
  "payCode": "Holiday",
  "projectName": "Website Redesign",
  "taskName": "Copywriting",
  "shiftDifferentialName": "Night Shift",
  "holidayName": "Independence Day",
  "qualifiedOvertimeHours": "2.25"
}

Response

The row as it stands after the update.

idinteger

Identifier for the row.

importIdinteger

Identifier of the import the row belongs to.

rowNumberinteger

Position of the row in the uploaded file, counting the data rows from 1.

employeeNumberstring

Employee number the hours belong to.

dateWorkedstring

Date the hours were worked, as YYYY-MM-DD. A row failing date validation keeps the value the file supplied.

hoursWorkedstring

Hours worked, to at most four decimal places.

rateType'REGULAR' | 'OVERTIME' | 'DOUBLE_TIME' nullable

How the hours are paid. Null when the file supplied a value that is not a recognized rate type.

payRatestring nullable

Hourly rate the hours are paid at.

payCodestring nullable

Pay code applied to the hours.

projectNamestring nullable

Project the hours are tracked against.

taskNamestring nullable

Task the hours are tracked against.

shiftDifferentialNamestring nullable

Shift differential applied to the hours.

holidayNamestring nullable

Company holiday the hours are attributed to.

qualifiedOvertimeHoursstring nullable

Hours that qualify for overtime, to at most four decimal places.

errorsobject nullable

Validation failures keyed by the field that failed, or null when the row is valid.

correctionsobject nullable

Values the import corrected on the caller's behalf, keyed by field, or null when nothing was corrected. Each entry carries the value the file supplied and the corrections applied to it.

timeTrackingIdstring nullable

Identifier of the time tracking record the row created. Null until the import is executed.

Example response

{
  "id": 412,
  "importId": 77,
  "rowNumber": 3,
  "employeeNumber": "134",
  "dateWorked": "2026-05-11",
  "hoursWorked": "7.5",
  "rateType": "REGULAR",
  "payRate": "15.67",
  "payCode": "Holiday",
  "projectName": "Website Redesign",
  "taskName": "Copywriting",
  "shiftDifferentialName": "Night Shift",
  "holidayName": "Independence Day",
  "qualifiedOvertimeHours": "2.25",
  "errors": {
    "dateWorked": "invalidDateHoursWorked"
  },
  "corrections": {
    "hoursWorked": {
      "original": "7.00000",
      "corrections": [
        "hoursWorkedRounded"
      ]
    }
  },
  "timeTrackingId": "import_5f2b1c0d9a8e7f6a5b4c3d2e1f0a9b"
}

Changes