---
title: "List Timesheets"
method: GET
path: "/api/v1/time-tracking/timesheets"
tags: ["Time Tracking", "Public API"]
---

# List Timesheets

`GET /api/v1/time-tracking/timesheets`

## Request

- Base URL: `https://companySubDomain.bamboohr.com`
- URL: `https://companySubDomain.bamboohr.com/api/v1/time-tracking/timesheets`
- 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/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns a paginated list of timesheets. Supports OData-style `filter` (fields: `employeeId`, `status`, `startDate`, `endDate`) and `sort` (fields: `startDate`, `endDate`, `approvedAt`, `updatedAt`; default `startDate desc`). Page-based pagination via `page` (default 1) and `pageSize` (default 50, max 200). Future-period timesheets are always excluded.

OAuth Scopes: time_tracking:timesheets

## Query parameters

- `filter` string
- `sort` string
- `page` integer
- `pageSize` integer

## Response `200`

Successfully retrieved the timesheets.

- object
  - `data` TimeTrackingTimesheetV1[]: Collection of timesheets.
    - `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.
  - `meta` object
    - `totalItems` integer
    - `totalPages` integer
    - `page` integer
    - `pageSize` integer
  - `_links` object

## Other responses

- `401`: Unauthorized. Missing or invalid authentication.
- `403`: Forbidden. Insufficient permissions.
- `422`: Invalid query parameters (filter, sort, page, or pageSize).

## Changes

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

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