GET /timesheets
Summary
List timesheets
URL Parameters
- None
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| company | string | No | Filter by company id. If omitted, data for all companies linked to the API key is returned. |
| page | integer | No | Page number (default 1) |
| limit | integer | No | Records per page (default 50, max 200) |
| status | enum(pending, pending_approval, approved, cancelled, absent) | No | Filter by timesheet status |
| project | string | No | Filter by project id |
| site | string | No | Filter by site id |
| assignment | string | No | Filter by assignment id |
| worker | string | No | Filter by worker id |
| agency | string | No | Filter by agency id |
| query | string | No | Case-insensitive search against timesheet reference, worker name/reference, and agency name |
| from | string | No | Created date filter start (YYYY-MM-DD) |
| to | string | No | Created date filter end (YYYY-MM-DD) |
| sortBy | enum(createdAt, updatedAt, timesheetRef, start, we, approvedDate) | No | Sort field |
| sortOrder | enum(asc, desc) | No | Sort direction |
| includeTimelogs | boolean | No | Include timelog rows for each timesheet |
Request Body Fields
No request body is accepted for this endpoint.
Request Example
- cURL
- JavaScript
- Python
- Go
curl -X GET 'https://api.requidex.com/api/open/v1/timesheets' \
-H 'Authorization: Bearer <API_KEY>' \
-H 'Accept: application/json'
const response = await fetch("https://api.requidex.com/api/open/v1/timesheets?includeTimelogs=true", {
method: "GET",
headers: {
Authorization: "Bearer <API_KEY>",
Accept: "application/json",
},
});
const json = await response.json();
import requests
response = requests.request(
'GET',
'https://api.requidex.com/api/open/v1/timesheets?includeTimelogs=true',
headers={
'Authorization': 'Bearer <API_KEY>',
'Accept': 'application/json',
},
timeout=30,
)
print(response.json())
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.requidex.com/api/open/v1/timesheets?includeTimelogs=true", nil)
req.Header.Set("Authorization", "Bearer <API_KEY>")
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
payload, _ := io.ReadAll(resp.Body)
fmt.Println(string(payload))
}
Response Fields
| Field | Type | Description |
|---|---|---|
| id | string | Timesheet id |
| reference | string | Timesheet reference |
| status | string | Timesheet status |
| worker | object | Worker reference with id and name |
| assignment | object | Assignment reference with id and reference |
| company | object | Company reference with id and name |
| project | object | Project reference with id and name |
| site | object | Site reference with id and name |
| agency | object | Agency reference with id and name |
| payType | string | Pay type |
| rateType | string | Rate type |
| start | string | Timesheet period start in ISO 8601 date-time format |
| end | string | Timesheet period end in ISO 8601 date-time format |
| weekEnding | string | Week ending date in ISO 8601 date-time format |
| version | integer | Current timesheet version number |
| approvedDate | string | Approval timestamp in ISO 8601 date-time format |
| netHours | number | Total net hours after breaks |
| rates | object | Timesheet rate sets. Show child attributes
|
| values | object | Pay/charge/expense values. Show child attributes
|
| timelogs | array | Returned only when includeTimelogs=true. Show child attributes
|
| createdAt | string | Creation timestamp |
| updatedAt | string | Last update timestamp |
Response Example (200)
{
"success": true,
"data": [
{
"id": "67bc36db80a1616ec3f4a001",
"reference": "TS-1044",
"status": "approved",
"worker": {
"id": "67bc36db80a1616ec3f48999",
"name": "Jordan Smith"
},
"assignment": {
"id": "67bc36db80a1616ec3f49001",
"reference": "A1044"
},
"company": {
"id": "67bc36db80a1616ec3f47001",
"name": "Requidex Construction Ltd"
},
"project": {
"id": "67bc36db80a1616ec3f47011",
"name": "Northern Rail Electrification"
},
"site": {
"id": "67bc36db80a1616ec3f47055",
"name": "Manchester Central"
},
"agency": {
"id": "67bc36db80a1616ec3f47101",
"name": "Northline Labour Desk"
},
"payType": "hourly",
"rateType": "cis",
"start": "2026-03-02T00:00:00.000Z",
"end": "2026-03-08T23:59:59.999Z",
"weekEnding": "2026-03-08T00:00:00.000Z",
"version": 2,
"approvedDate": "2026-03-09T09:15:00.000Z",
"netHours": 37.5,
"rates": {
"wd": { "pay": 21.5, "emp": 2.93, "margin": 4.32, "charge": 28.75, "uplift": null },
"wdNw": { "pay": 0, "emp": 0, "margin": 0, "charge": 0, "uplift": 25 },
"weNw": { "pay": 0, "emp": 0, "margin": 0, "charge": 0, "uplift": 40 },
"bh": { "pay": 0, "emp": 0, "margin": 0, "charge": 0, "uplift": 100 },
"bhNight": { "pay": 0, "emp": 0, "margin": 0, "charge": 0, "uplift": 125 },
"sat": { "pay": 32.25, "emp": 4.39, "margin": 6.48, "charge": 43.13, "uplift": 50 },
"sun": { "pay": 43, "emp": 5.86, "margin": 8.64, "charge": 57.5, "uplift": 100 },
"ot": { "pay": 32.25, "emp": 4.39, "margin": 6.48, "charge": 43.13, "uplift": 50 }
},
"values": {
"pay": {
"wdBasic": 860,
"wdOvertime": 215,
"wdNightwork": 0,
"weNightwork": 0,
"bankHoliday": 0,
"bankHolidayNight": 0,
"saturday": 294,
"sunday": 295,
"saturdayNightwork": 0,
"sundayNightwork": 0,
"total": 1664
},
"charge": {
"wdBasic": 1150,
"wdOvertime": 287.5,
"wdNightwork": 0,
"weNightwork": 0,
"bankHoliday": 0,
"bankHolidayNight": 0,
"saturday": 396,
"sunday": 396.5,
"saturdayNightwork": 0,
"sundayNightwork": 0,
"total": 2230
},
"expense": 125
},
"timelogs": [
{
"id": "67bc36db80a1616ec3f4a101",
"status": "approved",
"date": "2026-03-03T00:00:00.000Z",
"start": "2026-03-03T08:00:00.000Z",
"end": "2026-03-03T17:00:00.000Z",
"shiftType": "day",
"breaks": 30,
"rateDescription": "wdBasic",
"hours": {
"standard": 8,
"overtime": 0,
"total": 8
},
"rates": {
"pay": 21.5,
"emp": 2.93,
"margin": 4.32,
"charge": 28.75
},
"values": {
"pay": {
"standard": 172,
"overtime": 0,
"total": 172
},
"emp": {
"standard": 23.44,
"overtime": 0,
"total": 23.44
},
"margin": {
"standard": 34.56,
"overtime": 0,
"total": 34.56
},
"charge": {
"standard": 230,
"overtime": 0,
"total": 230
}
},
"absenceAuthorized": null,
"absenceReason": null,
"costCodeAllocations": [
{
"costCode": {
"name": "CC-001",
"description": "Trackside installation"
},
"hours": 8
}
]
}
],
"createdAt": "2026-03-08T18:00:00.000Z",
"updatedAt": "2026-03-09T09:15:00.000Z"
}
],
"meta": {
"page": 1,
"limit": 50,
"total": 1
}
}
Errors
| HTTP Status | Description |
|---|---|
| 400 | Invalid filters or parameters |
| 401 | Missing, invalid, revoked, or expired API key |
| 403 | Forbidden due to scope or IP restrictions |
| 405 | Method not allowed on Open API routes |
| 429 | Rate limit exceeded |
| 500 | Unexpected internal error |