API reference
Payroll
21 requests. Each shows the permission a key needs, what to send and what comes back.
On this page
Pay runs, newest first
GET/v1/pay-runs
- Permission
payroll.view- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
status | query | enum | One of draft, finalised, paid |
frequency | query | enum | One of weekly, fortnightly, four_weekly, monthly |
Response array of object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequired
curl "https://app.workscope.co.uk/v1/pay-runs" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]Start a pay run for a period (a draft, worked out straight away)
POST/v1/pay-runs
- Permission
payroll.manage- Module
payroll- Answers
201
Request body JSON
frequencyenumoptionalOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddateoptionalYYYY-MM-DD
notesstringoptionalcan be nullUp to 2000 characters
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"notes": "Side gate code is on the key safe."
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}One pay run: each person, their lines and totals, and its history
GET/v1/pay-runs/{id}
- Permission
payroll.view- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/pay-runs/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Change a pay run's notes
PATCH/v1/pay-runs/{id}
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
notesstringoptionalcan be nullUp to 2000 characters
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/pay-runs/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"notes": "Side gate code is on the key safe."
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Delete a draft pay run (what it held is free again)
DELETE/v1/pay-runs/{id}
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/pay-runs/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}Accept someone's pay with a missing rate as it is (or take that back), so the run can be finalised
POST/v1/pay-runs/{id}/entries/{entryId}/accept-missing
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired | |
entryId | path | uuidrequired |
Request body JSON
acceptedbooleanrequired
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs/ID/entries/ID/accept-missing" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"accepted": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Download a pay run as CSV for a payroll provider or accountant: one row per person, or every line
GET/v1/pay-runs/{id}/export
- Permission
payroll.view- Module
payroll- Answers
200with a file (image/jpeg)
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired | |
format | query | enum | One of people, lines · Default "people" |
curl "https://app.workscope.co.uk/v1/pay-runs/ID/export" \
-H "Authorization: Bearer wsk_your_key_here"Finalise a draft: worked out one last time, then it and everything in it is locked
POST/v1/pay-runs/{id}/finalise
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs/ID/finalise" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Add an addition (bonus, expenses …) or a deduction (advance …) for someone in a draft
POST/v1/pay-runs/{id}/lines
- Permission
payroll.manage- Module
payroll- Answers
201
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
teamMemberIduuidrequiredkindenumrequiredOne of
"bonus","overtime","expenses","other_addition","advance","loan_repayment","other_deduction"descriptionstringrequired1–300 characters
amountPenceintegerrequired0 to 100000000
datedateoptionalcan be nullYYYY-MM-DD
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs/ID/lines" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "bonus",
"description": "Side gate code is on the key safe.",
"amountPence": 4500,
"date": "2026-11-06"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Change a line added by hand
PATCH/v1/pay-runs/{id}/lines/{lineId}
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired | |
lineId | path | uuidrequired |
Request body JSON
kindenumoptionalOne of
"bonus","overtime","expenses","other_addition","advance","loan_repayment","other_deduction"descriptionstringoptional1–300 characters
amountPenceintegeroptional0 to 100000000
datedateoptionalcan be nullYYYY-MM-DD
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/pay-runs/ID/lines/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"kind": "bonus",
"description": "Side gate code is on the key safe.",
"amountPence": 4500,
"date": "2026-11-06"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Remove a line added by hand
DELETE/v1/pay-runs/{id}/lines/{lineId}
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired | |
lineId | path | uuidrequired |
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X DELETE "https://app.workscope.co.uk/v1/pay-runs/ID/lines/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Mark a finalised run as paid (final)
POST/v1/pay-runs/{id}/paid
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs/ID/paid" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Work a draft out again from bookings, timesheets, absences and rates (lines added by hand stay)
POST/v1/pay-runs/{id}/recalculate
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs/ID/recalculate" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}Take a finalised run back to draft, saying why (not once paid)
POST/v1/pay-runs/{id}/reopen
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
reasonstringrequired1–500 characters
Response object
iduuidrequirednumberintegerrequired-9007199254740991 to 9007199254740991
referencestringrequiredfrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
statusenumrequiredOne of
"draft","finalised","paid"notesstringrequiredcan be nullpeopleintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
calculatedAtstringrequiredcan be nullfinalisedAtstringrequiredcan be nullpaidAtstringrequiredcan be nullcreatedAtstringrequiredentriesarray of objectrequirediduuidrequiredteamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"hoursFromenumrequiredcan be nullOne of
"bookings","timesheets"grossPenceintegerrequired-9007199254740991 to 9007199254740991
additionsPenceintegerrequired-9007199254740991 to 9007199254740991
deductionsPenceintegerrequired-9007199254740991 to 9007199254740991
workedMinutesintegerrequired-9007199254740991 to 9007199254740991
paidAbsenceMinutesintegerrequired-9007199254740991 to 9007199254740991
missingRatesintegerrequired-9007199254740991 to 9007199254740991
workPenceintegerrequired-9007199254740991 to 9007199254740991
workMinutesintegerrequired-9007199254740991 to 9007199254740991
travelMinutesintegerrequired-9007199254740991 to 9007199254740991
holidayPenceintegerrequired-9007199254740991 to 9007199254740991
holidayMinutesintegerrequired-9007199254740991 to 9007199254740991
sickPenceintegerrequired-9007199254740991 to 9007199254740991
sickMinutesintegerrequired-9007199254740991 to 9007199254740991
milesX100integerrequired-9007199254740991 to 9007199254740991
mileagePenceintegerrequired-9007199254740991 to 9007199254740991
adjustmentsPenceintegerrequired-9007199254740991 to 9007199254740991
missingAcceptedbooleanrequiredlinesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"work","salary","paid_absence","unpaid_absence","bonus","overtime","expenses","mileage","other_addition","advance","loan_repayment","other_deduction","travel_time"manualbooleanrequireddescriptionstringrequireddatedaterequiredcan be nullYYYY-MM-DD
minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysnumberrequiredcan be nullratePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
amountPenceintegerrequired-9007199254740991 to 9007199254740991
missingRatebooleanrequiredlatebooleanrequiredholidaybooleanrequiredmilesnumberrequiredcan be nullbookingIduuidrequiredcan be nulltimesheetIduuidrequiredcan be nullabsenceIduuidrequiredcan be nulltravelTimeIduuidrequiredcan be null
historyarray of objectrequirediduuidrequiredkindenumrequiredOne of
"created","recalculated","finalised","reopened","paid","line_added","line_changed","line_removed","missing_accepted"byNamestringrequiredcan be nullatstringrequiredreasonstringrequiredcan be nullsummarystringrequiredcan be null
finaliseBlockerstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/pay-runs/ID/reopen" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"reason": "text"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"number": -9007199254740991,
"reference": "INV-0042",
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"status": "draft",
"notes": "Side gate code is on the key safe.",
"people": -9007199254740991,
"grossPence": 4500,
"missingRates": -9007199254740991,
"calculatedAt": "2026-11-06T09:30:00.000Z",
"finalisedAt": "2026-11-06T09:30:00.000Z",
"paidAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z",
"entries": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"payBasis": "hourly",
"hoursFrom": "bookings",
"grossPence": 4500,
"additionsPence": 4500,
"deductionsPence": 4500,
"workedMinutes": 120,
"paidAbsenceMinutes": 120,
"missingRates": -9007199254740991,
"workPence": 4500,
"workMinutes": 120,
"travelMinutes": 120,
"holidayPence": 4500,
"holidayMinutes": 120,
"sickPence": 4500,
"sickMinutes": 120,
"milesX100": -9007199254740991,
"mileagePence": 4500,
"adjustmentsPence": 4500,
"missingAccepted": false,
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "work",
"manual": false,
"description": "Side gate code is on the key safe.",
"date": "2026-11-06",
"minutes": 120,
"days": 1,
"ratePence": 4500,
"amountPence": 4500,
"missingRate": false,
"late": false,
"holiday": false,
"miles": 1,
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"timesheetId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"absenceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"travelTimeId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}
],
"history": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"kind": "created",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z",
"reason": "text",
"summary": "text"
}
],
"finaliseBlocker": "text"
}The period the next pay run would cover, and how many people are paid at that frequency
GET/v1/pay-runs/next
- Permission
payroll.view- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
frequency | query | enum | One of weekly, fortnightly, four_weekly, monthly |
Response object
frequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"periodStartdaterequiredYYYY-MM-DD
periodEnddaterequiredYYYY-MM-DD
peopleintegerrequired-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/pay-runs/next" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"frequency": "weekly",
"periodStart": "2026-11-06",
"periodEnd": "2026-11-06",
"people": -9007199254740991
}How often people are paid, unless a team member says otherwise
GET/v1/payroll/settings
- Permission
payroll.view- Module
payroll- Answers
200
Response object
payFrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"payFrequenciesarray of enumrequiredAt least 1 item
mileageRatePenceintegerrequired-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/payroll/settings" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"payFrequency": "weekly",
"payFrequencies": [
"weekly"
],
"mileageRatePence": 4500
}Change the payroll settings
PATCH/v1/payroll/settings
- Permission
payroll.manage- Module
payroll- Answers
200
Request body JSON
payFrequencyenumoptionalOne of
"weekly","fortnightly","four_weekly","monthly"payFrequenciesarray of enumoptionalAt least 1 item
mileageRatePenceintegeroptional0 to 10000
Response object
payFrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"payFrequenciesarray of enumrequiredAt least 1 item
mileageRatePenceintegerrequired-9007199254740991 to 9007199254740991
curl -X PATCH "https://app.workscope.co.uk/v1/payroll/settings" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"payFrequency": "weekly",
"payFrequencies": [
"weekly"
],
"mileageRatePence": 4500
}'Example response
{
"payFrequency": "weekly",
"payFrequencies": [
"weekly"
],
"mileageRatePence": 4500
}A team member's pay: how often, and their dated hourly rates or salaries
GET/v1/team-members/{id}/pay
- Permission
payroll.view- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
teamMemberIduuidrequiredpayBasisenumrequiredOne of
"hourly","salaried"payFrequencyenumrequiredcan be nullOne of
"weekly","fortnightly","four_weekly","monthly"effectiveFrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"mileageRatePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
effectiveMileageRatePenceintegerrequired-9007199254740991 to 9007199254740991
ratesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"hourly","salary"effectiveFromdaterequiredYYYY-MM-DD
amountPenceintegerrequired-9007199254740991 to 9007199254740991
notestringrequiredcan be nullcreatedAtstringrequired
curl "https://app.workscope.co.uk/v1/team-members/ID/pay" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"payBasis": "hourly",
"payFrequency": "weekly",
"effectiveFrequency": "weekly",
"mileageRatePence": 4500,
"effectiveMileageRatePence": 4500,
"rates": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"kind": "hourly",
"effectiveFrom": "2026-11-06",
"amountPence": 4500,
"note": "Side gate code is on the key safe.",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]
}How often a team member is paid, and their rate per mile (null: the company’s)
PATCH/v1/team-members/{id}/pay
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
payFrequencyenumoptionalcan be nullOne of
"weekly","fortnightly","four_weekly","monthly"mileageRatePenceintegeroptionalcan be null0 to 10000
Response object
teamMemberIduuidrequiredpayBasisenumrequiredOne of
"hourly","salaried"payFrequencyenumrequiredcan be nullOne of
"weekly","fortnightly","four_weekly","monthly"effectiveFrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"mileageRatePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
effectiveMileageRatePenceintegerrequired-9007199254740991 to 9007199254740991
ratesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"hourly","salary"effectiveFromdaterequiredYYYY-MM-DD
amountPenceintegerrequired-9007199254740991 to 9007199254740991
notestringrequiredcan be nullcreatedAtstringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/team-members/ID/pay" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"payFrequency": "weekly",
"mileageRatePence": 4500
}'Example response
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"payBasis": "hourly",
"payFrequency": "weekly",
"effectiveFrequency": "weekly",
"mileageRatePence": 4500,
"effectiveMileageRatePence": 4500,
"rates": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"kind": "hourly",
"effectiveFrom": "2026-11-06",
"amountPence": 4500,
"note": "Side gate code is on the key safe.",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]
}Add an hourly rate or a yearly salary from a day (replacing one from the same day)
POST/v1/team-members/{id}/pay/rates
- Permission
payroll.manage- Module
payroll- Answers
201
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
kindenumrequiredOne of
"hourly","salary"effectiveFromdaterequiredYYYY-MM-DD
amountPenceintegerrequired0 to 100000000
notestringoptionalcan be nullUp to 500 characters
Response object
teamMemberIduuidrequiredpayBasisenumrequiredOne of
"hourly","salaried"payFrequencyenumrequiredcan be nullOne of
"weekly","fortnightly","four_weekly","monthly"effectiveFrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"mileageRatePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
effectiveMileageRatePenceintegerrequired-9007199254740991 to 9007199254740991
ratesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"hourly","salary"effectiveFromdaterequiredYYYY-MM-DD
amountPenceintegerrequired-9007199254740991 to 9007199254740991
notestringrequiredcan be nullcreatedAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/team-members/ID/pay/rates" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"kind": "hourly",
"effectiveFrom": "2026-11-06",
"amountPence": 4500,
"note": "Side gate code is on the key safe."
}'Example response
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"payBasis": "hourly",
"payFrequency": "weekly",
"effectiveFrequency": "weekly",
"mileageRatePence": 4500,
"effectiveMileageRatePence": 4500,
"rates": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"kind": "hourly",
"effectiveFrom": "2026-11-06",
"amountPence": 4500,
"note": "Side gate code is on the key safe.",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]
}Remove a rate (pay already finalised keeps what it was)
DELETE/v1/team-members/{id}/pay/rates/{rateId}
- Permission
payroll.manage- Module
payroll- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired | |
rateId | path | uuidrequired |
Response object
teamMemberIduuidrequiredpayBasisenumrequiredOne of
"hourly","salaried"payFrequencyenumrequiredcan be nullOne of
"weekly","fortnightly","four_weekly","monthly"effectiveFrequencyenumrequiredOne of
"weekly","fortnightly","four_weekly","monthly"mileageRatePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
effectiveMileageRatePenceintegerrequired-9007199254740991 to 9007199254740991
ratesarray of objectrequirediduuidrequiredkindenumrequiredOne of
"hourly","salary"effectiveFromdaterequiredYYYY-MM-DD
amountPenceintegerrequired-9007199254740991 to 9007199254740991
notestringrequiredcan be nullcreatedAtstringrequired
curl -X DELETE "https://app.workscope.co.uk/v1/team-members/ID/pay/rates/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"payBasis": "hourly",
"payFrequency": "weekly",
"effectiveFrequency": "weekly",
"mileageRatePence": 4500,
"effectiveMileageRatePence": 4500,
"rates": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"kind": "hourly",
"effectiveFrom": "2026-11-06",
"amountPence": 4500,
"note": "Side gate code is on the key safe.",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]
}