---
title: "Update Time Tracking Project"
method: PATCH
path: "/api/v1/time-tracking/projects/{id}"
tags: ["Time Tracking", "Public API"]
---

# Update Time Tracking Project

`PATCH /api/v1/time-tracking/projects/{id}`

Partially updates a time tracking project identified by its ID. Only fields provided in the request body are updated; omitted fields are left unchanged.

OAuth Scopes: time_tracking:project.write

## Path parameters

- `id` integer, required

## Request body

- ProjectUpdateTimeTrackingProjectV1 — Data contract for partially updating a time tracking project. All fields are optional; only fields present in the request body will be updated.
  - `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.
  - `employeeIds` integer[] — Array of employee IDs to assign to the project. Replaces the current assignment list when present; an empty array clears all assignments.
  - `hasTasks` boolean — Toggles whether time is logged directly to the project (false) or to specific tasks on the project (true). Setting to true requires the project to already have at least one active task; setting to false leaves existing tasks unchanged.

## Response `200`

Successfully updated the project.

- 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.
- `404` — Project not found.
- `409` — A project with the supplied name already exists.
- `422` — Validation error (e.g., invalid `projectId`, no fields provided, invalid types, or setting `hasTasks=true` on a project with no active tasks).

---

[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)
