---
title: "Create or Update Timesheet Hour Entries"
method: POST
path: "/api/v1/time_tracking/hour_entries/store"
tags: ["Time Tracking", "Public API"]
---

# Create or Update Timesheet Hour Entries

`POST /api/v1/time_tracking/hour_entries/store`

Creates or updates timesheet hour entries in bulk. Entries with an existing ID are updated; entries without an ID are created.

OAuth Scopes: time_tracking.write

## Request body

- HourEntriesRequestSchema — Schema for timesheet hour entries request
  - `hours` HourEntrySchema[], required — Array of hour entries to add or update
    - `employeeId` integer — Unique identifier for the employee
    - `date` string, date — Date for the timesheet entry. Must be in YYYY-MM-DD format
    - `hours` number, float — Hours worked for this timesheet entry
    - `id` integer — The ID of an existing timesheet entry. This can be specified to edit an existing entry
    - `projectId` integer — The ID of the project to associate with the timesheet entry
    - `taskId` integer — The ID of the task to associate with the timesheet entry
    - `note` string — Optional note to associate with the timesheet entry

## Response `201`

Entries created or updated successfully. Returns the resulting hour entry details.

- TimesheetEntryInfoApiTransformer[] — Class TimesheetEntryInfoApiTransformer
  - `id` integer — Timesheet entry ID
  - `employeeId` integer — Employee ID
  - `type` string — Entry type
  - `date` string, date — Date of the timesheet
  - `start` string, date-time, nullable — Start time
  - `end` string, date-time, nullable — End time
  - `timezone` string, nullable — Timezone
  - `hours` number, float, nullable — Hours worked
  - `note` string, nullable — Note
  - `projectInfo` ProjectInfoApiTransformer — Project information data representation
    - `project` object — Project information
      - `id` integer — Project ID
      - `name` string — Project name
    - `task` object, nullable — Task information
      - `id` integer — Task ID
      - `name` string — Task name
  - `breakInfo` object, nullable — Break information
    - `id` integer — Break ID
    - `name` string — Break name

## Other responses

- `400` — Bad request parameters - invalid hours, project, task, or note.
- `401` — Unauthorized. Invalid API credentials.
- `403` — Forbidden. Insufficient user permissions or API access is not turned on.
- `404` — Employee or timesheet entry not found.
- `406` — Request not acceptable.
- `409` — Timesheet type conflict.
- `412` — Precondition failed - invalid company configuration or timezone.
- `500` — Internal server error.

---

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