Time Tracking
Public API

Create Time Tracking Project

Changed on

Creates a time tracking project. If a deleted project with the same name exists, that project is restored and updated with the supplied values instead of a new project being created; the response returns the restored project's existing ID. hasTasks in the response is set automatically based on whether tasks were supplied and cannot be set directly on create. Created tasks are not embedded; retrieve them with List Time Tracking Project Tasks (list-project-tasks).

OAuth Scopes: time_tracking:project.write

post/api/v1/time-tracking/projects

Request

Request body

namestring required
billableboolean
includeInPayrollboolean
allEmployeesAssignedboolean

If true, every time-tracked employee is assigned to the project. Ignored when employeeIds is provided.

employeeIdsinteger[]

Internal employee IDs to assign. Use Employees > List Employees (list-employees) to find IDs. That operation returns IDs as strings; supply their numeric values here as JSON integers because string values are rejected. When provided, these IDs take precedence over allEmployeesAssigned.

Example request

{
  "name": "Project A",
  "billable": true,
  "includeInPayroll": true,
  "employeeIds": [
    1,
    2,
    3
  ],
  "tasks": [
    {
      "name": "Task A",
      "billable": true
    }
  ]
}

Response

The created or restored project resource. Created tasks are not embedded.

idinteger

The ID of the project.

namestring

The name of the project.

billableboolean

Whether or not the project is billable.

includeInPayrollboolean

Whether hours logged to this project will show in payroll and payroll reports.

allEmployeesAssignedboolean

Whether all time & attendance employees are assigned or not.

archivedboolean

Whether or not the project is archived.

hasTasksboolean

Whether time is logged to tasks under the project (true) or directly to the project (false).

createdAtstring date-time nullable

ISO 8601 timestamp when the project was created.

updatedAtstring date-time nullable

ISO 8601 timestamp when the project was last updated.

deletedAtstring date-time nullable

ISO 8601 timestamp when the project was deleted.

employeeIdsinteger[]

Internal employee IDs assigned to the project. The same identifier is named id by Employees > Get Employee (get-employee), employeeId by Employees > List Employees (list-employees), and eeid by the employee dataset. Do not use Employee # (employeeNumber), which may resolve to a different employee.

Example response

{
  "id": 1,
  "name": "Project A",
  "allEmployeesAssigned": true,
  "hasTasks": true,
  "createdAt": "2025-10-15T16:00:00Z",
  "updatedAt": "2025-10-15T16:00:00Z",
  "deletedAt": "2025-10-15T16:00:00Z",
  "employeeIds": [
    1,
    2,
    3
  ]
}

Changes

    • breaking

      removed the media type application/json for the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • warning

      removed the optional property from the response with the status

    • info

      api operation id create-project removed and replaced with create-time-tracking-project

    • info

      the endpoint scheme security basic was removed from the API

    • info

      added the non-success response with the status

    • info

      removed the non-success response with the status

    • info

      the response property became required for the status

    • info

      the response property became required for the status

    • info

      the response property became required for the status

    • info

      the response property became required for the status

    • info

      the response property became required for the status

    • info

      the response property became required for the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status