---
title: "Get Timesheet"
method: GET
path: "/api/v1/time-tracking/timesheets/{id}"
tags: ["Time Tracking", "Public API"]
---

# Get Timesheet

`GET /api/v1/time-tracking/timesheets/{id}`

## Request

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

Retrieves a single timesheet by its ID. The `status` is derived at read time (`OPEN`, `PENDING_APPROVAL`, or `APPROVED`) and `type` is returned in `UPPER_SNAKE_CASE` (`SINGLE`, `CLOCK`, `MULTIPLE`, or `HOUR`). Timesheets for pay periods that have not started yet return 404.

OAuth Scopes: time_tracking:timesheets

## Path parameters

- `id` integer, required

## Response `200`

Successfully retrieved the timesheet.

- TimeTrackingTimesheetV1: A pay period's time data for an employee.
  - `id` integer: Identifier for the timesheet.
  - `employeeId` integer: The employee this timesheet belongs to.
  - `type` 'SINGLE' | 'CLOCK' | 'MULTIPLE' | 'HOUR': Tracking method snapshotted from the configuration at period start.
  - `startDate` string, date: First date of the pay period (inclusive).
  - `endDate` string, date: Last date of the pay period (inclusive).
  - `status` 'OPEN' | 'PENDING_APPROVAL' | 'APPROVED': Derived approval state.
  - `totalHours` number, float: Sum of all hours across regular, overtime, holiday, and approved PTO.
  - `overtimeHours` number, float: Subset of totalHours that falls into the overtime rate bucket.
  - `approvedBy` integer, nullable: The user who approved the timesheet. Null until approved.
  - `approvedAt` string, date-time, nullable: When the timesheet was approved. Null until approved.
  - `createdAt` string, date-time: When the timesheet record was created.
  - `updatedAt` string, date-time: When the timesheet was last modified.
  - `hoursLastChangedAt` string, date-time: When the timesheet's hours were last changed. Send this value back as the approval request's `lastChangedAt`. Distinct from `updatedAt` because hours are stored separately from the timesheet row.

## Other responses

- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `404`: Timesheet not found, or for a future pay period.
- `422`: The provided timesheet ID is not a valid positive integer.

## Changes

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

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