# contractorOps.timesheets.list

List timesheets awaiting approval, approved, or open by pay period. Hours submitted for dates no pay period covers (a manual cadence, or before the first period) are listed per contractor under unscheduled. With periodId, returns every time entry with its custom form values, missing required fields, and an estimated payout; with contractorId and unscheduled=true, returns that contractor's hours outside a pay period to review and the approved ones ready to pay (prepare them with contractorOps.payouts.prepare and hoursIds). Each listed period carries its live payout, if any, and pipeline says whether payouts are prepared automatically and whether contractors get reminder emails.

`GET | POST /api/v1/accounting/contractorOps.timesheets.list`

Permissions: `accounting:read` · Roles: admin, finance

MCP tool: `accounting_contractor_ops_timesheets_list`

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `limit` | integer |  | How many results to return at most. 1 to 100. Default `30`. |
| `offset` | integer |  | How many results to skip, for the next page of a list. 0 to 100000. Default `0`. |
| `periodId` | string (ID) |  | The ID of a contractor pay period. |
| `contractorId` | string (ID) |  | The ID of a contractor, from contractors.list. |
| `unscheduled` | boolean |  |  |
| `status` | enum |  | Only include records with this status. One of: `awaiting`, `approved`, `open`, `all`. Default `"awaiting"`. |

## Example request

```bash
curl https://app.getoatmilk.com/api/v1/accounting/contractorOps.timesheets.list \
  -H "Authorization: Bearer $OATMILK_API_KEY"
```

Reference page: https://app.getoatmilk.com/docs/api/contractorOps.timesheets.list
