Time Tracking
Public API

Create Time Tracking Import

Changed on

Creates a time tracking import from an uploaded CSV. The file is parsed, every row is validated and auto-corrected, and the import is returned in DRAFT so the rows can be reviewed before it is executed.

OAuth Scopes: time_tracking:imports.write

post/api/v1/time-tracking/imports

Request

Request body multipart/form-data

filestring binary required

The CSV of hours to import. Must have a .csv extension, be UTF-8 encoded without a byte order mark, and contain a header row plus at least one data row.

columnMappingstring

JSON object mapping BambooHR field names to zero-indexed CSV column positions, for example {"employeeNumber":0,"dateWorked":1,"rateType":3,"hoursWorked":4}. Must include employeeNumber, dateWorked, rateType, and hoursWorked. Omit it to have the columns detected from the CSV header.

Example request

{
  "columnMapping": "{\"employeeNumber\":0,\"dateWorked\":1,\"payRate\":2,\"rateType\":3,\"hoursWorked\":4}"
}

Response

The import was created.

idinteger

Identifier for the import.

status'DRAFT' | 'COMPLETE' | 'DELETED'

Where the import is in its lifecycle. DRAFT imports have not been executed yet.

fileSizeinteger

Size of the stored file in bytes.

rowCountinteger

Total number of data rows parsed out of the file.

errorRowCountinteger

Number of rows currently failing validation.

columnMappingobject

BambooHR field name to zero-indexed CSV column position. Unmapped optional fields are omitted.

createdAtstring date-time

When the import was created.

updatedAtstring date-time nullable

When the import was last modified. Null if it has not been modified since creation.

completedAtstring date-time nullable

When the import was executed. Null while DRAFT, and for imports completed before completion times were recorded.

deletedAtstring date-time nullable

When the import was soft-deleted. Null for active imports.

Example response

{
  "id": 77,
  "status": "DRAFT",
  "fileSize": 721,
  "rowCount": 25,
  "errorRowCount": 3,
  "columnMapping": {
    "employeeNumber": 0,
    "dateWorked": 1,
    "payRate": 2,
    "rateType": 3,
    "hoursWorked": 4
  },
  "createdAt": "2026-05-12T22:13:26Z"
}

Changes