API reference
Jobs
11 requests. Each shows the permission a key needs, what to send and what comes back.
On this page
Jobs (one-off and repeating)
GET/v1/jobs
- Permission
job.view- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
projectId | query | uuid | |
clientId | query | uuid | |
teamMemberId | query | uuid | |
active | query | enum | One of true, false |
q | query | string |
Response array of object
iduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullreplacesJobIduuidrequiredcan be nullteamMemberIduuidrequiredcan be nullnamestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredcan be nullYYYY-MM-DD
recurrenceobjectrequiredOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
breakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
bookedVisitsintegerrequired-9007199254740991 to 9007199254740991
pricesarray of objectrequiredcan be nulliduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredchecklistarray of objectrequirediduuidrequiredlabelstringrequiredinstructionstringrequiredcan be nullkindenumrequiredOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"unitstringrequiredcan be nulloptionsarray of stringrequiredaskCommentbooleanrequiredrequiredbooleanrequiredvisibleToClientsbooleanrequired
curl "https://app.workscope.co.uk/v1/jobs" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"replacesJobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"bookedVisits": -9007199254740991,
"prices": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
],
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
}
]Add a job
POST/v1/jobs
- Permission
job.manage- Answers
201
Request body JSON
clientIduuidoptionalcan be nullprojectIduuidoptionalcan be nullteamMemberIduuidoptionalcan be nullnamestringrequired1–200 characters
descriptionstringoptionalcan be nullUp to 5000 characters
notesstringoptionalcan be nullUp to 5000 characters
startDatedaterequiredYYYY-MM-DD
endDatedateoptionalcan be nullYYYY-MM-DD
recurrenceobjectoptionalDefault
{"type":"none"}Option 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
pricePenceintegeroptionalcan be null0 to 100000000
dayPricesarray of objectoptionalcan be null1–7 items
dayintegerrequired0 to 6
pricePenceintegerrequired0 to 100000000
templateIduuidoptionalcan be nullcustomFieldsobjectoptionalneedsClockInbooleanoptionalcan be nullopenToTeamIdsarray of uuidoptionalUp to 100 items
openToTeamMemberIdsarray of uuidoptionalUp to 500 items
checklistarray of objectoptionalUp to 50 items
iduuidoptionallabelstringrequired1–200 characters
instructionstringoptionalcan be nullUp to 1000 characters
kindenumoptionalOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"· Default"tick"unitstringoptionalcan be nullUp to 20 characters
optionsarray of stringoptionalUp to 30 items · Default
[]askCommentbooleanoptionalDefault
falserequiredbooleanoptionalDefault
falsevisibleToClientsbooleanoptionalDefault
false
fromQuoteobjectoptionalquoteIduuidrequiredlineIduuidrequired
Response object
iduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullreplacesJobIduuidrequiredcan be nullteamMemberIduuidrequiredcan be nullnamestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredcan be nullYYYY-MM-DD
recurrenceobjectrequiredOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
breakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
bookedVisitsintegerrequired-9007199254740991 to 9007199254740991
pricesarray of objectrequiredcan be nulliduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredchecklistarray of objectrequirediduuidrequiredlabelstringrequiredinstructionstringrequiredcan be nullkindenumrequiredOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"unitstringrequiredcan be nulloptionsarray of stringrequiredaskCommentbooleanrequiredrequiredbooleanrequiredvisibleToClientsbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/jobs" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"pricePence": 4500,
"dayPrices": [
{
"day": 0,
"pricePence": 4500
}
],
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
],
"fromQuote": {
"quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"lineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
}
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"replacesJobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"bookedVisits": -9007199254740991,
"prices": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
],
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
}One job
GET/v1/jobs/{id}
- Permission
job.view- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullreplacesJobIduuidrequiredcan be nullteamMemberIduuidrequiredcan be nullnamestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredcan be nullYYYY-MM-DD
recurrenceobjectrequiredOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
breakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
bookedVisitsintegerrequired-9007199254740991 to 9007199254740991
pricesarray of objectrequiredcan be nulliduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredchecklistarray of objectrequirediduuidrequiredlabelstringrequiredinstructionstringrequiredcan be nullkindenumrequiredOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"unitstringrequiredcan be nulloptionsarray of stringrequiredaskCommentbooleanrequiredrequiredbooleanrequiredvisibleToClientsbooleanrequired
curl "https://app.workscope.co.uk/v1/jobs/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"replacesJobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"bookedVisits": -9007199254740991,
"prices": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
],
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
}Change a job. Its pattern and start date are fixed once a visit is booked; use change to change it from a date.
PATCH/v1/jobs/{id}
- Permission
job.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
projectIduuidoptionalcan be nullteamMemberIduuidoptionalcan be nullnamestringoptional1–200 characters
descriptionstringoptionalcan be nullUp to 5000 characters
notesstringoptionalcan be nullUp to 5000 characters
startDatedateoptionalYYYY-MM-DD
endDatedateoptionalcan be nullYYYY-MM-DD
recurrenceobjectoptionalOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
templateIduuidoptionalcan be nullcustomFieldsobjectoptionalneedsClockInbooleanoptionalcan be nullopenToTeamIdsarray of uuidoptionalUp to 100 items
openToTeamMemberIdsarray of uuidoptionalUp to 500 items
checklistarray of objectoptionalUp to 50 items
iduuidoptionallabelstringrequired1–200 characters
instructionstringoptionalcan be nullUp to 1000 characters
kindenumoptionalOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"· Default"tick"unitstringoptionalcan be nullUp to 20 characters
optionsarray of stringoptionalUp to 30 items · Default
[]askCommentbooleanoptionalDefault
falserequiredbooleanoptionalDefault
falsevisibleToClientsbooleanoptionalDefault
false
Response object
iduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullreplacesJobIduuidrequiredcan be nullteamMemberIduuidrequiredcan be nullnamestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredcan be nullYYYY-MM-DD
recurrenceobjectrequiredOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
breakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
bookedVisitsintegerrequired-9007199254740991 to 9007199254740991
pricesarray of objectrequiredcan be nulliduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredchecklistarray of objectrequirediduuidrequiredlabelstringrequiredinstructionstringrequiredcan be nullkindenumrequiredOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"unitstringrequiredcan be nulloptionsarray of stringrequiredaskCommentbooleanrequiredrequiredbooleanrequiredvisibleToClientsbooleanrequired
curl -X PATCH "https://app.workscope.co.uk/v1/jobs/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"templateId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"openToTeamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"checklist": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"replacesJobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"bookedVisits": -9007199254740991,
"prices": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
],
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
}Change a repeat booking from a date: end it the day before, remove its unfinished bookings from the date, and start the new version
POST/v1/jobs/{id}/change
- Permission
job.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
effectiveFromdaterequiredYYYY-MM-DD
recurrenceobjectoptionalOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
teamMemberIduuidoptionalcan be nullnamestringoptional1–200 characters
descriptionstringoptionalcan be nullUp to 5000 characters
notesstringoptionalcan be nullUp to 5000 characters
endDatedateoptionalcan be nullYYYY-MM-DD
pricePenceintegeroptionalcan be null0 to 100000000
dayPricesarray of objectoptionalcan be null1–7 items
dayintegerrequired0 to 6
pricePenceintegerrequired0 to 100000000
templateIduuidoptionalcan be nullcustomFieldsobjectoptionalopenToTeamIdsarray of uuidoptionalUp to 100 items
openToTeamMemberIdsarray of uuidoptionalUp to 500 items
rebookbooleanoptionalDefault
truerepriceFinishedbooleanoptionalDefault
false
Response object
effectiveFromdaterequiredYYYY-MM-DD
oldJobEndsOndaterequiredcan be nullYYYY-MM-DD
inPlacebooleanrequiredjobobjectrequiredcan be nulliduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullreplacesJobIduuidrequiredcan be nullteamMemberIduuidrequiredcan be nullnamestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredcan be nullYYYY-MM-DD
recurrenceobjectrequiredOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
breakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
bookedVisitsintegerrequired-9007199254740991 to 9007199254740991
pricesarray of objectrequiredcan be nulliduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredchecklistarray of objectrequirediduuidrequiredlabelstringrequiredinstructionstringrequiredcan be nullkindenumrequiredOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"unitstringrequiredcan be nulloptionsarray of stringrequiredaskCommentbooleanrequiredrequiredbooleanrequiredvisibleToClientsbooleanrequired
removedarray 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
keptarray 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
keptBecauseenumrequiredOne of
"complete","signed_off","failed","price_locked"
bookedarray of objectrequireddatedaterequiredYYYY-MM-DD
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
overnightbooleanrequiredpastbooleanrequired
backdatedbooleanrequiredpriceOnlybooleanrequiredfollowingintegerrequired-9007199254740991 to 9007199254740991
finishedobjectrequiredcan be nullchangesarray of objectrequiredbookingIduuidrequireddatedaterequiredYYYY-MM-DD
fromPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
toPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
skippedInvoicedintegerrequired-9007199254740991 to 9007199254740991
skippedOwnPriceintegerrequired-9007199254740991 to 9007199254740991
beforePenceintegerrequired-9007199254740991 to 9007199254740991
afterPenceintegerrequired-9007199254740991 to 9007199254740991
appliedbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/jobs/ID/change" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"effectiveFrom": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"endDate": "2026-11-06",
"pricePence": 4500,
"dayPrices": [
{
"day": 0,
"pricePence": 4500
}
],
"templateId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"customFields": {
"contract-number": "CN-1042"
},
"openToTeamIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"openToTeamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"rebook": true,
"repriceFinished": false
}'Example response
{
"effectiveFrom": "2026-11-06",
"oldJobEndsOn": "2026-11-06",
"inPlace": false,
"job": {
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"replacesJobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"bookedVisits": -9007199254740991,
"prices": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
],
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
},
"removed": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"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": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"jobId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"visitNumber": -9007199254740991,
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"teamMemberName": "Sam Hart",
"openToTeamIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"openToTeamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"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": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"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
}
}
],
"kept": [
{
"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
},
"keptBecause": "complete"
}
],
"booked": [
{
"date": "2026-11-06",
"start": "09:00",
"end": "11:00",
"overnight": false,
"past": false
}
],
"backdated": false,
"priceOnly": false,
"following": -9007199254740991,
"finished": {
"changes": [
{
"bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"date": "2026-11-06",
"fromPence": 4500,
"toPence": 4500
}
],
"skippedInvoiced": -9007199254740991,
"skippedOwnPrice": -9007199254740991,
"beforePence": 4500,
"afterPence": 4500,
"applied": false
}
}What changing a repeat booking from a date would remove, keep and book. Changes nothing.
POST/v1/jobs/{id}/change/preview
- Permission
job.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
effectiveFromdaterequiredYYYY-MM-DD
recurrenceobjectoptionalOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
teamMemberIduuidoptionalcan be nullnamestringoptional1–200 characters
descriptionstringoptionalcan be nullUp to 5000 characters
notesstringoptionalcan be nullUp to 5000 characters
endDatedateoptionalcan be nullYYYY-MM-DD
pricePenceintegeroptionalcan be null0 to 100000000
dayPricesarray of objectoptionalcan be null1–7 items
dayintegerrequired0 to 6
pricePenceintegerrequired0 to 100000000
templateIduuidoptionalcan be nullcustomFieldsobjectoptionalopenToTeamIdsarray of uuidoptionalUp to 100 items
openToTeamMemberIdsarray of uuidoptionalUp to 500 items
rebookbooleanoptionalDefault
truerepriceFinishedbooleanoptionalDefault
false
Response object
effectiveFromdaterequiredYYYY-MM-DD
oldJobEndsOndaterequiredcan be nullYYYY-MM-DD
inPlacebooleanrequiredjobobjectrequiredcan be nulliduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullreplacesJobIduuidrequiredcan be nullteamMemberIduuidrequiredcan be nullnamestringrequireddescriptionstringrequiredcan be nullnotesstringrequiredcan be nullstartDatedaterequiredYYYY-MM-DD
endDatedaterequiredcan be nullYYYY-MM-DD
recurrenceobjectrequiredOption 1: object
typeconstantrequiredAlways
"none"
Option 2: object
typeconstantrequiredAlways
"interval"unitenumrequiredOne of
"days","weeks","months","years"everyintegerrequired1 to 366
countintegeroptional1 to 5000
Option 3: object
typeconstantrequiredAlways
"days_of_week"everyintegeroptional1 to 52
daysarray of objectrequired1–7 items
dayintegerrequired0 to 6
starttimeoptionalcan be nullHH:MM, 24-hour
endtimeoptionalcan be nullHH:MM, 24-hour
breakMinutesintegeroptionalcan be null0 to 1440
durationMinutesintegeroptionalcan be null0 to 10080
countintegeroptional1 to 5000
Option 4: object
typeconstantrequiredAlways
"monthly_date"everyintegeroptional1 to 24
dayOfMonthintegerrequired1 to 31
countintegeroptional1 to 5000
Option 5: object
typeconstantrequiredAlways
"monthly_weekday"everyintegeroptional1 to 24
weekconstantrequiredOption 1: constant
Always
1Option 2: constant
Always
2Option 3: constant
Always
3Option 4: constant
Always
4Option 5: constant
Always
-1dayintegerrequired0 to 6
countintegeroptional1 to 5000
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
breakMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
durationMinutesintegerrequiredcan be null-9007199254740991 to 9007199254740991
bookedVisitsintegerrequired-9007199254740991 to 9007199254740991
pricesarray of objectrequiredcan be nulliduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
internalbooleanrequiredbackdatedAtstringrequiredcan be nulltemplateIduuidrequiredcan be nulltemplateNamestringrequiredcan be nullcustomFieldsobjectrequiredneedsClockInbooleanrequiredcan be nullopenToTeamIdsarray of uuidrequiredopenToTeamMemberIdsarray of uuidrequiredchecklistarray of objectrequirediduuidrequiredlabelstringrequiredinstructionstringrequiredcan be nullkindenumrequiredOne of
"tick","text","textarea","number","date","time","checkbox","select","photo"unitstringrequiredcan be nulloptionsarray of stringrequiredaskCommentbooleanrequiredrequiredbooleanrequiredvisibleToClientsbooleanrequired
removedarray 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
keptarray 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
keptBecauseenumrequiredOne of
"complete","signed_off","failed","price_locked"
bookedarray of objectrequireddatedaterequiredYYYY-MM-DD
starttimerequiredcan be nullHH:MM, 24-hour
endtimerequiredcan be nullHH:MM, 24-hour
overnightbooleanrequiredpastbooleanrequired
backdatedbooleanrequiredpriceOnlybooleanrequiredfollowingintegerrequired-9007199254740991 to 9007199254740991
finishedobjectrequiredcan be nullchangesarray of objectrequiredbookingIduuidrequireddatedaterequiredYYYY-MM-DD
fromPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
toPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
skippedInvoicedintegerrequired-9007199254740991 to 9007199254740991
skippedOwnPriceintegerrequired-9007199254740991 to 9007199254740991
beforePenceintegerrequired-9007199254740991 to 9007199254740991
afterPenceintegerrequired-9007199254740991 to 9007199254740991
appliedbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/jobs/ID/change/preview" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"effectiveFrom": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"teamMemberId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"endDate": "2026-11-06",
"pricePence": 4500,
"dayPrices": [
{
"day": 0,
"pricePence": 4500
}
],
"templateId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"customFields": {
"contract-number": "CN-1042"
},
"openToTeamIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"openToTeamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"rebook": true,
"repriceFinished": false
}'Example response
{
"effectiveFrom": "2026-11-06",
"oldJobEndsOn": "2026-11-06",
"inPlace": false,
"job": {
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"replacesJobId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"notes": "Side gate code is on the key safe.",
"startDate": "2026-11-06",
"endDate": "2026-11-06",
"recurrence": {
"type": "none"
},
"start": "09:00",
"end": "11:00",
"breakMinutes": 120,
"durationMinutes": 120,
"bookedVisits": -9007199254740991,
"prices": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
],
"internal": false,
"backdatedAt": "2026-11-06T09:30:00.000Z",
"templateId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"templateName": "Harbourside Dental",
"customFields": {
"contract-number": "CN-1042"
},
"needsClockIn": false,
"openToTeamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"openToTeamMemberIds": [
"b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
],
"checklist": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"label": "text",
"instruction": "text",
"kind": "tick",
"unit": "text",
"options": [
"text"
],
"askComment": false,
"required": false,
"visibleToClients": false
}
]
},
"removed": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"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": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"jobId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"visitNumber": -9007199254740991,
"teamMemberId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"teamMemberName": "Sam Hart",
"openToTeamIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"openToTeamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"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": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"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
}
}
],
"kept": [
{
"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
},
"keptBecause": "complete"
}
],
"booked": [
{
"date": "2026-11-06",
"start": "09:00",
"end": "11:00",
"overnight": false,
"past": false
}
],
"backdated": false,
"priceOnly": false,
"following": -9007199254740991,
"finished": {
"changes": [
{
"bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"date": "2026-11-06",
"fromPence": 4500,
"toPence": 4500
}
],
"skippedInvoiced": -9007199254740991,
"skippedOwnPrice": -9007199254740991,
"beforePence": 4500,
"afterPence": 4500,
"applied": false
}
}Set a price from a date
POST/v1/jobs/{id}/prices
- Permission
price.manage- Answers
201
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
effectiveFromdaterequiredYYYY-MM-DD
pricePenceintegeroptional0 to 100000000
dayPricesarray of objectoptional1–7 items
dayintegerrequired0 to 6
pricePenceintegerrequired0 to 100000000
Response array of object
iduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
curl -X POST "https://app.workscope.co.uk/v1/jobs/ID/prices" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"dayPrices": [
{
"day": 0,
"pricePence": 4500
}
]
}'Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
]Remove a price from the list
DELETE/v1/jobs/{id}/prices/{priceId}
- Permission
price.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired | |
priceId | path | uuidrequired |
Response array of object
iduuidrequiredeffectiveFromdaterequiredYYYY-MM-DD
pricePenceintegerrequired-9007199254740991 to 9007199254740991
dayintegerrequiredcan be null0 to 6
curl -X DELETE "https://app.workscope.co.uk/v1/jobs/ID/prices/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"effectiveFrom": "2026-11-06",
"pricePence": 4500,
"day": 0
}
]Bring its finished visits from a date, not yet invoiced, in line with its price list (or a proposed price). apply false: just say what would change.
POST/v1/jobs/{id}/reprice
- Permission
price.unlock- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
fromdaterequiredYYYY-MM-DD
applybooleanoptionalDefault
falseproposedobjectoptionalpricePenceintegeroptional0 to 100000000
dayPricesarray of objectoptional1–7 items
dayintegerrequired0 to 6
pricePenceintegerrequired0 to 100000000
Response object
changesarray of objectrequiredbookingIduuidrequireddatedaterequiredYYYY-MM-DD
fromPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
toPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
skippedInvoicedintegerrequired-9007199254740991 to 9007199254740991
skippedOwnPriceintegerrequired-9007199254740991 to 9007199254740991
beforePenceintegerrequired-9007199254740991 to 9007199254740991
afterPenceintegerrequired-9007199254740991 to 9007199254740991
appliedbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/jobs/ID/reprice" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"from": "2026-11-06",
"apply": false,
"proposed": {
"pricePence": 4500,
"dayPrices": [
{
"day": 0,
"pricePence": 4500
}
]
}
}'Example response
{
"changes": [
{
"bookingId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"date": "2026-11-06",
"fromPence": 4500,
"toPence": 4500
}
],
"skippedInvoiced": -9007199254740991,
"skippedOwnPrice": -9007199254740991,
"beforePence": 4500,
"afterPence": 4500,
"applied": false
}Book planned visits by number
POST/v1/jobs/{id}/visits/book
- Permission
booking.manage- Answers
201
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
numbersarray of integerrequired1–500 items
Response array of object
iduuidrequiredstatusenumrequiredOne 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
curl -X POST "https://app.workscope.co.uk/v1/jobs/ID/visits/book" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"numbers": [
1
]
}'Example response
[
{
"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
}
}
]Take planned visits out of a repeat booking so they no longer show (missed visits)
POST/v1/jobs/{id}/visits/skip
- Permission
booking.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
numbersarray of integerrequired1–500 items
Response object
okconstantrequiredAlways
true
curl -X POST "https://app.workscope.co.uk/v1/jobs/ID/visits/skip" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"numbers": [
1
]
}'Example response
{
"ok": true
}