API Reference
API Reference
/v1/timesheetsReturns a paginated list of timesheets in your organization, newest first. A timesheet records the worked, billable, and payable time for one shift assignment along with its approval state.
timesheets:readModule: shift_placementQuery parameters
limit | integer Page size, 1-100 (default 25). |
cursor | string Opaque cursor from a previous response’s next_cursor. |
status | enum
|
shift_id | string (uuid) |
member_id | string (uuid) Filter by the member the timesheet belongs to. |
customer_id | string (uuid) |
date_from | string (date) Only timesheets created on or after this date (YYYY-MM-DD). |
date_to | string (date) Only timesheets created on or before this date (YYYY-MM-DD). |
Request
Response · 200
/v1/timesheets/{id}Returns a single timesheet by id, including scheduled vs worked windows, policy-applied billable/payable minutes, and its approval state. Responds 404 if no such timesheet exists in your organization.
timesheets:readModule: shift_placementPath parameters
idrequired | string (uuid) Timesheet id. |
Request
Response · 200
{
"id": "c1a97d9e-4b1f-4f7e-9f57-2f9f4b6f1a01",
"shift_id": "a3f6d0aa-9d3c-49e0-90ef-6d3c1b7a2b10",
"assignment_id": "b5e8c2bb-1c4d-4a1f-8a2e-7e4d2c8b3c21",
"member_id": "d7f0e4cc-3e6f-4c30-b4a0-9f6e3d0c4d32",
"customer_id": "e9a2f6dd-508a-4e52-a6b2-1a8f5e2d6e43",
"status": "approved",
"scheduled_start": "2026-07-08T14:00:00Z",
"scheduled_end": "2026-07-08T22:00:00Z",
"clock_in_at": "2026-07-08T14:04:12Z",
"clock_out_at": "2026-07-08T22:01:40Z",
"effective_start": "2026-07-08T14:04:12Z",
"effective_end": "2026-07-08T22:01:40Z",
"scheduled_minutes": 480,
"worked_minutes": 477,
"billable_minutes": 480,
"payable_minutes": 480,
"late_minutes": 4,
"is_late": false,
"missing_clock_out": false,
"generated_by": "clock_out",
"auto_approve_at": "2026-07-11T22:02:00Z",
"approved_at": "2026-07-09T09:15:00Z",
"approval_method": "customer",
"customer_note": null,
"dispute_reason": null,
"created_at": "2026-07-08T22:02:00Z",
"updated_at": "2026-07-09T09:15:00Z"
}{
"data": [
{
"id": "c1a97d9e-4b1f-4f7e-9f57-2f9f4b6f1a01",
"shift_id": "a3f6d0aa-9d3c-49e0-90ef-6d3c1b7a2b10",
"assignment_id": "b5e8c2bb-1c4d-4a1f-8a2e-7e4d2c8b3c21",
"member_id": "d7f0e4cc-3e6f-4c30-b4a0-9f6e3d0c4d32",
"customer_id": "e9a2f6dd-508a-4e52-a6b2-1a8f5e2d6e43",
"status": "approved",
"scheduled_start": "2026-07-08T14:00:00Z",
"scheduled_end": "2026-07-08T22:00:00Z",
"clock_in_at": "2026-07-08T14:04:12Z",
"clock_out_at": "2026-07-08T22:01:40Z",
"effective_start": "2026-07-08T14:04:12Z",
"effective_end": "2026-07-08T22:01:40Z",
"scheduled_minutes": 480,
"worked_minutes": 477,
"billable_minutes": 480,
"payable_minutes": 480,
"late_minutes": 4,
"is_late": false,
"missing_clock_out": false,
"generated_by": "clock_out",
"auto_approve_at": "2026-07-11T22:02:00Z",
"approved_at": "2026-07-09T09:15:00Z",
"approval_method": "customer",
"customer_note": null,
"dispute_reason": null,
"created_at": "2026-07-08T22:02:00Z",
"updated_at": "2026-07-09T09:15:00Z"
}
],
"has_more": false,
"next_cursor": null
}curl -X GET "https://keepworkersfirst.org/api/v1/timesheets/c1a97d9e-4b1f-4f7e-9f57-2f9f4b6f1a01" \
-H "Authorization: Bearer $API_KEY"curl -X GET "https://keepworkersfirst.org/api/v1/timesheets" \
-H "Authorization: Bearer $API_KEY"