WorkscopeAPI Open Workscope

API reference

Invoicing

35 requests. Each shows the permission a key needs, what to send and what comes back.

On this page

A client's billing: how often, on what basis, when its next period starts, and its dated fixed amounts

GET/v1/clients/{id}/billing

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • clientIduuidrequired
  • billingFrequencyenumrequiredcan be null

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumrequiredcan be null

    One of "bookings", "fixed"

  • effectiveFrequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • effectiveBasisenumrequired

    One of "bookings", "fixed"

  • nextPeriodStartdaterequiredcan be null

    YYYY-MM-DD

  • billingCycleEnddaterequiredcan be null

    YYYY-MM-DD

  • nextPeriodobjectrequiredcan be null
    • startdaterequired

      YYYY-MM-DD

    • enddaterequired

      YYYY-MM-DD

  • fixedAmountsarray of objectrequired
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • notestringrequiredcan be null
    • createdAtstringrequired
  • listCoveredVisitsbooleanrequired
curl "https://app.workscope.co.uk/v1/clients/ID/billing" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "billingFrequency": "weekly",
  "billingBasis": "bookings",
  "effectiveFrequency": "weekly",
  "effectiveBasis": "bookings",
  "nextPeriodStart": "2026-11-06",
  "billingCycleEnd": "2026-11-06",
  "nextPeriod": {
    "start": "2026-11-06",
    "end": "2026-11-06"
  },
  "fixedAmounts": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "effectiveFrom": "2026-11-06",
      "amountPence": 4500,
      "note": "Side gate code is on the key safe.",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "listCoveredVisits": false
}

Change how a client is billed (null: the company's) and when its next period starts

PATCH/v1/clients/{id}/billing

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • billingFrequencyenumoptionalcan be null

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumoptionalcan be null

    One of "bookings", "fixed"

  • nextPeriodStartdateoptionalcan be null

    YYYY-MM-DD

  • billingCycleEnddateoptionalcan be null

    YYYY-MM-DD

  • listCoveredVisitsbooleanoptional

Response object

  • clientIduuidrequired
  • billingFrequencyenumrequiredcan be null

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumrequiredcan be null

    One of "bookings", "fixed"

  • effectiveFrequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • effectiveBasisenumrequired

    One of "bookings", "fixed"

  • nextPeriodStartdaterequiredcan be null

    YYYY-MM-DD

  • billingCycleEnddaterequiredcan be null

    YYYY-MM-DD

  • nextPeriodobjectrequiredcan be null
    • startdaterequired

      YYYY-MM-DD

    • enddaterequired

      YYYY-MM-DD

  • fixedAmountsarray of objectrequired
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • notestringrequiredcan be null
    • createdAtstringrequired
  • listCoveredVisitsbooleanrequired
curl -X PATCH "https://app.workscope.co.uk/v1/clients/ID/billing" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "billingFrequency": "weekly",
    "billingBasis": "bookings",
    "nextPeriodStart": "2026-11-06",
    "billingCycleEnd": "2026-11-06",
    "listCoveredVisits": false
  }'

Example response

{
  "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "billingFrequency": "weekly",
  "billingBasis": "bookings",
  "effectiveFrequency": "weekly",
  "effectiveBasis": "bookings",
  "nextPeriodStart": "2026-11-06",
  "billingCycleEnd": "2026-11-06",
  "nextPeriod": {
    "start": "2026-11-06",
    "end": "2026-11-06"
  },
  "fixedAmounts": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "effectiveFrom": "2026-11-06",
      "amountPence": 4500,
      "note": "Side gate code is on the key safe.",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "listCoveredVisits": false
}

Add a fixed amount a period from a day (replacing one from the same day)

POST/v1/clients/{id}/billing/amounts

Permission
invoice.manage
Module
invoicing
Answers
201

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • effectiveFromdaterequired

    YYYY-MM-DD

  • amountPenceintegerrequired

    0 to 100000000

  • notestringoptionalcan be null

    Up to 500 characters

Response object

  • clientIduuidrequired
  • billingFrequencyenumrequiredcan be null

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumrequiredcan be null

    One of "bookings", "fixed"

  • effectiveFrequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • effectiveBasisenumrequired

    One of "bookings", "fixed"

  • nextPeriodStartdaterequiredcan be null

    YYYY-MM-DD

  • billingCycleEnddaterequiredcan be null

    YYYY-MM-DD

  • nextPeriodobjectrequiredcan be null
    • startdaterequired

      YYYY-MM-DD

    • enddaterequired

      YYYY-MM-DD

  • fixedAmountsarray of objectrequired
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • notestringrequiredcan be null
    • createdAtstringrequired
  • listCoveredVisitsbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/clients/ID/billing/amounts" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "effectiveFrom": "2026-11-06",
    "amountPence": 4500,
    "note": "Side gate code is on the key safe."
  }'

Example response

{
  "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "billingFrequency": "weekly",
  "billingBasis": "bookings",
  "effectiveFrequency": "weekly",
  "effectiveBasis": "bookings",
  "nextPeriodStart": "2026-11-06",
  "billingCycleEnd": "2026-11-06",
  "nextPeriod": {
    "start": "2026-11-06",
    "end": "2026-11-06"
  },
  "fixedAmounts": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "effectiveFrom": "2026-11-06",
      "amountPence": 4500,
      "note": "Side gate code is on the key safe.",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "listCoveredVisits": false
}

Remove a fixed amount (issued invoices keep what they were)

DELETE/v1/clients/{id}/billing/amounts/{amountId}

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired
amountIdpathuuidrequired

Response object

  • clientIduuidrequired
  • billingFrequencyenumrequiredcan be null

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumrequiredcan be null

    One of "bookings", "fixed"

  • effectiveFrequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • effectiveBasisenumrequired

    One of "bookings", "fixed"

  • nextPeriodStartdaterequiredcan be null

    YYYY-MM-DD

  • billingCycleEnddaterequiredcan be null

    YYYY-MM-DD

  • nextPeriodobjectrequiredcan be null
    • startdaterequired

      YYYY-MM-DD

    • enddaterequired

      YYYY-MM-DD

  • fixedAmountsarray of objectrequired
    • iduuidrequired
    • effectiveFromdaterequired

      YYYY-MM-DD

    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • notestringrequiredcan be null
    • createdAtstringrequired
  • listCoveredVisitsbooleanrequired
curl -X DELETE "https://app.workscope.co.uk/v1/clients/ID/billing/amounts/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "billingFrequency": "weekly",
  "billingBasis": "bookings",
  "effectiveFrequency": "weekly",
  "effectiveBasis": "bookings",
  "nextPeriodStart": "2026-11-06",
  "billingCycleEnd": "2026-11-06",
  "nextPeriod": {
    "start": "2026-11-06",
    "end": "2026-11-06"
  },
  "fixedAmounts": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "effectiveFrom": "2026-11-06",
      "amountPence": 4500,
      "note": "Side gate code is on the key safe.",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "listCoveredVisits": false
}

Invoices, newest first

GET/v1/invoices

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
statusqueryenumOne of draft, issued, paid, void
clientIdqueryuuid
frequencyqueryenumOne of weekly, fortnightly, four_weekly, monthly, quarterly, ad_hoc
fromquerydate
toquerydate

Response array of object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
curl "https://app.workscope.co.uk/v1/invoices" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "number": -9007199254740991,
    "reference": "INV-0042",
    "status": "draft",
    "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "clientName": "Harbourside Dental",
    "frequency": "weekly",
    "basis": "bookings",
    "periodStart": "2026-11-06",
    "periodEnd": "2026-11-06",
    "manual": false,
    "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
    "projectName": "1 Harbour Road",
    "issueDate": "2026-11-06",
    "dueDate": "2026-11-06",
    "paidOn": "2026-11-06",
    "netPence": 4500,
    "vatPence": 4500,
    "grossPence": 4500,
    "missingPrices": -9007199254740991,
    "bookings": -9007199254740991,
    "coveredBookings": -9007199254740991,
    "lateBookings": 51.4545,
    "bookedPence": 4500,
    "fixedPence": 4500,
    "manualPence": 4500,
    "missingAccepted": false,
    "notes": "Side gate code is on the key safe.",
    "voidReason": "text",
    "creditedPence": 4500,
    "amountDuePence": 4500,
    "calculatedAt": "2026-11-06T09:30:00.000Z",
    "createdAt": "2026-11-06T09:30:00.000Z"
  }
]

Start an invoice for a client and period (a draft, worked out straight away)

POST/v1/invoices

Permission
invoice.manage
Module
invoicing
Answers
201

Request body JSON

  • clientIduuidrequired
  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddateoptional

    YYYY-MM-DD

  • notesstringoptionalcan be null

    Up to 2000 characters

  • chargeIdsarray of uuidoptional

    Up to 500 items · Default []

  • manualbooleanoptional

    Default false

  • bookingIdsarray of uuidoptional

    Up to 500 items · Default []

  • projectIduuidoptionalcan be null

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "periodStart": "2026-11-06",
    "periodEnd": "2026-11-06",
    "notes": "Side gate code is on the key safe.",
    "chargeIds": [
      "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
    ],
    "manual": false,
    "bookingIds": [
      "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918"
    ],
    "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

One invoice: its lines, totals, history, and who it is from and to

GET/v1/invoices/{id}

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl "https://app.workscope.co.uk/v1/invoices/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Change an invoice's notes

PATCH/v1/invoices/{id}

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • notesstringoptionalcan be null

    Up to 2000 characters

  • termsstringoptionalcan be null

    Up to 5000 characters

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X PATCH "https://app.workscope.co.uk/v1/invoices/ID" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "notes": "Side gate code is on the key safe.",
    "terms": "text"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Delete a draft invoice (its bookings are free again)

DELETE/v1/invoices/{id}

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • okconstantrequired

    Always true

curl -X DELETE "https://app.workscope.co.uk/v1/invoices/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "ok": true
}

Accept lines with no price as they are (or take that back), so the invoice can be issued

POST/v1/invoices/{id}/accept-missing

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • acceptedbooleanrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/accept-missing" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "accepted": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Put some of the client's finished bookings on a one-off draft (take one off by removing its line)

POST/v1/invoices/{id}/bookings

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • bookingIdsarray of uuidrequired

    1–500 items

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/bookings" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "bookingIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ]
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Put some of the client's products and materials on a draft (take one off by removing its line)

POST/v1/invoices/{id}/charges

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • chargeIdsarray of uuidrequired

    1–500 items

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/charges" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "chargeIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ]
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Issue a draft: worked out one last time, given the next number, and its bookings' prices locked as invoiced

POST/v1/invoices/{id}/issue

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/issue" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Add a line by hand to a draft: an extra, an adjustment, or a credit (a negative price)

POST/v1/invoices/{id}/lines

Permission
invoice.manage
Module
invoicing
Answers
201

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • descriptionstringrequired

    1–2000 characters

  • quantityX100integeroptional

    1 to 1000000 · Default 100

  • unitPenceintegerrequired

    -100000000 to 100000000

  • datedateoptionalcan be null

    YYYY-MM-DD

  • projectIduuidoptionalcan be null
  • vatRateBpintegeroptionalcan be null

    0 to 10000

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/lines" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Side gate code is on the key safe.",
    "quantityX100": 100,
    "unitPence": 4500,
    "date": "2026-11-06",
    "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "vatRateBp": 1207
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Change a line on a draft: a hand-added line's details, or the price and VAT rate of a booking or fixed line

PATCH/v1/invoices/{id}/lines/{lineId}

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired
lineIdpathuuidrequired

Request body JSON

  • descriptionstringoptional

    1–2000 characters

  • quantityX100integeroptional

    1 to 1000000

  • unitPenceintegeroptional

    -100000000 to 100000000

  • datedateoptionalcan be null

    YYYY-MM-DD

  • chargePenceintegeroptionalcan be null

    0 to 100000000

  • vatRateBpintegeroptionalcan be null

    0 to 10000

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X PATCH "https://app.workscope.co.uk/v1/invoices/ID/lines/ID" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Side gate code is on the key safe.",
    "quantityX100": 1,
    "unitPence": 4500,
    "date": "2026-11-06",
    "chargePence": 4500,
    "vatRateBp": 1207
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Remove a line added by hand

DELETE/v1/invoices/{id}/lines/{lineId}

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired
lineIdpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X DELETE "https://app.workscope.co.uk/v1/invoices/ID/lines/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Mark an issued invoice as paid on a day

POST/v1/invoices/{id}/paid

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • paidOndaterequired

    YYYY-MM-DD

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/paid" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "paidOn": "2026-11-06"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Show or leave out its bookings' photos (those clients may see) on pages after a draft invoice

POST/v1/invoices/{id}/photos

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • includebooleanrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/photos" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "include": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Work a draft out again from bookings, prices and fixed amounts (lines added by hand stay)

POST/v1/invoices/{id}/recalculate

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/recalculate" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Take products from stock for the client and put them on this draft (taking the line off puts the stock back)

POST/v1/invoices/{id}/stock

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • itemsarray of objectrequired

    1–100 items

    • productIduuidrequired
    • quantityX100integerrequired

      1 to 100000000

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/stock" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "productId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
        "quantityX100": 1
      }
    ]
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

Void an issued or paid invoice, saying why: it keeps its number and its bookings are free to invoice again

POST/v1/invoices/{id}/void

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • reasonstringrequired

    1–500 characters

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • statusenumrequired

    One of "draft", "issued", "paid", "void"

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequired

    YYYY-MM-DD

  • periodEnddaterequired

    YYYY-MM-DD

  • manualbooleanrequired

    Default false

  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null

    Default null

  • issueDatedaterequiredcan be null

    YYYY-MM-DD

  • dueDatedaterequiredcan be null

    YYYY-MM-DD

  • paidOndaterequiredcan be null

    YYYY-MM-DD

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • coveredBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingAcceptedbooleanrequired
  • notesstringrequiredcan be null
  • voidReasonstringrequiredcan be null
  • creditedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • amountDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • calculatedAtstringrequiredcan be null
  • createdAtstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null
    • quantitynumberrequired
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
    • chargePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • vatRateOverrideBpintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • photoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • hiddenPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • unsignedPhotoCountintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

  • historyarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "issued", "paid", "voided", "line_added", "line_changed", "line_removed", "missing_accepted", "notes", "credit_raised", "credit_issued", "credit_voided", "credit_deleted", "refunded", "refund_removed"

    • byNamestringrequiredcan be null
    • atstringrequired
    • reasonstringrequiredcan be null
    • summarystringrequiredcan be null
  • issueBlockerstringrequiredcan be null
  • unsignedBookingsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • listCoveredVisitsbooleanrequired

    Default true

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • paymentDetailsstringrequiredcan be null
    • hasLogobooleanrequired
  • toobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • includePhotosbooleanrequired

    Default false

  • photosarray of objectrequired

    Default []

    • bookingIduuidrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • startstringrequiredcan be null
    • endstringrequiredcan be null
    • namestringrequired
    • projectNamestringrequiredcan be null
    • teamMemberNamestringrequiredcan be null
    • photosarray of objectrequired
      • iduuidrequired
      • captionstringrequiredcan be null
      • widthintegerrequired

        -9007199254740991 to 9007199254740991

      • heightintegerrequired

        -9007199254740991 to 9007199254740991

      • thumbUrlstringrequired
      • fullUrlstringrequired
  • creditsarray of objectrequired
    • iduuidrequired
    • invoiceIduuidrequired
    • invoiceReferencestringrequiredcan be null
    • clientIduuidrequired
    • clientNamestringrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "void"

    • kindenumrequired

      One of "whole", "lines", "amount"

    • reasonstringrequired
    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • uninvoiceBookingsbooleanrequired
    • voidReasonstringrequiredcan be null
    • createdAtstringrequired
  • refundsarray of objectrequired
    • iduuidrequired
    • amountPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • refundedOndaterequired

      YYYY-MM-DD

    • methodstringrequiredcan be null
    • notestringrequiredcan be null
    • byNamestringrequiredcan be null
    • createdAtstringrequired
  • refundedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • refundDuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditLeftPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • creditableLinesarray of objectrequired
    • invoiceLineIduuidrequired
    • descriptionstringrequired
    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingNetPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • remainingVatPenceintegerrequired

      -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/void" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "text"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "status": "draft",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "manual": false,
  "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "projectName": "1 Harbour Road",
  "issueDate": "2026-11-06",
  "dueDate": "2026-11-06",
  "paidOn": "2026-11-06",
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "missingPrices": -9007199254740991,
  "bookings": -9007199254740991,
  "coveredBookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "manualPence": 4500,
  "missingAccepted": false,
  "notes": "Side gate code is on the key safe.",
  "voidReason": "text",
  "creditedPence": 4500,
  "amountDuePence": 4500,
  "calculatedAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "projectName": "1 Harbour Road",
      "quantity": 1,
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "chargePence": 4500,
      "vatRateOverrideBp": 1207,
      "photoCount": 0,
      "hiddenPhotoCount": 0,
      "unsignedPhotoCount": 0
    }
  ],
  "history": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "byName": "Harbourside Dental",
      "at": "2026-11-06T09:30:00.000Z",
      "reason": "text",
      "summary": "text"
    }
  ],
  "issueBlocker": "text",
  "unsignedBookings": 0,
  "listCoveredVisits": true,
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "paymentDetails": "Side gate code is on the key safe.",
    "hasLogo": false
  },
  "to": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk",
    "phone": "0117 496 0123"
  },
  "vatRegistered": false,
  "terms": "text",
  "includePhotos": false,
  "photos": [
    {
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "date": "2026-11-06",
      "start": "09:00",
      "end": "11:00",
      "name": "Harbourside Dental",
      "projectName": "1 Harbour Road",
      "teamMemberName": "Sam Hart",
      "photos": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "caption": "text",
          "width": -9007199254740991,
          "height": -9007199254740991,
          "thumbUrl": "https://example.co.uk",
          "fullUrl": "https://example.co.uk"
        }
      ]
    }
  ],
  "credits": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "invoiceId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "invoiceReference": "INV-0042",
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "kind": "whole",
      "reason": "text",
      "issueDate": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "uninvoiceBookings": false,
      "voidReason": "text",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refunds": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "amountPence": 4500,
      "refundedOn": "2026-11-06",
      "method": "text",
      "note": "Side gate code is on the key safe.",
      "byName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refundedPence": 4500,
  "refundDuePence": 4500,
  "creditLeftPence": 4500,
  "creditableLines": [
    {
      "invoiceLineId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "vatRateBp": 1207,
      "netPence": 4500,
      "vatPence": 4500,
      "remainingNetPence": 4500,
      "remainingVatPence": 4500
    }
  ]
}

A client's products and materials not on any invoice yet (up to a day), to choose from

GET/v1/invoices/charges

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
clientIdqueryuuidrequired
upToquerydate

Response array of object

  • iduuidrequired
  • datedaterequired

    YYYY-MM-DD

  • descriptionstringrequired
  • quantityX100integerrequired

    -9007199254740991 to 9007199254740991

  • unitPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • projectNamestringrequiredcan be null
  • groupKeystringrequired

    Default ""

  • groupLabelstringrequired

    Default ""

  • orderIduuidrequiredcan be null
curl "https://app.workscope.co.uk/v1/invoices/charges?clientId=3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "date": "2026-11-06",
    "description": "Side gate code is on the key safe.",
    "quantityX100": -9007199254740991,
    "unitPence": 4500,
    "netPence": 4500,
    "projectName": "1 Harbour Road",
    "groupKey": "",
    "groupLabel": "",
    "orderId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
  }
]

Download invoices as CSV for an accounts package: one row per invoice, or every line

GET/v1/invoices/export

Permission
invoice.view
Module
invoicing
Answers
200 with a file (image/jpeg)

Parameters

NameInKind
statusqueryenumOne of draft, issued, paid, void
clientIdqueryuuid
frequencyqueryenumOne of weekly, fortnightly, four_weekly, monthly, quarterly, ad_hoc
fromquerydate
toquerydate
formatqueryenumOne of invoices, lines, credits · Default "invoices"
curl "https://app.workscope.co.uk/v1/invoices/export" \
  -H "Authorization: Bearer wsk_your_key_here"

Issue several drafts at once (each worked out one last time); says which could not be issued and why

POST/v1/invoices/issue

Permission
invoice.manage
Module
invoicing
Answers
200

Request body JSON

  • idsarray of uuidrequired

    1–500 items

  • sendbooleanoptional

    Default false

Response object

  • issuedarray of objectrequired
    • iduuidrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "paid", "void"

    • clientIduuidrequired
    • clientNamestringrequired
    • frequencyenumrequired

      One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

    • basisenumrequired

      One of "bookings", "fixed"

    • periodStartdaterequired

      YYYY-MM-DD

    • periodEnddaterequired

      YYYY-MM-DD

    • manualbooleanrequired

      Default false

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null

      Default null

    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • dueDatedaterequiredcan be null

      YYYY-MM-DD

    • paidOndaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricesintegerrequired

      -9007199254740991 to 9007199254740991

    • bookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • coveredBookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • lateBookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • bookedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • fixedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • manualPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingAcceptedbooleanrequired
    • notesstringrequiredcan be null
    • voidReasonstringrequiredcan be null
    • creditedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • amountDuePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • calculatedAtstringrequiredcan be null
    • createdAtstringrequired
  • refusedarray of objectrequired
    • iduuidrequired
    • clientNamestringrequired
    • reasonstringrequired
  • emailedarray of objectrequired

    Default []

    • iduuidrequired
    • tostringrequired
    • statusstringrequired
  • notEmailedarray of objectrequired

    Default []

    • iduuidrequired
    • clientNamestringrequired
    • reasonstringrequired
curl -X POST "https://app.workscope.co.uk/v1/invoices/issue" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "send": false
  }'

Example response

{
  "issued": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "clientName": "Harbourside Dental",
      "frequency": "weekly",
      "basis": "bookings",
      "periodStart": "2026-11-06",
      "periodEnd": "2026-11-06",
      "manual": false,
      "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "projectName": "1 Harbour Road",
      "issueDate": "2026-11-06",
      "dueDate": "2026-11-06",
      "paidOn": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "missingPrices": -9007199254740991,
      "bookings": -9007199254740991,
      "coveredBookings": -9007199254740991,
      "lateBookings": 51.4545,
      "bookedPence": 4500,
      "fixedPence": 4500,
      "manualPence": 4500,
      "missingAccepted": false,
      "notes": "Side gate code is on the key safe.",
      "voidReason": "text",
      "creditedPence": 4500,
      "amountDuePence": 4500,
      "calculatedAt": "2026-11-06T09:30:00.000Z",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "refused": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "reason": "text"
    }
  ],
  "emailed": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "to": "2026-11-06",
      "status": "text"
    }
  ],
  "notEmailed": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "clientName": "Harbourside Dental",
      "reason": "text"
    }
  ]
}

The invoice run: each client billed at a frequency, its period, what it would be charged, and any invoice already made for it

GET/v1/invoices/run

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
frequencyqueryenumOne of weekly, fortnightly, four_weekly, monthly, quarterly, ad_hoc
dueByquerydate

Response object

  • dueBydaterequired

    YYYY-MM-DD

  • rowsarray of objectrequired
    • clientIduuidrequired
    • clientNamestringrequired
    • frequencyenumrequired

      One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

    • basisenumrequired

      One of "bookings", "fixed"

    • periodStartdaterequiredcan be null

      YYYY-MM-DD

    • periodEnddaterequiredcan be null

      YYYY-MM-DD

    • duebooleanrequired
    • bookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • lateBookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • bookedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • fixedPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • productsintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • productPenceintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • ordersToRechargeintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • waitingSignOffintegerrequired

      -9007199254740991 to 9007199254740991 · Default 0

    • waitingSignOffFromdaterequiredcan be null

      YYYY-MM-DD

    • toChargePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricesintegerrequired

      -9007199254740991 to 9007199254740991

    • invoiceobjectrequiredcan be null
      • iduuidrequired
      • statusenumrequired

        One of "draft", "issued", "paid", "void"

      • referencestringrequiredcan be null
      • grossPenceintegerrequired

        -9007199254740991 to 9007199254740991

curl "https://app.workscope.co.uk/v1/invoices/run" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "dueBy": "2026-11-06",
  "rows": [
    {
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "frequency": "weekly",
      "basis": "bookings",
      "periodStart": "2026-11-06",
      "periodEnd": "2026-11-06",
      "due": false,
      "bookings": -9007199254740991,
      "lateBookings": 51.4545,
      "bookedPence": 4500,
      "fixedPence": 4500,
      "products": 0,
      "productPence": 0,
      "ordersToRecharge": 0,
      "waitingSignOff": 0,
      "waitingSignOffFrom": "2026-11-06",
      "toChargePence": 4500,
      "missingPrices": -9007199254740991,
      "invoice": {
        "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
        "status": "draft",
        "reference": "INV-0042",
        "grossPence": 4500
      }
    }
  ]
}

Make draft invoices for chosen clients for their due periods

POST/v1/invoices/run

Permission
invoice.manage
Module
invoicing
Answers
201

Request body JSON

  • clientIdsarray of uuidrequired

    1–500 items

  • frequencyenumoptional

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • dueBydateoptional

    YYYY-MM-DD

  • includeChargesbooleanoptional

    Default true

  • skipChargeIdsarray of uuidoptional

    Up to 5000 items · Default []

Response object

  • createdarray of objectrequired
    • iduuidrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • statusenumrequired

      One of "draft", "issued", "paid", "void"

    • clientIduuidrequired
    • clientNamestringrequired
    • frequencyenumrequired

      One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

    • basisenumrequired

      One of "bookings", "fixed"

    • periodStartdaterequired

      YYYY-MM-DD

    • periodEnddaterequired

      YYYY-MM-DD

    • manualbooleanrequired

      Default false

    • projectIduuidrequiredcan be null
    • projectNamestringrequiredcan be null

      Default null

    • issueDatedaterequiredcan be null

      YYYY-MM-DD

    • dueDatedaterequiredcan be null

      YYYY-MM-DD

    • paidOndaterequiredcan be null

      YYYY-MM-DD

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricesintegerrequired

      -9007199254740991 to 9007199254740991

    • bookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • coveredBookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • lateBookingsintegerrequired

      -9007199254740991 to 9007199254740991

    • bookedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • fixedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • manualPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingAcceptedbooleanrequired
    • notesstringrequiredcan be null
    • voidReasonstringrequiredcan be null
    • creditedPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • amountDuePenceintegerrequired

      -9007199254740991 to 9007199254740991

    • calculatedAtstringrequiredcan be null
    • createdAtstringrequired
  • skippedarray of objectrequired
    • clientIduuidrequired
    • clientNamestringrequired
    • reasonstringrequired
curl -X POST "https://app.workscope.co.uk/v1/invoices/run" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "clientIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "frequency": "weekly",
    "dueBy": "2026-11-06",
    "includeCharges": true,
    "skipChargeIds": [
      "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
    ]
  }'

Example response

{
  "created": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "status": "draft",
      "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "clientName": "Harbourside Dental",
      "frequency": "weekly",
      "basis": "bookings",
      "periodStart": "2026-11-06",
      "periodEnd": "2026-11-06",
      "manual": false,
      "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "projectName": "1 Harbour Road",
      "issueDate": "2026-11-06",
      "dueDate": "2026-11-06",
      "paidOn": "2026-11-06",
      "netPence": 4500,
      "vatPence": 4500,
      "grossPence": 4500,
      "missingPrices": -9007199254740991,
      "bookings": -9007199254740991,
      "coveredBookings": -9007199254740991,
      "lateBookings": 51.4545,
      "bookedPence": 4500,
      "fixedPence": 4500,
      "manualPence": 4500,
      "missingAccepted": false,
      "notes": "Side gate code is on the key safe.",
      "voidReason": "text",
      "creditedPence": 4500,
      "amountDuePence": 4500,
      "calculatedAt": "2026-11-06T09:30:00.000Z",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "skipped": [
    {
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "clientName": "Harbourside Dental",
      "reason": "text"
    }
  ]
}

The invoice run as CSV

GET/v1/invoices/run/export

Permission
invoice.view
Module
invoicing
Answers
200 with a file (image/jpeg)

Parameters

NameInKind
frequencyqueryenumOne of weekly, fortnightly, four_weekly, monthly, quarterly, ad_hoc
dueByquerydate
curl "https://app.workscope.co.uk/v1/invoices/run/export" \
  -H "Authorization: Bearer wsk_your_key_here"

One client's due period in the run, line by line, before a draft is made

GET/v1/invoices/run/preview

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
clientIdqueryuuidrequired
dueByquerydate

Response object

  • clientIduuidrequired
  • clientNamestringrequired
  • frequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • basisenumrequired

    One of "bookings", "fixed"

  • periodStartdaterequiredcan be null

    YYYY-MM-DD

  • periodEnddaterequiredcan be null

    YYYY-MM-DD

  • duebooleanrequired
  • bookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • lateBookingsintegerrequired

    -9007199254740991 to 9007199254740991

  • bookedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • fixedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • productsintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • productPenceintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • ordersToRechargeintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • waitingSignOffintegerrequired

    -9007199254740991 to 9007199254740991 · Default 0

  • waitingSignOffFromdaterequiredcan be null

    YYYY-MM-DD

  • toChargePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • missingPricesintegerrequired

    -9007199254740991 to 9007199254740991

  • invoiceobjectrequiredcan be null
    • iduuidrequired
    • statusenumrequired

      One of "draft", "issued", "paid", "void"

    • referencestringrequiredcan be null
    • grossPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • dueBydaterequired

    YYYY-MM-DD

  • linesarray of objectrequired
    • kindenumrequired

      One of "booking", "fixed", "manual", "product"

    • descriptionstringrequired
    • datedaterequiredcan be null

      YYYY-MM-DD

    • projectNamestringrequiredcan be null
    • unitPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • missingPricebooleanrequired
    • latebooleanrequired
    • coveredbooleanrequired
    • bookingIduuidrequiredcan be null
    • chargeIduuidoptionalcan be null
  • netPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • vatPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • grossPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • chargesarray of objectrequired

    Default []

    • iduuidrequired
    • datedaterequired

      YYYY-MM-DD

    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • projectNamestringrequiredcan be null
curl "https://app.workscope.co.uk/v1/invoices/run/preview?clientId=3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "clientName": "Harbourside Dental",
  "frequency": "weekly",
  "basis": "bookings",
  "periodStart": "2026-11-06",
  "periodEnd": "2026-11-06",
  "due": false,
  "bookings": -9007199254740991,
  "lateBookings": 51.4545,
  "bookedPence": 4500,
  "fixedPence": 4500,
  "products": 0,
  "productPence": 0,
  "ordersToRecharge": 0,
  "waitingSignOff": 0,
  "waitingSignOffFrom": "2026-11-06",
  "toChargePence": 4500,
  "missingPrices": -9007199254740991,
  "invoice": {
    "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "status": "draft",
    "reference": "INV-0042",
    "grossPence": 4500
  },
  "dueBy": "2026-11-06",
  "lines": [
    {
      "kind": "booking",
      "description": "Side gate code is on the key safe.",
      "date": "2026-11-06",
      "projectName": "1 Harbour Road",
      "unitPence": 4500,
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500,
      "missingPrice": false,
      "late": false,
      "covered": false,
      "bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "chargeId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    }
  ],
  "netPence": 4500,
  "vatPence": 4500,
  "grossPence": 4500,
  "charges": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "date": "2026-11-06",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "netPence": 4500,
      "projectName": "1 Harbour Road"
    }
  ]
}

Finished bookings not on an issued invoice: the check that nothing is missed

GET/v1/invoices/uninvoiced

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
clientIdqueryuuid
includeSkippedqueryboolean

Response array of object

  • iduuidrequired
  • datedaterequired

    YYYY-MM-DD

  • namestringrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • teamMemberNamestringrequiredcan be null
  • statusstringrequired
  • pricePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • ageDaysintegerrequired

    -9007199254740991 to 9007199254740991

  • draftInvoiceIduuidrequiredcan be null
  • skippedReasonstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/invoices/uninvoiced" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "date": "2026-11-06",
    "name": "Harbourside Dental",
    "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "clientName": "Harbourside Dental",
    "projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
    "projectName": "1 Harbour Road",
    "teamMemberName": "Sam Hart",
    "status": "text",
    "pricePence": 4500,
    "ageDays": -9007199254740991,
    "draftInvoiceId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "skippedReason": "text"
  }
]

Mark bookings as not to be invoiced (for example, covered by a fixed amount), saying why

POST/v1/invoices/uninvoiced/skip

Permission
invoice.manage
Module
invoicing
Answers
200

Request body JSON

  • bookingIdsarray of uuidrequired

    1–500 items

  • reasonstringrequired

    1–300 characters

Response object

  • okconstantrequired

    Always true

curl -X POST "https://app.workscope.co.uk/v1/invoices/uninvoiced/skip" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "bookingIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "reason": "text"
  }'

Example response

{
  "ok": true
}

Take back "not to be invoiced" so bookings are invoiced again

POST/v1/invoices/uninvoiced/unskip

Permission
invoice.manage
Module
invoicing
Answers
200

Request body JSON

  • bookingIdsarray of uuidrequired

    1–500 items

Response object

  • okconstantrequired

    Always true

curl -X POST "https://app.workscope.co.uk/v1/invoices/uninvoiced/unskip" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "bookingIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ]
  }'

Example response

{
  "ok": true
}

Give several fortnightly or 4-weekly clients the same billing date (the last day of one of their periods), or clear it (null). Clients billed otherwise are skipped.

POST/v1/invoicing/billing-cycle

Permission
invoice.manage
Module
invoicing
Answers
200

Request body JSON

  • clientIdsarray of uuidrequired

    1–500 items

  • billingCycleEnddaterequiredcan be null

    YYYY-MM-DD

Response object

  • updatedintegerrequired

    -9007199254740991 to 9007199254740991

  • skippedarray of objectrequired
    • clientIduuidrequired
    • namestringrequired
    • reasonstringrequired
curl -X POST "https://app.workscope.co.uk/v1/invoicing/billing-cycle" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "clientIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "billingCycleEnd": "2026-11-06"
  }'

Example response

{
  "updated": -9007199254740991,
  "skipped": [
    {
      "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "name": "Harbourside Dental",
      "reason": "text"
    }
  ]
}

The billing frequencies in use: the company's, clients billed differently, and invoices made

GET/v1/invoicing/frequencies

Permission
invoice.view
Module
invoicing
Answers
200

Response object

  • frequenciesarray of enumrequired
curl "https://app.workscope.co.uk/v1/invoicing/frequencies" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "frequencies": [
    "weekly"
  ]
}

How clients are billed unless they say otherwise, VAT, numbering, payment terms and details

GET/v1/invoicing/settings

Permission
invoice.view
Module
invoicing
Answers
200

Response object

  • billingFrequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumrequired

    One of "bookings", "fixed"

  • vatRegisteredbooleanrequired
  • vatRateBpintegerrequired

    -9007199254740991 to 9007199254740991

  • invoicePrefixstringrequired
  • nextInvoiceNumberintegerrequired

    -9007199254740991 to 9007199254740991

  • paymentTermsDaysintegerrequired

    -9007199254740991 to 9007199254740991

  • paymentDetailsstringrequiredcan be null
  • invoiceTermsstringrequired
  • invoicePhotosbooleanrequired
  • invoiceSignedOffOnlybooleanrequired
  • creditPrefixstringrequired
  • nextCreditNumberintegerrequired

    -9007199254740991 to 9007199254740991

curl "https://app.workscope.co.uk/v1/invoicing/settings" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "billingFrequency": "weekly",
  "billingBasis": "bookings",
  "vatRegistered": false,
  "vatRateBp": 1207,
  "invoicePrefix": "text",
  "nextInvoiceNumber": -9007199254740991,
  "paymentTermsDays": -9007199254740991,
  "paymentDetails": "Side gate code is on the key safe.",
  "invoiceTerms": "text",
  "invoicePhotos": false,
  "invoiceSignedOffOnly": false,
  "creditPrefix": "text",
  "nextCreditNumber": -9007199254740991
}

Change the invoicing settings

PATCH/v1/invoicing/settings

Permission
invoice.manage
Module
invoicing
Answers
200

Request body JSON

  • billingFrequencyenumoptional

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumoptional

    One of "bookings", "fixed"

  • vatRegisteredbooleanoptional
  • vatRateBpintegeroptional

    0 to 10000

  • invoicePrefixstringoptional

    Matches ^[A-Za-z0-9/_.-]*$ · Up to 20 characters

  • nextInvoiceNumberintegeroptional

    1 to 99999999

  • paymentTermsDaysintegeroptional

    0 to 365

  • paymentDetailsstringoptionalcan be null

    Up to 2000 characters

  • invoiceTermsstringoptional

    Up to 5000 characters

  • invoicePhotosbooleanoptional
  • invoiceSignedOffOnlybooleanoptional
  • creditPrefixstringoptional

    Matches ^[A-Za-z0-9/_.-]*$ · Up to 20 characters

  • nextCreditNumberintegeroptional

    1 to 99999999

Response object

  • billingFrequencyenumrequired

    One of "weekly", "fortnightly", "four_weekly", "monthly", "quarterly", "ad_hoc"

  • billingBasisenumrequired

    One of "bookings", "fixed"

  • vatRegisteredbooleanrequired
  • vatRateBpintegerrequired

    -9007199254740991 to 9007199254740991

  • invoicePrefixstringrequired
  • nextInvoiceNumberintegerrequired

    -9007199254740991 to 9007199254740991

  • paymentTermsDaysintegerrequired

    -9007199254740991 to 9007199254740991

  • paymentDetailsstringrequiredcan be null
  • invoiceTermsstringrequired
  • invoicePhotosbooleanrequired
  • invoiceSignedOffOnlybooleanrequired
  • creditPrefixstringrequired
  • nextCreditNumberintegerrequired

    -9007199254740991 to 9007199254740991

curl -X PATCH "https://app.workscope.co.uk/v1/invoicing/settings" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "billingFrequency": "weekly",
    "billingBasis": "bookings",
    "vatRegistered": false,
    "vatRateBp": 1207,
    "invoicePrefix": "text",
    "nextInvoiceNumber": 1,
    "paymentTermsDays": 0,
    "paymentDetails": "Side gate code is on the key safe.",
    "invoiceTerms": "text",
    "invoicePhotos": false,
    "invoiceSignedOffOnly": false,
    "creditPrefix": "text",
    "nextCreditNumber": 1
  }'

Example response

{
  "billingFrequency": "weekly",
  "billingBasis": "bookings",
  "vatRegistered": false,
  "vatRateBp": 1207,
  "invoicePrefix": "text",
  "nextInvoiceNumber": -9007199254740991,
  "paymentTermsDays": -9007199254740991,
  "paymentDetails": "Side gate code is on the key safe.",
  "invoiceTerms": "text",
  "invoicePhotos": false,
  "invoiceSignedOffOnly": false,
  "creditPrefix": "text",
  "nextCreditNumber": -9007199254740991
}