---
title: "Create Time Tracking Import"
method: POST
path: "/api/v1/time-tracking/imports"
tags: ["Time Tracking", "Public API"]
---

# Create Time Tracking Import

`POST /api/v1/time-tracking/imports`

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/time-tracking/imports`
- 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/post.ts> (a function with typed inputs; its response is checked against the schema)

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

## Request body `multipart/form-data`

- object
  - `file` string, 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.
  - `columnMapping` string: 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.

## Response `201`

The import was created.

- TimeTrackingTimeTrackingImportV1: A time tracking import: an uploaded CSV of hours, its column mapping, and its row counts.
  - `id` integer: Identifier for the import.
  - `status` 'DRAFT' | 'COMPLETE' | 'DELETED': Where the import is in its lifecycle. `DRAFT` imports have not been executed yet.
  - `fileSize` integer: Size of the stored file in bytes.
  - `rowCount` integer: Total number of data rows parsed out of the file.
  - `errorRowCount` integer: Number of rows currently failing validation.
  - `columnMapping` object: BambooHR field name to zero-indexed CSV column position. Unmapped optional fields are omitted.
  - `createdAt` string, date-time: When the import was created.
  - `updatedAt` string, date-time, nullable: When the import was last modified. Null if it has not been modified since creation.
  - `completedAt` string, date-time, nullable: When the import was executed. Null while `DRAFT`, and for imports completed before completion times were recorded.
  - `deletedAt` string, date-time, nullable: When the import was soft-deleted. Null for active imports.

## Other responses

- `400`: The request is not `multipart/form-data`, or the `file` part is missing or malformed.
- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `413`: The file is larger than 20 MB.
- `415`: The file does not have a `.csv` extension.
- `422`: The file is not UTF-8, carries a byte order mark, has no header row with at least four columns, or has no data rows; or `columnMapping` is not a JSON object of known field names, omits a required field, or names a column position the file does not have; or `columnMapping` was omitted and the required columns could not be detected.

## Changes

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

[Operation history](https://skmtc.dev/bamboohr/apis/bamboohr-api/changes/api/v1/time-tracking/imports/post.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)
