List Timesheets
/timesheetsSummary
Returns a paginated list of timesheets available to the API key, with filters for company, agency, project, assignment, worker, status, and date.
URL Parameters
- None
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| company | string | No | Filter by company id(s). Pass a single id or comma-separated ids. 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 |
| dateField | enum(createdAt, updatedAt, start, end, weekEnding, approvedDate) | No | Date field that from/to apply to. Default: createdAt. |
| from | string | No | Date filter start (YYYY-MM-DD); applies to dateField |
| to | string | No | Date filter end (YYYY-MM-DD); applies to dateField |
| sortBy | enum(createdAt, updatedAt, timesheetRef, start, weekEnding, approvedDate) | No | Sort field |
| sortOrder | enum(asc, desc) | No | Sort direction |
| fields | string | No | Comma-separated list of response fields or dot-path nested fields to return |
| includeTimelogs | boolean | No | Include timelog rows for each timesheet |
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
The approval fields describe different parts of the workflow: approvalRequestedBy is the latest person who requested approval, approvedBy is the user who approved the timesheet, and timesheetApprovers lists the approvers configured on the assignment.
| Field | Type | Description |
|---|---|---|
| agency | object | Show child attributes
|
| approvalRequestedBy | object | Latest person who requested timesheet approval. Show child attributes
|
| approvedBy | object | User who approved the timesheet. Show child attributes
|
| approvedDate | string | Approval timestamp in ISO 8601 date-time format |
| assignment | object | Show child attributes
|
| company | object | Show child attributes
|
| createdAt | string | Creation timestamp |
| end | string | Timesheet period end in ISO 8601 date-time format |
| id | string | Timesheet id |
| netHours | number | Total net hours after breaks |
| payType | string | Pay type |
| pieceRateEntries | array | Piece work captured on the timesheet. Show child attributes
|
| project | object | Show child attributes
|
| rates | object | Timesheet rate sets. Show child attributes
|
| rateType | string | Rate type |
| reference | string | Timesheet reference |
| site | object | Show child attributes
|
| start | string | Timesheet period start in ISO 8601 date-time format |
| status | string | Timesheet status |
| timelogs | array | Returned only when includeTimelogs=true. Show child attributes
|
| timesheetApprovers | array | Approvers configured on the assignment for this timesheet. These are not necessarily the users who approved it. Each item contains id and name. |
| updatedAt | string | Last update timestamp |
| values | object | Pay/charge/expense values. Show child attributes
|
| version | integer | Current timesheet version number |
| weekEnding | string | Week ending date in ISO 8601 date-time format |
| worker | object | Show child attributes
|
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",
"approvalRequestedBy": {
"id": "67bc36db80a1616ec3f48999",
"name": "Jordan Smith",
"type": "candidate"
},
"approvedBy": {
"id": "67bc36db80a1616ec3f47201",
"name": "Alex Reviewer"
},
"timesheetApprovers": [
{
"id": "67bc36db80a1616ec3f47201",
"name": "Alex Reviewer"
},
{
"id": "67bc36db80a1616ec3f47202",
"name": "Taylor Approver"
}
],
"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
},
"pieceRateEntries": [
{
"id": "67bc36db80a1616ec3f4a201",
"pieceRateId": "pr_9X2KLM",
"code": "PR-A1B2C3",
"name": "Meters installed",
"unitLabel": "metre",
"unitLabelPlural": "metres",
"frequency": "daily",
"rateType": "cis",
"values": { "pay": 12.5, "emp": 0, "margin": 2.5, "charge": 15 },
"totals": {
"units": 10,
"payValue": 125,
"empValue": 0,
"marginValue": 25,
"chargeValue": 150
},
"lines": [
{
"id": "67bc36db80a1616ec3f4a202",
"date": "2026-03-03T00:00:00.000Z",
"units": 10,
"payValue": 125,
"empValue": 0,
"marginValue": 25,
"chargeValue": 150,
"comment": "Installed on block A",
"costCode": {
"name": "CC-001",
"description": "Trackside installation"
}
}
]
}
],
"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
}
},
"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
}
}
MCP Tool
The MCP server exposes this operation as open_api_list_timesheets with the inputs company, page, limit, status, project, site, assignment, worker, agency, query, dateField, from, to, sortBy, sortOrder, includeTimelogs, and fields.
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 |
Submission answers
Each returned record includes submissionAnswers (an empty array when there are no applicable answers), unless omitted by list response fields selection. It contains only answers configured to display on this entity. Requisitions expose the saved submission answers, including amendments made while pending; assignments and timesheets expose the saved assignment snapshot.
Agency-scoped callers receive only answers belonging to agencies in their authenticated API key scope, even when another agency submitted the same worker. Query filters and fields selection cannot expand that scope. Company-scoped callers receive answers within their existing company and project access. Existing endpoint read scopes apply; this is read-only access.
Each answer includes:
| Field | Description |
|---|---|
fieldId, label, fieldType, value | Field identifier, captured question and type, and answer value (text, date string, selected option array, or null) |
answerScope | submission for a whole-submission answer or worker for a per-worker answer |
submissionId, workerIds | Submission batch identifier and the workers covered by the answer |
agency, worker | Identifier and name objects; worker is null for whole-submission answers |
displayLocations | Configured display locations captured with the answer |
submittedAt, submittedBy | Original submission timestamp and submitter identifier/name |
updatedAt, updatedBy | Latest amendment timestamp and editor identifier/name, or null |