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

# Create Time Tracking Project

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

Creates a new time tracking project. Returns the newly created project resource on success.

OAuth Scopes: time_tracking:project.write

## Request body

- ProjectCreateTimeTrackingProjectV1 — Request body for creating a time tracking project.
  - `name` string, required
  - `billable` boolean
  - `includeInPayroll` boolean
  - `allEmployeesAssigned` boolean — If true, every time-tracked employee is assigned to the project. Ignored when `employeeIds` is provided.
  - `employeeIds` integer[] — Specific internal employee IDs to assign. Minimum 1 entry required when provided. Takes precedence over `allEmployeesAssigned`.
  - `tasks` object[] — Tasks to create alongside the project. Minimum 1 entry required when provided.
    - `name` string, required
    - `billable` boolean

## Response `201`

Project created successfully.

- ProjectTimeTrackingProjectV1 — A time tracking project. Projects are organizational units used to classify hours worked.
  - `id` integer — The ID of the project.
  - `name` string — The name of the project.
  - `billable` boolean — Whether or not the project is billable.
  - `includeInPayroll` boolean — Whether hours logged to this project will show in payroll and payroll reports.
  - `allEmployeesAssigned` boolean — Whether all time & attendance employees are assigned or not.
  - `archived` boolean — Whether or not the project is archived.
  - `hasTasks` boolean — Whether time is logged to tasks under the project (true) or directly to the project (false).
  - `createdAt` string, date-time, nullable — ISO 8601 timestamp when the project was created.
  - `updatedAt` string, date-time, nullable — ISO 8601 timestamp when the project was last updated.
  - `deletedAt` string, date-time, nullable — ISO 8601 timestamp when the project was deleted.
  - `employeeIds` integer[] — Array of employeeIds assigned to the project.

## Other responses

- `400` — Malformed request body.
- `401` — Unauthorized. Missing or invalid authentication.
- `403` — Forbidden. Insufficient permissions.
- `409` — Conflict. A project with this name already exists.
- `422` — Validation error (e.g. missing `name`, invalid `employeeIds`, name too long).

---

[API](https://skmtc.net/bamboohr/apis/bamboohr-api.md) · [All operations](https://skmtc.net/bamboohr/apis/bamboohr-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bamboohr/bamboohr-api/revisions/19ebf391a399/schema)
