---
title: "Create Hour Entry"
method: POST
path: "/api/v1/time-tracking/hour-entries"
tags: ["Time Tracking", "Public API"]
---

# Create Hour Entry

`POST /api/v1/time-tracking/hour-entries`

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/time-tracking/hour-entries`
- Auth: one of:
  - HTTP basic
  - OAuth 2
    - Authorization code: `/authorize.php`
    - Token URL: `/token.php` scopes: `time_tracking:timesheets.write`
- TypeScript: <https://skmtc.dev/bamboohr/apis/bamboohr-api/docs/api/v1/time-tracking/hour-entries/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new time tracking hour entry.

OAuth Scopes: time_tracking:timesheets.write

## Request body

- HourEntryCreateHourEntryV1: Request body for creating a time tracking hour entry.
  - `employeeId` integer, required: The employee who owns the entry.
  - `date` string, date, required: Calendar date the hours are attributed to.
  - `hours` number, float, required: Hours worked on this date. Must be greater than zero.
  - `note` string, nullable: Free-text note describing the work.
  - `projectId` integer, nullable: Project the hours were logged against.
  - `taskId` integer, nullable: Task within the project.

## Response `201`

Hour entry created successfully.

- TimeTrackingHourEntryV1: A date and number of hours worked, rolled up to a timesheet.
  - `id` integer: Identifier for the hour entry.
  - `employeeId` integer: The employee who owns the entry.
  - `timesheetId` integer: The timesheet (pay period) this entry rolls up to.
  - `date` string, date: Calendar date the hours are attributed to.
  - `hours` number, float: Hours worked on this date for the given project/task.
  - `note` string, nullable: Free-text note describing the work.
  - `projectId` integer, nullable: Project the hours were logged against.
  - `taskId` integer, nullable: Task within the project.
  - `createdAt` string, date-time: When the entry was created.
  - `updatedAt` string, date-time: When the entry was last modified.

## Other responses

- `400`: Malformed request body.
- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `404`: No timesheet covering the requested date exists for the employee, or the employee does not exist.
- `409`: Conflict. Invalid timesheet type or an entry already exists for the date on a single-entry timesheet.
- `422`: Validation error (e.g., missing required fields, invalid date, hours less than or equal to zero).

## Changes

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

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