---
title: "Update Time Tracking Import Row"
method: PATCH
path: "/api/v1/time-tracking/imports/{id}/rows/{rowId}"
tags: ["Time Tracking", "Public API"]
---

# Update Time Tracking Import Row

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

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/time-tracking/imports/{id}/rows/{rowId}`
- Auth: one of:
  - HTTP basic
  - OAuth 2
    - Authorization code: `/authorize.php`
    - Token URL: `/token.php` scopes: `time_tracking:imports.write`
- TypeScript: <https://skmtc.dev/bamboohr/apis/bamboohr-api/docs/api/v1/time-tracking/imports/:id/rows/:rowId/patch.ts> (a function with typed inputs; its response is checked against the schema)

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

## Path parameters

- `id` integer, required
- `rowId` integer, required

## Request body

- TimeTrackingUpdateTimeTrackingImportRowV1: JSON Merge Patch body for updating one row of a time tracking import. Only the fields present are applied; `id`, `importId`, `rowNumber`, and `timeTrackingId` are read-only, and any other property is rejected. Once the parent import is `COMPLETE`, `hoursWorked` is the only property that may be sent.
  - `employeeNumber` string: Employee number the hours belong to.
  - `dateWorked` string: Date the hours were worked, as `YYYY-MM-DD`.
  - `hoursWorked` string: Hours worked, to at most four decimal places.
  - `rateType` 'REGULAR' | 'OVERTIME' | 'DOUBLE_TIME': How the hours are paid.
  - `payRate` string, nullable: Hourly rate the hours are paid at.
  - `payCode` string, nullable: Pay code applied to the hours.
  - `projectName` string, nullable: Project the hours are tracked against.
  - `taskName` string, nullable: Task the hours are tracked against.
  - `shiftDifferentialName` string, nullable: Shift differential applied to the hours.
  - `holidayName` string, nullable: Company holiday the hours are attributed to.
  - `qualifiedOvertimeHours` string, nullable: Hours that qualify for overtime.

## Response `200`

The row as it stands after the update.

- TimeTrackingTimeTrackingImportRowV1: One row of a time tracking import: the values parsed out of the file, plus what failed validation and what was auto-corrected.
  - `id` integer: Identifier for the row.
  - `importId` integer: Identifier of the import the row belongs to.
  - `rowNumber` integer: Position of the row in the uploaded file, counting the data rows from 1.
  - `employeeNumber` string: Employee number the hours belong to.
  - `dateWorked` string: Date the hours were worked, as `YYYY-MM-DD`. A row failing date validation keeps the value the file supplied.
  - `hoursWorked` string: 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.
  - `payRate` string, nullable: Hourly rate the hours are paid at.
  - `payCode` string, nullable: Pay code applied to the hours.
  - `projectName` string, nullable: Project the hours are tracked against.
  - `taskName` string, nullable: Task the hours are tracked against.
  - `shiftDifferentialName` string, nullable: Shift differential applied to the hours.
  - `holidayName` string, nullable: Company holiday the hours are attributed to.
  - `qualifiedOvertimeHours` string, nullable: Hours that qualify for overtime, to at most four decimal places.
  - `errors` object, nullable: Validation failures keyed by the field that failed, or null when the row is valid.
  - `corrections` object, 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.
  - `timeTrackingId` string, nullable: Identifier of the time tracking record the row created. Null until the import is executed.

## Other responses

- `400`: Malformed request body. The body is not a JSON object.
- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `404`: The import or the row was not found, the import is soft-deleted, or the row belongs to a different import.
- `422`: The body is empty, names an unknown or read-only field, carries a value of the wrong type, edits a field the import's status has frozen, or leaves a completed import's row invalid.

## Changes

- **2026-11-03** `922fc15f43a7`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bamboohr/apis/bamboohr-api/changes/api/v1/time-tracking/imports/:id/rows/:rowId/patch.md)

---

[API](https://skmtc.dev/bamboohr/apis/bamboohr-api.md) - [All operations](https://skmtc.dev/bamboohr/apis/bamboohr-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bamboohr/apis/bamboohr-api/revisions/922fc15f43a7?raw)
