API reference
Holiday
16 requests. Each shows the permission a key needs, what to send and what comes back.
On this page
Absence types (Holiday, Sickness, Unpaid leave, Other, and the company's own)
GET/v1/absence-types
- Permission
absence.self- Module
holiday- Answers
200
Response array of object
iduuidrequiredkeystringrequiredcan be nullnamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequiredarchivedbooleanrequired
curl "https://app.workscope.co.uk/v1/absence-types" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"key": "example-slug",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false,
"archived": false
}
]Add an absence type
POST/v1/absence-types
- Permission
organization.update- Module
holiday- Answers
201
Request body JSON
namestringrequired1–200 characters
paidbooleanrequiredusesAllowancebooleanrequired
Response object
iduuidrequiredkeystringrequiredcan be nullnamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequiredarchivedbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/absence-types" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"key": "example-slug",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false,
"archived": false
}Change or archive an absence type
PATCH/v1/absence-types/{id}
- Permission
organization.update- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
namestringoptional1–200 characters
paidbooleanoptionalusesAllowancebooleanoptionalarchivedbooleanoptional
Response object
iduuidrequiredkeystringrequiredcan be nullnamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequiredarchivedbooleanrequired
curl -X PATCH "https://app.workscope.co.uk/v1/absence-types/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false,
"archived": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"key": "example-slug",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false,
"archived": false
}Absences between two dates (who's off), with filters
GET/v1/absences
- Permission
absence.view- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
from | query | daterequired | |
to | query | daterequired | |
status | query | enum | One of requested, approved, declined, cancelled, pending |
teamMemberId | query | uuid | |
typeId | query | uuid | |
teamId | query | uuid | |
teamIds | query | array of uuid |
Response array of object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl "https://app.workscope.co.uk/v1/absences?from=2026-11-06&to=2026-11-06" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]Add an absence for one or more people (approved, or as a request), deciding what happens to their bookings
POST/v1/absences
- Permission
absence.manage- Module
holiday- Answers
201
Request body JSON
typeIduuidrequiredstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumoptionalOne of
"full","am","pm","hours"· Default"full"minutesintegeroptional1 to 527040
notestringoptionalcan be nullUp to 2000 characters
teamMemberIdsarray of uuidrequired1–200 items
statusenumoptionalOne of
"approved","requested"· Default"approved"clashesarray of objectoptionalUp to 2000 items · Default
[]bookingIduuidrequiredactionenumrequiredOne of
"leave","open","reassign"teamMemberIduuidoptional
Response array of object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/absences" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"typeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"note": "Side gate code is on the key safe.",
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"status": "approved",
"clashes": [
{
"bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"action": "leave",
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
}
]
}'Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]One absence
GET/v1/absences/{id}
- Permission
absence.view- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl "https://app.workscope.co.uk/v1/absences/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}Change an absence (an approved one is taken back and put in again)
PATCH/v1/absences/{id}
- Permission
absence.manage- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
typeIduuidoptionalstartDatedateoptionalYYYY-MM-DD
endDatedateoptionalYYYY-MM-DD
partenumoptionalOne of
"full","am","pm","hours"· Default"full"minutesintegeroptional1 to 527040
notestringoptionalcan be nullUp to 2000 characters
clashesarray of objectoptionalUp to 2000 items
bookingIduuidrequiredactionenumrequiredOne of
"leave","open","reassign"teamMemberIduuidoptional
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/absences/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"typeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"note": "Side gate code is on the key safe.",
"clashes": [
{
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"action": "leave",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
}
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}Approve a request (or a request to cancel), deciding what happens to their bookings
POST/v1/absences/{id}/approve
- Permission
absence.manage- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
clashesarray of objectoptionalUp to 2000 items · Default
[]bookingIduuidrequiredactionenumrequiredOne of
"leave","open","reassign"teamMemberIduuidoptional
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/absences/ID/approve" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"clashes": [
{
"bookingId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"action": "leave",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}Cancel an absence (its holiday goes back)
POST/v1/absences/{id}/cancel
- Permission
absence.manage- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/absences/ID/cancel" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}Decline a request, saying why (or refuse a request to cancel)
POST/v1/absences/{id}/decline
- Permission
absence.manage- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
reasonstringrequired1–1000 characters
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequiredtypeobjectrequirediduuidrequirednamestringrequiredpaidbooleanrequiredusesAllowancebooleanrequired
statusenumrequiredOne of
"requested","approved","declined","cancelled"startDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumrequiredOne of
"full","am","pm","hours"minutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequirednotestringrequiredcan be nulldeclineReasonstringrequiredcan be nullcancelRequestedbooleanrequiredrequestedByNamestringrequiredcan be nulldecidedByNamestringrequiredcan be nulldecidedAtstringrequiredcan be nullcreatedAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/absences/ID/decline" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"reason": "text"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"type": {
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"paid": false,
"usesAllowance": false
},
"status": "requested",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"seconds": 7200,
"amountLabel": "text",
"note": "Side gate code is on the key safe.",
"declineReason": "text",
"cancelRequested": false,
"requestedByName": "Harbourside Dental",
"decidedByName": "Harbourside Dental",
"decidedAt": "2026-11-06T09:30:00.000Z",
"createdAt": "2026-11-06T09:30:00.000Z"
}Before saving: what an absence takes for each person, their balance before and after, and their bookings on those days
POST/v1/absences/preview
- Permission
absence.manage- Module
holiday- Answers
200
Request body JSON
typeIduuidrequiredstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredYYYY-MM-DD
partenumoptionalOne of
"full","am","pm","hours"· Default"full"minutesintegeroptional1 to 527040
notestringoptionalcan be nullUp to 2000 characters
teamMemberIdsarray of uuidrequired1–200 items
excludeAbsenceIduuidoptional
Response array of object
teamMemberIduuidrequirednamestringrequiredpayBasisenumrequiredOne of
"hourly","salaried"secondsintegerrequired-9007199254740991 to 9007199254740991
amountLabelstringrequiredneedsMinutesbooleanrequiredsuggestedMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
daysarray of objectrequireddatedaterequiredYYYY-MM-DD
minutesintegerrequired-9007199254740991 to 9007199254740991
fromenumrequiredOne of
"booked","average","none"
averageDayMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
averageWeeksintegerrequired-9007199254740991 to 9007199254740991
usesAllowancebooleanrequiredbalanceBeforeSecondsintegerrequired-9007199254740991 to 9007199254740991
balanceAfterSecondsintegerrequired-9007199254740991 to 9007199254740991
balanceBeforeLabelstringrequiredbalanceAfterLabelstringrequiredclashesarray of objectrequiredbookingIduuidrequireddatedaterequiredYYYY-MM-DD
namestringrequiredclientNamestringrequiredstarttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
statusstringrequired
curl -X POST "https://app.workscope.co.uk/v1/absences/preview" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"typeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"part": "full",
"minutes": 120,
"note": "Side gate code is on the key safe.",
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"excludeAbsenceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
}'Example response
[
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"payBasis": "hourly",
"seconds": 7200,
"amountLabel": "text",
"needsMinutes": false,
"suggestedMinutes": 120,
"days": [
{
"date": "2026-11-06",
"minutes": 120,
"from": "booked"
}
],
"averageDayMinutes": 120,
"averageWeeks": -9007199254740991,
"usesAllowance": false,
"balanceBeforeSeconds": 7200,
"balanceAfterSeconds": 7200,
"balanceBeforeLabel": "text",
"balanceAfterLabel": "text",
"clashes": [
{
"bookingId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"date": "2026-11-06",
"name": "Harbourside Dental",
"clientName": "Harbourside Dental",
"start": "09:00",
"end": "11:00",
"status": "text"
}
]
}
]Bank holidays between two dates in the company's region (and whether it works them)
GET/v1/bank-holidays
- Permission
booking.viewAll or booking.viewOwn- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
from | query | daterequired | |
to | query | daterequired |
Response object
regionenumrequiredOne of
"england-and-wales","scotland","northern-ireland"modeenumrequiredOne of
"work","close_from_allowance","close_on_top"datesarray of objectrequireddatedaterequiredYYYY-MM-DD
titlestringrequired
curl "https://app.workscope.co.uk/v1/bank-holidays?from=2026-11-06&to=2026-11-06" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"region": "england-and-wales",
"mode": "work",
"dates": [
{
"date": "2026-11-06",
"title": "text"
}
]
}The company's holiday settings: accrual rate, holiday year, salaried allowance, bank holidays, carry-over
GET/v1/holiday/settings
- Permission
absence.view- Module
holiday- Answers
200
Response object
accrualRatePercentnumberrequiredholidayYearStartstringrequiredMM-DD
salariedAllowanceDaysnumberrequiredbankHolidayModeenumrequiredOne of
"work","close_from_allowance","close_on_top"bankHolidayRegionenumrequiredOne of
"england-and-wales","scotland","northern-ireland"carryOverMaxDaysnumberrequiredcarryOverUseBystringrequiredcan be nullMM-DD
hourlyExpiryMonthsintegerrequiredcan be null-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/holiday/settings" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"accrualRatePercent": 1,
"holidayYearStart": "04-01",
"salariedAllowanceDays": 1,
"bankHolidayMode": "work",
"bankHolidayRegion": "england-and-wales",
"carryOverMaxDays": 1,
"carryOverUseBy": "04-01",
"hourlyExpiryMonths": -9007199254740991
}Change the holiday settings
PATCH/v1/holiday/settings
- Permission
organization.update- Module
holiday- Answers
200
Request body JSON
accrualRatePercentnumberoptional0 to 50
holidayYearStartstringoptionalMM-DD
salariedAllowanceDaysnumberoptional0 to 366
bankHolidayModeenumoptionalOne of
"work","close_from_allowance","close_on_top"bankHolidayRegionenumoptionalOne of
"england-and-wales","scotland","northern-ireland"carryOverMaxDaysnumberoptional0 to 366
carryOverUseBystringoptionalcan be nullMM-DD
hourlyExpiryMonthsintegeroptionalcan be null1 to 120
Response object
accrualRatePercentnumberrequiredholidayYearStartstringrequiredMM-DD
salariedAllowanceDaysnumberrequiredbankHolidayModeenumrequiredOne of
"work","close_from_allowance","close_on_top"bankHolidayRegionenumrequiredOne of
"england-and-wales","scotland","northern-ireland"carryOverMaxDaysnumberrequiredcarryOverUseBystringrequiredcan be nullMM-DD
hourlyExpiryMonthsintegerrequiredcan be null-9007199254740991 to 9007199254740991
curl -X PATCH "https://app.workscope.co.uk/v1/holiday/settings" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"accrualRatePercent": 0,
"holidayYearStart": "04-01",
"salariedAllowanceDays": 0,
"bankHolidayMode": "work",
"bankHolidayRegion": "england-and-wales",
"carryOverMaxDays": 0,
"carryOverUseBy": "04-01",
"hourlyExpiryMonths": 1
}'Example response
{
"accrualRatePercent": 1,
"holidayYearStart": "04-01",
"salariedAllowanceDays": 1,
"bankHolidayMode": "work",
"bankHolidayRegion": "england-and-wales",
"carryOverMaxDays": 1,
"carryOverUseBy": "04-01",
"hourlyExpiryMonths": -9007199254740991
}A team member's holiday balance, this holiday year, and the ledger
GET/v1/team-members/{id}/holiday
- Permission
absence.view- Module
holiday- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
teamMemberIduuidrequiredpayBasisenumrequiredOne of
"hourly","salaried"minutesPerDayintegerrequired-9007199254740991 to 9007199254740991
balanceSecondsintegerrequired-9007199254740991 to 9007199254740991
balanceLabelstringrequiredaheadSecondsintegerrequired-9007199254740991 to 9007199254740991
todaySecondsintegerrequired-9007199254740991 to 9007199254740991
todayLabelstringrequiredpendingSecondsintegerrequired-9007199254740991 to 9007199254740991
yearobjectrequiredstartdaterequiredYYYY-MM-DD
enddaterequiredYYYY-MM-DD
thisYearobjectrequiredearnedSecondsintegerrequired-9007199254740991 to 9007199254740991
takenSecondsintegerrequired-9007199254740991 to 9007199254740991
allowanceSecondsintegerrequiredcan be null-9007199254740991 to 9007199254740991
carryInSecondsintegerrequiredcan be null-9007199254740991 to 9007199254740991
bankHolidaySecondsintegerrequiredcan be null-9007199254740991 to 9007199254740991
adjustmentSecondsintegerrequired-9007199254740991 to 9007199254740991
expiredSecondsintegerrequired-9007199254740991 to 9007199254740991
ledgerarray of objectrequirediduuidrequiredcan be nulldatedaterequiredYYYY-MM-DD
kindenumrequiredOne of
"accrual","absence","adjustment","allowance","carry_over","bank_holiday","expired"secondsintegerrequired-9007199254740991 to 9007199254740991
labelstringrequirednotestringrequiredcan be nullbyNamestringrequiredcan be nullcreatedAtstringrequiredcan be null
byTypearray of objectrequiredtypeIduuidrequirednamestringrequiredusesAllowancebooleanrequiredcountintegerrequired-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
labelstringrequired
curl "https://app.workscope.co.uk/v1/team-members/ID/holiday" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"payBasis": "hourly",
"minutesPerDay": -9007199254740991,
"balanceSeconds": 7200,
"balanceLabel": "text",
"aheadSeconds": 7200,
"todaySeconds": 7200,
"todayLabel": "text",
"pendingSeconds": 7200,
"year": {
"start": "2026-11-06",
"end": "2026-11-06"
},
"thisYear": {
"earnedSeconds": 7200,
"takenSeconds": 7200,
"allowanceSeconds": 7200,
"carryInSeconds": 7200,
"bankHolidaySeconds": 7200,
"adjustmentSeconds": 7200,
"expiredSeconds": 7200
},
"ledger": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"date": "2026-11-06",
"kind": "accrual",
"seconds": 7200,
"label": "text",
"note": "Side gate code is on the key safe.",
"byName": "Harbourside Dental",
"createdAt": "2026-11-06T09:30:00.000Z"
}
],
"byType": [
{
"typeId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"usesAllowance": false,
"count": 3,
"seconds": 7200,
"label": "text"
}
]
}Add or take away holiday by hand, with a reason (a new ledger line)
POST/v1/team-members/{id}/holiday/adjustments
- Permission
absence.manage- Module
holiday- Answers
201
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
amountnumberrequiredunitenumrequiredOne of
"hours","days"datedateoptionalYYYY-MM-DD
reasonstringrequired3–500 characters
Response object
teamMemberIduuidrequiredpayBasisenumrequiredOne of
"hourly","salaried"minutesPerDayintegerrequired-9007199254740991 to 9007199254740991
balanceSecondsintegerrequired-9007199254740991 to 9007199254740991
balanceLabelstringrequiredaheadSecondsintegerrequired-9007199254740991 to 9007199254740991
todaySecondsintegerrequired-9007199254740991 to 9007199254740991
todayLabelstringrequiredpendingSecondsintegerrequired-9007199254740991 to 9007199254740991
yearobjectrequiredstartdaterequiredYYYY-MM-DD
enddaterequiredYYYY-MM-DD
thisYearobjectrequiredearnedSecondsintegerrequired-9007199254740991 to 9007199254740991
takenSecondsintegerrequired-9007199254740991 to 9007199254740991
allowanceSecondsintegerrequiredcan be null-9007199254740991 to 9007199254740991
carryInSecondsintegerrequiredcan be null-9007199254740991 to 9007199254740991
bankHolidaySecondsintegerrequiredcan be null-9007199254740991 to 9007199254740991
adjustmentSecondsintegerrequired-9007199254740991 to 9007199254740991
expiredSecondsintegerrequired-9007199254740991 to 9007199254740991
ledgerarray of objectrequirediduuidrequiredcan be nulldatedaterequiredYYYY-MM-DD
kindenumrequiredOne of
"accrual","absence","adjustment","allowance","carry_over","bank_holiday","expired"secondsintegerrequired-9007199254740991 to 9007199254740991
labelstringrequirednotestringrequiredcan be nullbyNamestringrequiredcan be nullcreatedAtstringrequiredcan be null
byTypearray of objectrequiredtypeIduuidrequirednamestringrequiredusesAllowancebooleanrequiredcountintegerrequired-9007199254740991 to 9007199254740991
secondsintegerrequired-9007199254740991 to 9007199254740991
labelstringrequired
curl -X POST "https://app.workscope.co.uk/v1/team-members/ID/holiday/adjustments" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"amount": 1,
"unit": "hours",
"date": "2026-11-06",
"reason": "text"
}'Example response
{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"payBasis": "hourly",
"minutesPerDay": -9007199254740991,
"balanceSeconds": 7200,
"balanceLabel": "text",
"aheadSeconds": 7200,
"todaySeconds": 7200,
"todayLabel": "text",
"pendingSeconds": 7200,
"year": {
"start": "2026-11-06",
"end": "2026-11-06"
},
"thisYear": {
"earnedSeconds": 7200,
"takenSeconds": 7200,
"allowanceSeconds": 7200,
"carryInSeconds": 7200,
"bankHolidaySeconds": 7200,
"adjustmentSeconds": 7200,
"expiredSeconds": 7200
},
"ledger": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"date": "2026-11-06",
"kind": "accrual",
"seconds": 7200,
"label": "text",
"note": "Side gate code is on the key safe.",
"byName": "Harbourside Dental",
"createdAt": "2026-11-06T09:30:00.000Z"
}
],
"byType": [
{
"typeId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"usesAllowance": false,
"count": 3,
"seconds": 7200,
"label": "text"
}
]
}