WorkscopeAPI Open Workscope

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

NameInKind
projectIdqueryuuid
clientIdqueryuuid
teamMemberIdqueryuuid
activequeryenumOne of true, false
qquerystring

Response array of object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • replacesJobIduuidrequiredcan be null
  • teamMemberIduuidrequiredcan be null
  • namestringrequired
  • descriptionstringrequiredcan be null
  • notesstringrequiredcan be null
  • startDatedaterequired

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • recurrenceobjectrequired

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimerequiredcan be null

    HH:MM, 24-hour

  • endtimerequiredcan be null

    HH:MM, 24-hour

  • breakMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • durationMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • bookedVisitsintegerrequired

    -9007199254740991 to 9007199254740991

  • pricesarray of objectrequiredcan be null
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • pricePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • dayintegerrequiredcan be null

      0 to 6

  • internalbooleanrequired
  • backdatedAtstringrequiredcan be null
  • templateIduuidrequiredcan be null
  • templateNamestringrequiredcan be null
  • customFieldsobjectrequired
  • needsClockInbooleanrequiredcan be null
  • openToTeamIdsarray of uuidrequired
  • openToTeamMemberIdsarray of uuidrequired
  • checklistarray of objectrequired
    • iduuidrequired
    • labelstringrequired
    • instructionstringrequiredcan be null
    • kindenumrequired

      One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo"

    • unitstringrequiredcan be null
    • optionsarray of stringrequired
    • askCommentbooleanrequired
    • requiredbooleanrequired
    • visibleToClientsbooleanrequired
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 null
  • projectIduuidoptionalcan be null
  • teamMemberIduuidoptionalcan be null
  • namestringrequired

    1–200 characters

  • descriptionstringoptionalcan be null

    Up to 5000 characters

  • notesstringoptionalcan be null

    Up to 5000 characters

  • startDatedaterequired

    YYYY-MM-DD

  • endDatedateoptionalcan be null

    YYYY-MM-DD

  • recurrenceobjectoptional

    Default {"type":"none"}

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimeoptionalcan be null

    HH:MM, 24-hour

  • endtimeoptionalcan be null

    HH:MM, 24-hour

  • breakMinutesintegeroptionalcan be null

    0 to 1440

  • durationMinutesintegeroptionalcan be null

    0 to 10080

  • pricePenceintegeroptionalcan be null

    0 to 100000000

  • dayPricesarray of objectoptionalcan be null

    1–7 items

    • dayintegerrequired

      0 to 6

    • pricePenceintegerrequired

      0 to 100000000

  • templateIduuidoptionalcan be null
  • customFieldsobjectoptional
  • needsClockInbooleanoptionalcan be null
  • openToTeamIdsarray of uuidoptional

    Up to 100 items

  • openToTeamMemberIdsarray of uuidoptional

    Up to 500 items

  • checklistarray of objectoptional

    Up to 50 items

    • iduuidoptional
    • labelstringrequired

      1–200 characters

    • instructionstringoptionalcan be null

      Up to 1000 characters

    • kindenumoptional

      One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo" · Default "tick"

    • unitstringoptionalcan be null

      Up to 20 characters

    • optionsarray of stringoptional

      Up to 30 items · Default []

    • askCommentbooleanoptional

      Default false

    • requiredbooleanoptional

      Default false

    • visibleToClientsbooleanoptional

      Default false

  • fromQuoteobjectoptional
    • quoteIduuidrequired
    • lineIduuidrequired

Response object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • replacesJobIduuidrequiredcan be null
  • teamMemberIduuidrequiredcan be null
  • namestringrequired
  • descriptionstringrequiredcan be null
  • notesstringrequiredcan be null
  • startDatedaterequired

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • recurrenceobjectrequired

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimerequiredcan be null

    HH:MM, 24-hour

  • endtimerequiredcan be null

    HH:MM, 24-hour

  • breakMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • durationMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • bookedVisitsintegerrequired

    -9007199254740991 to 9007199254740991

  • pricesarray of objectrequiredcan be null
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • pricePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • dayintegerrequiredcan be null

      0 to 6

  • internalbooleanrequired
  • backdatedAtstringrequiredcan be null
  • templateIduuidrequiredcan be null
  • templateNamestringrequiredcan be null
  • customFieldsobjectrequired
  • needsClockInbooleanrequiredcan be null
  • openToTeamIdsarray of uuidrequired
  • openToTeamMemberIdsarray of uuidrequired
  • checklistarray of objectrequired
    • iduuidrequired
    • labelstringrequired
    • instructionstringrequiredcan be null
    • kindenumrequired

      One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo"

    • unitstringrequiredcan be null
    • optionsarray of stringrequired
    • askCommentbooleanrequired
    • requiredbooleanrequired
    • visibleToClientsbooleanrequired
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

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • replacesJobIduuidrequiredcan be null
  • teamMemberIduuidrequiredcan be null
  • namestringrequired
  • descriptionstringrequiredcan be null
  • notesstringrequiredcan be null
  • startDatedaterequired

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • recurrenceobjectrequired

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimerequiredcan be null

    HH:MM, 24-hour

  • endtimerequiredcan be null

    HH:MM, 24-hour

  • breakMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • durationMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • bookedVisitsintegerrequired

    -9007199254740991 to 9007199254740991

  • pricesarray of objectrequiredcan be null
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • pricePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • dayintegerrequiredcan be null

      0 to 6

  • internalbooleanrequired
  • backdatedAtstringrequiredcan be null
  • templateIduuidrequiredcan be null
  • templateNamestringrequiredcan be null
  • customFieldsobjectrequired
  • needsClockInbooleanrequiredcan be null
  • openToTeamIdsarray of uuidrequired
  • openToTeamMemberIdsarray of uuidrequired
  • checklistarray of objectrequired
    • iduuidrequired
    • labelstringrequired
    • instructionstringrequiredcan be null
    • kindenumrequired

      One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo"

    • unitstringrequiredcan be null
    • optionsarray of stringrequired
    • askCommentbooleanrequired
    • requiredbooleanrequired
    • visibleToClientsbooleanrequired
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

NameInKind
idpathuuidrequired

Request body JSON

  • projectIduuidoptionalcan be null
  • teamMemberIduuidoptionalcan be null
  • namestringoptional

    1–200 characters

  • descriptionstringoptionalcan be null

    Up to 5000 characters

  • notesstringoptionalcan be null

    Up to 5000 characters

  • startDatedateoptional

    YYYY-MM-DD

  • endDatedateoptionalcan be null

    YYYY-MM-DD

  • recurrenceobjectoptional

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimeoptionalcan be null

    HH:MM, 24-hour

  • endtimeoptionalcan be null

    HH:MM, 24-hour

  • breakMinutesintegeroptionalcan be null

    0 to 1440

  • durationMinutesintegeroptionalcan be null

    0 to 10080

  • templateIduuidoptionalcan be null
  • customFieldsobjectoptional
  • needsClockInbooleanoptionalcan be null
  • openToTeamIdsarray of uuidoptional

    Up to 100 items

  • openToTeamMemberIdsarray of uuidoptional

    Up to 500 items

  • checklistarray of objectoptional

    Up to 50 items

    • iduuidoptional
    • labelstringrequired

      1–200 characters

    • instructionstringoptionalcan be null

      Up to 1000 characters

    • kindenumoptional

      One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo" · Default "tick"

    • unitstringoptionalcan be null

      Up to 20 characters

    • optionsarray of stringoptional

      Up to 30 items · Default []

    • askCommentbooleanoptional

      Default false

    • requiredbooleanoptional

      Default false

    • visibleToClientsbooleanoptional

      Default false

Response object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • replacesJobIduuidrequiredcan be null
  • teamMemberIduuidrequiredcan be null
  • namestringrequired
  • descriptionstringrequiredcan be null
  • notesstringrequiredcan be null
  • startDatedaterequired

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • recurrenceobjectrequired

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimerequiredcan be null

    HH:MM, 24-hour

  • endtimerequiredcan be null

    HH:MM, 24-hour

  • breakMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • durationMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • bookedVisitsintegerrequired

    -9007199254740991 to 9007199254740991

  • pricesarray of objectrequiredcan be null
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • pricePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • dayintegerrequiredcan be null

      0 to 6

  • internalbooleanrequired
  • backdatedAtstringrequiredcan be null
  • templateIduuidrequiredcan be null
  • templateNamestringrequiredcan be null
  • customFieldsobjectrequired
  • needsClockInbooleanrequiredcan be null
  • openToTeamIdsarray of uuidrequired
  • openToTeamMemberIdsarray of uuidrequired
  • checklistarray of objectrequired
    • iduuidrequired
    • labelstringrequired
    • instructionstringrequiredcan be null
    • kindenumrequired

      One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo"

    • unitstringrequiredcan be null
    • optionsarray of stringrequired
    • askCommentbooleanrequired
    • requiredbooleanrequired
    • visibleToClientsbooleanrequired
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

NameInKind
idpathuuidrequired

Request body JSON

  • effectiveFromdaterequired

    YYYY-MM-DD

  • recurrenceobjectoptional

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimeoptionalcan be null

    HH:MM, 24-hour

  • endtimeoptionalcan be null

    HH:MM, 24-hour

  • breakMinutesintegeroptionalcan be null

    0 to 1440

  • durationMinutesintegeroptionalcan be null

    0 to 10080

  • teamMemberIduuidoptionalcan be null
  • namestringoptional

    1–200 characters

  • descriptionstringoptionalcan be null

    Up to 5000 characters

  • notesstringoptionalcan be null

    Up to 5000 characters

  • endDatedateoptionalcan be null

    YYYY-MM-DD

  • pricePenceintegeroptionalcan be null

    0 to 100000000

  • dayPricesarray of objectoptionalcan be null

    1–7 items

    • dayintegerrequired

      0 to 6

    • pricePenceintegerrequired

      0 to 100000000

  • templateIduuidoptionalcan be null
  • customFieldsobjectoptional
  • openToTeamIdsarray of uuidoptional

    Up to 100 items

  • openToTeamMemberIdsarray of uuidoptional

    Up to 500 items

  • rebookbooleanoptional

    Default true

  • repriceFinishedbooleanoptional

    Default false

Response object

  • effectiveFromdaterequired

    YYYY-MM-DD

  • oldJobEndsOndaterequiredcan be null

    YYYY-MM-DD

  • inPlacebooleanrequired
  • jobobjectrequiredcan be null
    • iduuidrequired
    • clientIduuidrequired
    • clientNamestringrequired
    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • replacesJobIduuidrequiredcan be null
    • teamMemberIduuidrequiredcan be null
    • namestringrequired
    • descriptionstringrequiredcan be null
    • notesstringrequiredcan be null
    • startDatedaterequired

      YYYY-MM-DD

    • endDatedaterequiredcan be null

      YYYY-MM-DD

    • recurrenceobjectrequired

      Option 1: object

      • typeconstantrequired

        Always "none"

      Option 2: object

      • typeconstantrequired

        Always "interval"

      • unitenumrequired

        One of "days", "weeks", "months", "years"

      • everyintegerrequired

        1 to 366

      • countintegeroptional

        1 to 5000

      Option 3: object

      • typeconstantrequired

        Always "days_of_week"

      • everyintegeroptional

        1 to 52

      • daysarray of objectrequired

        1–7 items

        • dayintegerrequired

          0 to 6

        • starttimeoptionalcan be null

          HH:MM, 24-hour

        • endtimeoptionalcan be null

          HH:MM, 24-hour

        • breakMinutesintegeroptionalcan be null

          0 to 1440

        • durationMinutesintegeroptionalcan be null

          0 to 10080

      • countintegeroptional

        1 to 5000

      Option 4: object

      • typeconstantrequired

        Always "monthly_date"

      • everyintegeroptional

        1 to 24

      • dayOfMonthintegerrequired

        1 to 31

      • countintegeroptional

        1 to 5000

      Option 5: object

      • typeconstantrequired

        Always "monthly_weekday"

      • everyintegeroptional

        1 to 24

      • weekconstantrequired

        Option 1: constant

        Always 1

        Option 2: constant

        Always 2

        Option 3: constant

        Always 3

        Option 4: constant

        Always 4

        Option 5: constant

        Always -1

      • dayintegerrequired

        0 to 6

      • countintegeroptional

        1 to 5000

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • breakMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • durationMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • bookedVisitsintegerrequired

      -9007199254740991 to 9007199254740991

    • pricesarray of objectrequiredcan be null
      • iduuidrequired
      • effectiveFromdaterequired

        YYYY-MM-DD

      • pricePenceintegerrequired

        -9007199254740991 to 9007199254740991

      • dayintegerrequiredcan be null

        0 to 6

    • internalbooleanrequired
    • backdatedAtstringrequiredcan be null
    • templateIduuidrequiredcan be null
    • templateNamestringrequiredcan be null
    • customFieldsobjectrequired
    • needsClockInbooleanrequiredcan be null
    • openToTeamIdsarray of uuidrequired
    • openToTeamMemberIdsarray of uuidrequired
    • checklistarray of objectrequired
      • iduuidrequired
      • labelstringrequired
      • instructionstringrequiredcan be null
      • kindenumrequired

        One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo"

      • unitstringrequiredcan be null
      • optionsarray of stringrequired
      • askCommentbooleanrequired
      • requiredbooleanrequired
      • visibleToClientsbooleanrequired
  • removedarray of objectrequired
    • iduuidrequired
    • statusenumrequired

      One of "draft", "open", "active", "complete", "signed_off", "failed"

    • datedaterequiredcan be null

      YYYY-MM-DD

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • startsAtstringrequiredcan be null
    • endsAtstringrequiredcan be null
    • overnightbooleanrequired
    • breakMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • durationMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • descriptionstringrequiredcan be null
    • notesstringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • jobIduuidrequiredcan be null
    • visitNumberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • teamMemberIduuidrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • openToTeamIdsarray of uuidrequired
    • openToTeamMemberIdsarray of uuidrequired
    • openNotifyAtstringrequiredcan be null
    • priceobjectrequiredcan be null
      • penceintegerrequiredcan be null

        -9007199254740991 to 9007199254740991

      • sourceenumrequired

        One of "locked", "override", "list", "none"

      • lockedAtstringrequiredcan be null
      • lockReasonenumrequiredcan be null

        One of "completed", "signed_off", "invoiced"

      • invoiceRefstringoptionalcan be null
    • internalbooleanrequired
    • backdatedAtstringrequiredcan be null
    • templateIduuidrequiredcan be null
    • templateNamestringrequiredcan be null
    • customFieldsobjectrequired
    • needsClockInbooleanrequiredcan be null
    • clockInRequiredbooleanrequired
    • clockInMissedbooleanrequired
    • clockedInAtstringrequiredcan be null
    • clockedOutAtstringrequiredcan be null
    • clockInLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockOutLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockInDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockOutDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockInSetByNamestringrequiredcan be null
    • clockOutSetByNamestringrequiredcan be null
    • checklistobjectrequiredcan be null
      • doneintegerrequired

        -9007199254740991 to 9007199254740991

      • totalintegerrequired

        -9007199254740991 to 9007199254740991

      • mustDoLeftintegerrequired

        -9007199254740991 to 9007199254740991

  • keptarray of objectrequired
    • iduuidrequired
    • statusenumrequired

      One of "draft", "open", "active", "complete", "signed_off", "failed"

    • datedaterequiredcan be null

      YYYY-MM-DD

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • startsAtstringrequiredcan be null
    • endsAtstringrequiredcan be null
    • overnightbooleanrequired
    • breakMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • durationMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • descriptionstringrequiredcan be null
    • notesstringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • jobIduuidrequiredcan be null
    • visitNumberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • teamMemberIduuidrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • openToTeamIdsarray of uuidrequired
    • openToTeamMemberIdsarray of uuidrequired
    • openNotifyAtstringrequiredcan be null
    • priceobjectrequiredcan be null
      • penceintegerrequiredcan be null

        -9007199254740991 to 9007199254740991

      • sourceenumrequired

        One of "locked", "override", "list", "none"

      • lockedAtstringrequiredcan be null
      • lockReasonenumrequiredcan be null

        One of "completed", "signed_off", "invoiced"

      • invoiceRefstringoptionalcan be null
    • internalbooleanrequired
    • backdatedAtstringrequiredcan be null
    • templateIduuidrequiredcan be null
    • templateNamestringrequiredcan be null
    • customFieldsobjectrequired
    • needsClockInbooleanrequiredcan be null
    • clockInRequiredbooleanrequired
    • clockInMissedbooleanrequired
    • clockedInAtstringrequiredcan be null
    • clockedOutAtstringrequiredcan be null
    • clockInLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockOutLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockInDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockOutDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockInSetByNamestringrequiredcan be null
    • clockOutSetByNamestringrequiredcan be null
    • checklistobjectrequiredcan be null
      • doneintegerrequired

        -9007199254740991 to 9007199254740991

      • totalintegerrequired

        -9007199254740991 to 9007199254740991

      • mustDoLeftintegerrequired

        -9007199254740991 to 9007199254740991

    • keptBecauseenumrequired

      One of "complete", "signed_off", "failed", "price_locked"

  • bookedarray of objectrequired
    • datedaterequired

      YYYY-MM-DD

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • overnightbooleanrequired
    • pastbooleanrequired
  • backdatedbooleanrequired
  • priceOnlybooleanrequired
  • followingintegerrequired

    -9007199254740991 to 9007199254740991

  • finishedobjectrequiredcan be null
    • changesarray of objectrequired
      • bookingIduuidrequired
      • datedaterequired

        YYYY-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

NameInKind
idpathuuidrequired

Request body JSON

  • effectiveFromdaterequired

    YYYY-MM-DD

  • recurrenceobjectoptional

    Option 1: object

    • typeconstantrequired

      Always "none"

    Option 2: object

    • typeconstantrequired

      Always "interval"

    • unitenumrequired

      One of "days", "weeks", "months", "years"

    • everyintegerrequired

      1 to 366

    • countintegeroptional

      1 to 5000

    Option 3: object

    • typeconstantrequired

      Always "days_of_week"

    • everyintegeroptional

      1 to 52

    • daysarray of objectrequired

      1–7 items

      • dayintegerrequired

        0 to 6

      • starttimeoptionalcan be null

        HH:MM, 24-hour

      • endtimeoptionalcan be null

        HH:MM, 24-hour

      • breakMinutesintegeroptionalcan be null

        0 to 1440

      • durationMinutesintegeroptionalcan be null

        0 to 10080

    • countintegeroptional

      1 to 5000

    Option 4: object

    • typeconstantrequired

      Always "monthly_date"

    • everyintegeroptional

      1 to 24

    • dayOfMonthintegerrequired

      1 to 31

    • countintegeroptional

      1 to 5000

    Option 5: object

    • typeconstantrequired

      Always "monthly_weekday"

    • everyintegeroptional

      1 to 24

    • weekconstantrequired

      Option 1: constant

      Always 1

      Option 2: constant

      Always 2

      Option 3: constant

      Always 3

      Option 4: constant

      Always 4

      Option 5: constant

      Always -1

    • dayintegerrequired

      0 to 6

    • countintegeroptional

      1 to 5000

  • starttimeoptionalcan be null

    HH:MM, 24-hour

  • endtimeoptionalcan be null

    HH:MM, 24-hour

  • breakMinutesintegeroptionalcan be null

    0 to 1440

  • durationMinutesintegeroptionalcan be null

    0 to 10080

  • teamMemberIduuidoptionalcan be null
  • namestringoptional

    1–200 characters

  • descriptionstringoptionalcan be null

    Up to 5000 characters

  • notesstringoptionalcan be null

    Up to 5000 characters

  • endDatedateoptionalcan be null

    YYYY-MM-DD

  • pricePenceintegeroptionalcan be null

    0 to 100000000

  • dayPricesarray of objectoptionalcan be null

    1–7 items

    • dayintegerrequired

      0 to 6

    • pricePenceintegerrequired

      0 to 100000000

  • templateIduuidoptionalcan be null
  • customFieldsobjectoptional
  • openToTeamIdsarray of uuidoptional

    Up to 100 items

  • openToTeamMemberIdsarray of uuidoptional

    Up to 500 items

  • rebookbooleanoptional

    Default true

  • repriceFinishedbooleanoptional

    Default false

Response object

  • effectiveFromdaterequired

    YYYY-MM-DD

  • oldJobEndsOndaterequiredcan be null

    YYYY-MM-DD

  • inPlacebooleanrequired
  • jobobjectrequiredcan be null
    • iduuidrequired
    • clientIduuidrequired
    • clientNamestringrequired
    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • replacesJobIduuidrequiredcan be null
    • teamMemberIduuidrequiredcan be null
    • namestringrequired
    • descriptionstringrequiredcan be null
    • notesstringrequiredcan be null
    • startDatedaterequired

      YYYY-MM-DD

    • endDatedaterequiredcan be null

      YYYY-MM-DD

    • recurrenceobjectrequired

      Option 1: object

      • typeconstantrequired

        Always "none"

      Option 2: object

      • typeconstantrequired

        Always "interval"

      • unitenumrequired

        One of "days", "weeks", "months", "years"

      • everyintegerrequired

        1 to 366

      • countintegeroptional

        1 to 5000

      Option 3: object

      • typeconstantrequired

        Always "days_of_week"

      • everyintegeroptional

        1 to 52

      • daysarray of objectrequired

        1–7 items

        • dayintegerrequired

          0 to 6

        • starttimeoptionalcan be null

          HH:MM, 24-hour

        • endtimeoptionalcan be null

          HH:MM, 24-hour

        • breakMinutesintegeroptionalcan be null

          0 to 1440

        • durationMinutesintegeroptionalcan be null

          0 to 10080

      • countintegeroptional

        1 to 5000

      Option 4: object

      • typeconstantrequired

        Always "monthly_date"

      • everyintegeroptional

        1 to 24

      • dayOfMonthintegerrequired

        1 to 31

      • countintegeroptional

        1 to 5000

      Option 5: object

      • typeconstantrequired

        Always "monthly_weekday"

      • everyintegeroptional

        1 to 24

      • weekconstantrequired

        Option 1: constant

        Always 1

        Option 2: constant

        Always 2

        Option 3: constant

        Always 3

        Option 4: constant

        Always 4

        Option 5: constant

        Always -1

      • dayintegerrequired

        0 to 6

      • countintegeroptional

        1 to 5000

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • breakMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • durationMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • bookedVisitsintegerrequired

      -9007199254740991 to 9007199254740991

    • pricesarray of objectrequiredcan be null
      • iduuidrequired
      • effectiveFromdaterequired

        YYYY-MM-DD

      • pricePenceintegerrequired

        -9007199254740991 to 9007199254740991

      • dayintegerrequiredcan be null

        0 to 6

    • internalbooleanrequired
    • backdatedAtstringrequiredcan be null
    • templateIduuidrequiredcan be null
    • templateNamestringrequiredcan be null
    • customFieldsobjectrequired
    • needsClockInbooleanrequiredcan be null
    • openToTeamIdsarray of uuidrequired
    • openToTeamMemberIdsarray of uuidrequired
    • checklistarray of objectrequired
      • iduuidrequired
      • labelstringrequired
      • instructionstringrequiredcan be null
      • kindenumrequired

        One of "tick", "text", "textarea", "number", "date", "time", "checkbox", "select", "photo"

      • unitstringrequiredcan be null
      • optionsarray of stringrequired
      • askCommentbooleanrequired
      • requiredbooleanrequired
      • visibleToClientsbooleanrequired
  • removedarray of objectrequired
    • iduuidrequired
    • statusenumrequired

      One of "draft", "open", "active", "complete", "signed_off", "failed"

    • datedaterequiredcan be null

      YYYY-MM-DD

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • startsAtstringrequiredcan be null
    • endsAtstringrequiredcan be null
    • overnightbooleanrequired
    • breakMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • durationMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • descriptionstringrequiredcan be null
    • notesstringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • jobIduuidrequiredcan be null
    • visitNumberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • teamMemberIduuidrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • openToTeamIdsarray of uuidrequired
    • openToTeamMemberIdsarray of uuidrequired
    • openNotifyAtstringrequiredcan be null
    • priceobjectrequiredcan be null
      • penceintegerrequiredcan be null

        -9007199254740991 to 9007199254740991

      • sourceenumrequired

        One of "locked", "override", "list", "none"

      • lockedAtstringrequiredcan be null
      • lockReasonenumrequiredcan be null

        One of "completed", "signed_off", "invoiced"

      • invoiceRefstringoptionalcan be null
    • internalbooleanrequired
    • backdatedAtstringrequiredcan be null
    • templateIduuidrequiredcan be null
    • templateNamestringrequiredcan be null
    • customFieldsobjectrequired
    • needsClockInbooleanrequiredcan be null
    • clockInRequiredbooleanrequired
    • clockInMissedbooleanrequired
    • clockedInAtstringrequiredcan be null
    • clockedOutAtstringrequiredcan be null
    • clockInLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockOutLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockInDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockOutDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockInSetByNamestringrequiredcan be null
    • clockOutSetByNamestringrequiredcan be null
    • checklistobjectrequiredcan be null
      • doneintegerrequired

        -9007199254740991 to 9007199254740991

      • totalintegerrequired

        -9007199254740991 to 9007199254740991

      • mustDoLeftintegerrequired

        -9007199254740991 to 9007199254740991

  • keptarray of objectrequired
    • iduuidrequired
    • statusenumrequired

      One of "draft", "open", "active", "complete", "signed_off", "failed"

    • datedaterequiredcan be null

      YYYY-MM-DD

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • startsAtstringrequiredcan be null
    • endsAtstringrequiredcan be null
    • overnightbooleanrequired
    • breakMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • durationMinutesintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • descriptionstringrequiredcan be null
    • notesstringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • jobIduuidrequiredcan be null
    • visitNumberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • teamMemberIduuidrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • openToTeamIdsarray of uuidrequired
    • openToTeamMemberIdsarray of uuidrequired
    • openNotifyAtstringrequiredcan be null
    • priceobjectrequiredcan be null
      • penceintegerrequiredcan be null

        -9007199254740991 to 9007199254740991

      • sourceenumrequired

        One of "locked", "override", "list", "none"

      • lockedAtstringrequiredcan be null
      • lockReasonenumrequiredcan be null

        One of "completed", "signed_off", "invoiced"

      • invoiceRefstringoptionalcan be null
    • internalbooleanrequired
    • backdatedAtstringrequiredcan be null
    • templateIduuidrequiredcan be null
    • templateNamestringrequiredcan be null
    • customFieldsobjectrequired
    • needsClockInbooleanrequiredcan be null
    • clockInRequiredbooleanrequired
    • clockInMissedbooleanrequired
    • clockedInAtstringrequiredcan be null
    • clockedOutAtstringrequiredcan be null
    • clockInLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockOutLocationobjectrequiredcan be null
      • latnumberrequired

        -90 to 90

      • lngnumberrequired

        -180 to 180

      • accuracyMetresnumberrequiredcan be null

        0 to 100000

    • clockInDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockOutDeviceobjectrequiredcan be null
      • idstringrequiredcan be null
      • osstringrequiredcan be null
      • ipstringrequiredcan be null
    • clockInSetByNamestringrequiredcan be null
    • clockOutSetByNamestringrequiredcan be null
    • checklistobjectrequiredcan be null
      • doneintegerrequired

        -9007199254740991 to 9007199254740991

      • totalintegerrequired

        -9007199254740991 to 9007199254740991

      • mustDoLeftintegerrequired

        -9007199254740991 to 9007199254740991

    • keptBecauseenumrequired

      One of "complete", "signed_off", "failed", "price_locked"

  • bookedarray of objectrequired
    • datedaterequired

      YYYY-MM-DD

    • starttimerequiredcan be null

      HH:MM, 24-hour

    • endtimerequiredcan be null

      HH:MM, 24-hour

    • overnightbooleanrequired
    • pastbooleanrequired
  • backdatedbooleanrequired
  • priceOnlybooleanrequired
  • followingintegerrequired

    -9007199254740991 to 9007199254740991

  • finishedobjectrequiredcan be null
    • changesarray of objectrequired
      • bookingIduuidrequired
      • datedaterequired

        YYYY-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

NameInKind
idpathuuidrequired

Request body JSON

  • effectiveFromdaterequired

    YYYY-MM-DD

  • pricePenceintegeroptional

    0 to 100000000

  • dayPricesarray of objectoptional

    1–7 items

    • dayintegerrequired

      0 to 6

    • pricePenceintegerrequired

      0 to 100000000

Response array of object

  • iduuidrequired
  • effectiveFromdaterequired

    YYYY-MM-DD

  • pricePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • dayintegerrequiredcan be null

    0 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

NameInKind
idpathuuidrequired
priceIdpathuuidrequired

Response array of object

  • iduuidrequired
  • effectiveFromdaterequired

    YYYY-MM-DD

  • pricePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • dayintegerrequiredcan be null

    0 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

NameInKind
idpathuuidrequired

Request body JSON

  • fromdaterequired

    YYYY-MM-DD

  • applybooleanoptional

    Default false

  • proposedobjectoptional
    • pricePenceintegeroptional

      0 to 100000000

    • dayPricesarray of objectoptional

      1–7 items

      • dayintegerrequired

        0 to 6

      • pricePenceintegerrequired

        0 to 100000000

Response object

  • changesarray of objectrequired
    • bookingIduuidrequired
    • datedaterequired

      YYYY-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

NameInKind
idpathuuidrequired

Request body JSON

  • numbersarray of integerrequired

    1–500 items

Response array of object

  • iduuidrequired
  • statusenumrequired

    One of "draft", "open", "active", "complete", "signed_off", "failed"

  • datedaterequiredcan be null

    YYYY-MM-DD

  • starttimerequiredcan be null

    HH:MM, 24-hour

  • endtimerequiredcan be null

    HH:MM, 24-hour

  • startsAtstringrequiredcan be null
  • endsAtstringrequiredcan be null
  • overnightbooleanrequired
  • breakMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • durationMinutesintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • namestringrequired
  • descriptionstringrequiredcan be null
  • notesstringrequiredcan be null
  • clientIduuidrequired
  • clientNamestringrequired
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • jobIduuidrequiredcan be null
  • visitNumberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • teamMemberIduuidrequiredcan be null
  • teamMemberNamestringrequiredcan be null
  • openToTeamIdsarray of uuidrequired
  • openToTeamMemberIdsarray of uuidrequired
  • openNotifyAtstringrequiredcan be null
  • priceobjectrequiredcan be null
    • penceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • sourceenumrequired

      One of "locked", "override", "list", "none"

    • lockedAtstringrequiredcan be null
    • lockReasonenumrequiredcan be null

      One of "completed", "signed_off", "invoiced"

    • invoiceRefstringoptionalcan be null
  • internalbooleanrequired
  • backdatedAtstringrequiredcan be null
  • templateIduuidrequiredcan be null
  • templateNamestringrequiredcan be null
  • customFieldsobjectrequired
  • needsClockInbooleanrequiredcan be null
  • clockInRequiredbooleanrequired
  • clockInMissedbooleanrequired
  • clockedInAtstringrequiredcan be null
  • clockedOutAtstringrequiredcan be null
  • clockInLocationobjectrequiredcan be null
    • latnumberrequired

      -90 to 90

    • lngnumberrequired

      -180 to 180

    • accuracyMetresnumberrequiredcan be null

      0 to 100000

  • clockOutLocationobjectrequiredcan be null
    • latnumberrequired

      -90 to 90

    • lngnumberrequired

      -180 to 180

    • accuracyMetresnumberrequiredcan be null

      0 to 100000

  • clockInDeviceobjectrequiredcan be null
    • idstringrequiredcan be null
    • osstringrequiredcan be null
    • ipstringrequiredcan be null
  • clockOutDeviceobjectrequiredcan be null
    • idstringrequiredcan be null
    • osstringrequiredcan be null
    • ipstringrequiredcan be null
  • clockInSetByNamestringrequiredcan be null
  • clockOutSetByNamestringrequiredcan be null
  • checklistobjectrequiredcan be null
    • doneintegerrequired

      -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

NameInKind
idpathuuidrequired

Request body JSON

  • numbersarray of integerrequired

    1–500 items

Response object

  • okconstantrequired

    Always 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
}