API reference
Schedule
10 requests. Each shows the permission a key needs, what to send and what comes back.
On this page
Bookings and planned visits between two dates
GET/v1/schedule
- Permission
booking.viewAll or booking.viewOwn- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
from | query | daterequired | |
to | query | daterequired | |
teamMemberId | query | uuid | |
work | query | enum | One of all, clients, internal · Default "all" |
Response object
bookingsarray of objectrequirediduuidrequiredstatusenumrequiredOne of
"draft","open","active","complete","signed_off","failed"datedaterequiredcan be nullYYYY-MM-DD
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
startsAtstringrequiredcan be nullendsAtstringrequiredcan be nullovernightbooleanrequiredbreakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
namestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nulljobIduuidrequiredcan be nullvisitNumberintegerrequiredcan be null-9007199254740991 to 9007199254740991
teamMemberIduuidrequiredcan be nullteamMemberNamestringrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredopenNotifyAtstringrequiredcan be nullpriceobjectrequiredcan be nullpenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sourceenumrequiredOne of
"locked","override","list","none"lockedAtstringrequiredcan be nulllockReasonenumrequiredcan be nullOne of
"completed","signed_off","invoiced"invoiceRefstringoptionalcan be null
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullclockInRequiredbooleanrequiredclockInMissedbooleanrequiredclockedInAtstringrequiredcan be nullclockedOutAtstringrequiredcan be nullclockInLocationobjectrequiredcan be nulllatnumberrequired-90 to 90
lngnumberrequired-180 to 180
accuracyMetresnumberrequiredcan be null0 to 100000
clockOutLocationobjectrequiredcan be nulllatnumberrequired-90 to 90
lngnumberrequired-180 to 180
accuracyMetresnumberrequiredcan be null0 to 100000
clockInDeviceobjectrequiredcan be nullidstringrequiredcan be nullosstringrequiredcan be nullipstringrequiredcan be null
clockOutDeviceobjectrequiredcan be nullidstringrequiredcan be nullosstringrequiredcan be nullipstringrequiredcan be null
clockInSetByNamestringrequiredcan be nullclockOutSetByNamestringrequiredcan be nullchecklistobjectrequiredcan be nulldoneintegerrequired-9007199254740991 to 9007199254740991
totalintegerrequired-9007199254740991 to 9007199254740991
mustDoLeftintegerrequired-9007199254740991 to 9007199254740991
plannedarray of objectrequiredjobIduuidrequiredunbookedobjectrequiredcan be nullatstringrequiredbyNamestringrequiredcan be nullfromStatusenumrequiredOne of
"draft","open","active","complete","signed_off","failed"
visitNumberintegerrequired-9007199254740991 to 9007199254740991
datedaterequiredYYYY-MM-DD
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
startsAtstringrequiredcan be nullendsAtstringrequiredcan be nullovernightbooleanrequiredbreakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
namestringrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullteamMemberIduuidrequiredcan be nullpricePenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
internalbooleanrequiredtemplateIduuidrequiredcan be nullcustomFieldsobjectrequired
unavailablearray of objectrequiredteamMemberIduuidrequiredfromstringrequiredtostringrequiredreasonstringrequired
curl "https://app.workscope.co.uk/v1/schedule?from=2026-11-06&to=2026-11-06" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"bookings": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"status": "draft",
"date": "2026-11-06",
"start": "09:00",
"end": "11:00",
"startsAt": "2026-11-06T09:30:00.000Z",
"endsAt": "2026-11-06T09:30:00.000Z",
"overnight": false,
"breakMinutes": 120,
"durationMinutes": 120,
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"jobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"visitNumber": -9007199254740991,
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"openToTeamIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"openToTeamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"openNotifyAt": "2026-11-06T09:30:00.000Z",
"price": {
"pence": 4500,
"source": "locked",
"lockedAt": "2026-11-06T09:30:00.000Z",
"lockReason": "completed",
"invoiceRef": "text"
},
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"clockInRequired": false,
"clockInMissed": false,
"clockedInAt": "2026-11-06T09:30:00.000Z",
"clockedOutAt": "2026-11-06T09:30:00.000Z",
"clockInLocation": {
"lat": 51.4545,
"lng": -2.5879,
"accuracyMetres": 0
},
"clockOutLocation": {
"lat": 51.4545,
"lng": -2.5879,
"accuracyMetres": 0
},
"clockInDevice": {
"id": "text",
"os": "text",
"ip": "text"
},
"clockOutDevice": {
"id": "text",
"os": "text",
"ip": "text"
},
"clockInSetByName": "Harbourside Dental",
"clockOutSetByName": "Harbourside Dental",
"checklist": {
"done": -9007199254740991,
"total": -9007199254740991,
"mustDoLeft": -9007199254740991
}
}
],
"planned": [
{
"jobId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"unbooked": {
"at": "2026-11-06T09:30:00.000Z",
"byName": "Harbourside Dental",
"fromStatus": "draft"
},
"visitNumber": -9007199254740991,
"date": "2026-11-06",
"start": "09:00",
"end": "11:00",
"startsAt": "2026-11-06T09:30:00.000Z",
"endsAt": "2026-11-06T09:30:00.000Z",
"overnight": false,
"breakMinutes": 120,
"durationMinutes": 120,
"name": "Harbourside Dental",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"pricePence": 4500,
"internal": false,
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"customFields": {
"contract-number": "CN-1042"
}
}
],
"unavailable": [
{
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"from": "2026-11-06",
"to": "2026-11-06",
"reason": "text"
}
]
}The company's saved schedule filters (and which is the caller's default)
GET/v1/schedule-filters
- Permission
scheduleFilter.manage- Answers
200
Response array of object
iduuidrequirednamestringrequireddescriptionstringrequiredcan be nullcriteriaobjectrequiredteamMemberIdsarray of uuidrequiredUp to 500 items · Default
[]teamIdsarray of uuidrequiredUp to 100 items · Default
[]clientIdsarray of uuidrequiredUp to 500 items · Default
[]projectIdsarray of uuidrequiredUp to 500 items · Default
[]templateIdsarray of uuidrequiredUp to 100 items · Default
[]statusesarray of enumrequiredUp to 6 items · Default
[]workenumrequiredOne of
"all","clients","internal"· Default"all"
showOthersbooleanrequiredisDefaultbooleanrequiredcreatedByNamestringrequiredcan be null
curl "https://app.workscope.co.uk/v1/schedule-filters" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"criteria": {
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"teamIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"clientIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"projectIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"templateIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"statuses": [
"draft"
],
"work": "all"
},
"showOthers": false,
"isDefault": false,
"createdByName": "Harbourside Dental"
}
]Save a schedule filter
POST/v1/schedule-filters
- Permission
scheduleFilter.manage- Answers
201
Request body JSON
namestringrequired1–200 characters
descriptionstringoptionalcan be nullUp to 500 characters
criteriaobjectrequiredteamMemberIdsarray of uuidoptionalUp to 500 items · Default
[]teamIdsarray of uuidoptionalUp to 100 items · Default
[]clientIdsarray of uuidoptionalUp to 500 items · Default
[]projectIdsarray of uuidoptionalUp to 500 items · Default
[]templateIdsarray of uuidoptionalUp to 100 items · Default
[]statusesarray of enumoptionalUp to 6 items · Default
[]workenumoptionalOne of
"all","clients","internal"· Default"all"
showOthersbooleanoptionalDefault
false
Response object
iduuidrequirednamestringrequireddescriptionstringrequiredcan be nullcriteriaobjectrequiredteamMemberIdsarray of uuidrequiredUp to 500 items · Default
[]teamIdsarray of uuidrequiredUp to 100 items · Default
[]clientIdsarray of uuidrequiredUp to 500 items · Default
[]projectIdsarray of uuidrequiredUp to 500 items · Default
[]templateIdsarray of uuidrequiredUp to 100 items · Default
[]statusesarray of enumrequiredUp to 6 items · Default
[]workenumrequiredOne of
"all","clients","internal"· Default"all"
showOthersbooleanrequiredisDefaultbooleanrequiredcreatedByNamestringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/schedule-filters" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"criteria": {
"teamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"clientIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"projectIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"templateIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"statuses": [
"draft"
],
"work": "all"
},
"showOthers": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"criteria": {
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"teamIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"clientIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"projectIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"templateIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"statuses": [
"draft"
],
"work": "all"
},
"showOthers": false,
"isDefault": false,
"createdByName": "Harbourside Dental"
}Change a saved schedule filter
PATCH/v1/schedule-filters/{id}
- Permission
scheduleFilter.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
namestringoptional1–200 characters
descriptionstringoptionalcan be nullUp to 500 characters
criteriaobjectoptionalteamMemberIdsarray of uuidoptionalUp to 500 items · Default
[]teamIdsarray of uuidoptionalUp to 100 items · Default
[]clientIdsarray of uuidoptionalUp to 500 items · Default
[]projectIdsarray of uuidoptionalUp to 500 items · Default
[]templateIdsarray of uuidoptionalUp to 100 items · Default
[]statusesarray of enumoptionalUp to 6 items · Default
[]workenumoptionalOne of
"all","clients","internal"· Default"all"
showOthersbooleanoptional
Response object
iduuidrequirednamestringrequireddescriptionstringrequiredcan be nullcriteriaobjectrequiredteamMemberIdsarray of uuidrequiredUp to 500 items · Default
[]teamIdsarray of uuidrequiredUp to 100 items · Default
[]clientIdsarray of uuidrequiredUp to 500 items · Default
[]projectIdsarray of uuidrequiredUp to 500 items · Default
[]templateIdsarray of uuidrequiredUp to 100 items · Default
[]statusesarray of enumrequiredUp to 6 items · Default
[]workenumrequiredOne of
"all","clients","internal"· Default"all"
showOthersbooleanrequiredisDefaultbooleanrequiredcreatedByNamestringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/schedule-filters/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"criteria": {
"teamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"clientIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"projectIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"templateIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"statuses": [
"draft"
],
"work": "all"
},
"showOthers": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"criteria": {
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"teamIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"clientIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"projectIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"templateIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"statuses": [
"draft"
],
"work": "all"
},
"showOthers": false,
"isDefault": false,
"createdByName": "Harbourside Dental"
}Delete a saved schedule filter
DELETE/v1/schedule-filters/{id}
- Permission
scheduleFilter.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/schedule-filters/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}Choose the filter the schedule opens with for me (null: none)
PUT/v1/schedule-filters/default
- Permission
scheduleFilter.manage- Answers
200
Request body JSON
filterIduuidrequiredcan be null
Response object
okconstantrequiredAlways
true
curl -X PUT "https://app.workscope.co.uk/v1/schedule-filters/default" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"filterId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
}'Example response
{
"ok": true
}Travel time and miles between two dates
GET/v1/travel-time
- Permission
travel.view- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
from | query | daterequired | |
to | query | daterequired | |
teamMemberId | query | uuid |
Response array of object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequireddatedaterequiredYYYY-MM-DD
minutesintegerrequired-9007199254740991 to 9007199254740991
milesnumberrequiredcreatedAtstringrequired
curl "https://app.workscope.co.uk/v1/travel-time?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",
"date": "2026-11-06",
"minutes": 120,
"miles": 1,
"createdAt": "2026-11-06T09:30:00.000Z"
}
]Add travel time or miles for a person on a day
POST/v1/travel-time
- Permission
travel.manage- Answers
201
Request body JSON
teamMemberIduuidrequireddatedaterequiredYYYY-MM-DD
minutesintegeroptional0 to 1440 · Default
0milesnumberoptional0 to 10000 · Default
0
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequireddatedaterequiredYYYY-MM-DD
minutesintegerrequired-9007199254740991 to 9007199254740991
milesnumberrequiredcreatedAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/travel-time" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"date": "2026-11-06",
"minutes": 0,
"miles": 0
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"date": "2026-11-06",
"minutes": 120,
"miles": 1,
"createdAt": "2026-11-06T09:30:00.000Z"
}Change a travel time entry
PATCH/v1/travel-time/{id}
- Permission
travel.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
teamMemberIduuidoptionaldatedateoptionalYYYY-MM-DD
minutesintegeroptional0 to 1440
milesnumberoptional0 to 10000
Response object
iduuidrequiredteamMemberIduuidrequiredteamMemberNamestringrequireddatedaterequiredYYYY-MM-DD
minutesintegerrequired-9007199254740991 to 9007199254740991
milesnumberrequiredcreatedAtstringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/travel-time/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"date": "2026-11-06",
"minutes": 120,
"miles": 0
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberName": "Sam Hart",
"date": "2026-11-06",
"minutes": 120,
"miles": 1,
"createdAt": "2026-11-06T09:30:00.000Z"
}Delete a travel time entry
DELETE/v1/travel-time/{id}
- Permission
travel.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/travel-time/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}