Get Timesheet
/timesheets/{id}Summary
Returns one timesheet by its id or internal nanoid, including assignment, worker, period, hours, values, status, and optional timelog details.
The response includes supplierType (agency or umbrella) from the company connection, defaulting to agency for existing connections. Project settings do not override this classification. For umbrella suppliers, display rate types without an Agency or Umbrella prefix. Stored rateType values remain unchanged.
URL Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Timesheet id or nanoid |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| includeVersionHistory | boolean | No | Include version history snapshots for this timesheet |
| includeTimelogs | boolean | No | Include timelog rows for this timesheet |
Request Example
- cURL
- JavaScript
- Python
- Go
curl -X GET 'https://api.requidex.com/api/open/v1/timesheets/{id}?includeVersionHistory=true&includeTimelogs=true' \
-H 'Authorization: Bearer <API_KEY>' \
-H 'Accept: application/json'
const response = await fetch(
"https://api.requidex.com/api/open/v1/timesheets/{id}?includeVersionHistory=true&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/{id}?includeVersionHistory=true&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/{id}?includeVersionHistory=true&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 |
| versionHistory | array | Returned only when includeVersionHistory=true and snapshots exist. Show child attributes
|
| 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
}
]
}
],
"versionHistory": [
{
"version": 1,
"snapshotReason": "created",
"snapshotAt": "2026-03-08T18:00:00.000Z",
"netHours": 37.5,
"expenseValue": 0,
"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": 0
},
"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
}
}
}
],
"createdAt": "2026-03-08T18:00:00.000Z",
"updatedAt": "2026-03-09T09:15:00.000Z"
}
}
MCP Tool
The MCP server exposes this operation as open_api_get_timesheet with the inputs id, includeVersionHistory, and includeTimelogs.
Errors
| HTTP Status | Description |
|---|---|
| 400 | Invalid or missing timesheet id |
| 401 | Missing, invalid, revoked, or expired API key |
| 403 | Forbidden due to scope or IP restrictions |
| 404 | Timesheet not found |
| 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 |