WorkscopeAPI Open Workscope

API reference

Invoices

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

On this page

Credit notes, newest first

GET/v1/credit-notes

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
statusqueryenumOne of draft, issued, void
clientIdqueryuuid
invoiceIdqueryuuid

Response array of object

  • 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
curl "https://app.workscope.co.uk/v1/credit-notes" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "invoiceId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "invoiceReference": "INV-0042",
    "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
    "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"
  }
]

One credit note and its lines

GET/v1/credit-notes/{id}

Permission
invoice.view
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • 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
  • linesarray of objectrequired
    • iduuidrequired
    • invoiceLineIduuidrequiredcan be null
    • descriptionstringrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • vatRegisteredbooleanrequired
curl "https://app.workscope.co.uk/v1/credit-notes/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "invoiceId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "invoiceReference": "INV-0042",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "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",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "invoiceLineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500
    }
  ],
  "vatRegistered": false
}

Delete a draft credit note

DELETE/v1/credit-notes/{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/credit-notes/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "ok": true
}

A ready-to-send email for a credit note, in the company's wording

GET/v1/credit-notes/{id}/email

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • toarray of objectrequired
    • emailstringrequired
    • namestringrequiredcan be null
  • subjectstringrequired
  • messagestringrequired
  • pdfbooleanrequired
  • linkstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/credit-notes/ID/email" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "to": [
    {
      "email": "office@example.co.uk",
      "name": "Harbourside Dental"
    }
  ],
  "subject": "text",
  "message": "text",
  "pdf": false,
  "link": "text"
}

Issue a draft credit note: it gets the next credit number and comes off the invoice's amount due

POST/v1/credit-notes/{id}/issue

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • 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
  • linesarray of objectrequired
    • iduuidrequired
    • invoiceLineIduuidrequiredcan be null
    • descriptionstringrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

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

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "invoiceId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "invoiceReference": "INV-0042",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "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",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "invoiceLineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500
    }
  ],
  "vatRegistered": false
}

The credit note as a PDF

GET/v1/credit-notes/{id}/pdf

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

Parameters

NameInKind
idpathuuidrequired
curl "https://app.workscope.co.uk/v1/credit-notes/ID/pdf" \
  -H "Authorization: Bearer wsk_your_key_here"

Email an issued credit note with its PDF and the invoice's link

POST/v1/credit-notes/{id}/send

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • toarray of emailrequired

    1–5 items

  • subjectstringrequired

    1–300 characters

  • messagestringrequired

    1–10000 characters

Response object

  • 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
  • linesarray of objectrequired
    • iduuidrequired
    • invoiceLineIduuidrequiredcan be null
    • descriptionstringrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • vatRegisteredbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/credit-notes/ID/send" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "to": [
      "office@example.co.uk"
    ],
    "subject": "text",
    "message": "text"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "invoiceId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "invoiceReference": "INV-0042",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "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",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "invoiceLineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500
    }
  ],
  "vatRegistered": false
}

Void an issued credit note, saying why (it keeps its number)

POST/v1/credit-notes/{id}/void

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • reasonstringrequired

    1–500 characters

Response object

  • 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
  • linesarray of objectrequired
    • iduuidrequired
    • invoiceLineIduuidrequiredcan be null
    • descriptionstringrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • vatRegisteredbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/credit-notes/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",
  "invoiceId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "invoiceReference": "INV-0042",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "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",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "invoiceLineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500
    }
  ],
  "vatRegistered": false
}

Raise a credit note from an issued invoice: the whole of it, chosen lines, or an amount, with a reason (a draft, or issued straight away)

POST/v1/invoices/{id}/credits

Permission
invoice.manage
Module
invoicing
Answers
201

Parameters

NameInKind
idpathuuidrequired

Request body JSON

Option 1: object

  • kindconstantrequired

    Always "whole"

  • reasonstringrequired

    1–500 characters

  • uninvoiceBookingsbooleanoptional

    Default false

  • issuebooleanoptional

    Default false

Option 2: object

  • kindconstantrequired

    Always "lines"

  • reasonstringrequired

    1–500 characters

  • linesarray of objectrequired

    1–1000 items

    • invoiceLineIduuidrequired
    • netPenceintegerrequired

      0 to 100000000

  • issuebooleanoptional

    Default false

Option 3: object

  • kindconstantrequired

    Always "amount"

  • reasonstringrequired

    1–500 characters

  • grossPenceintegerrequired

    0 to 100000000

  • descriptionstringoptionalcan be null

    Up to 300 characters

  • issuebooleanoptional

    Default false

Response object

  • 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
  • linesarray of objectrequired
    • iduuidrequired
    • invoiceLineIduuidrequiredcan be null
    • descriptionstringrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • vatRateBpintegerrequired

      -9007199254740991 to 9007199254740991

    • vatPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • vatRegisteredbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/invoices/ID/credits" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "whole",
    "reason": "text",
    "uninvoiceBookings": false,
    "issue": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "invoiceId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "invoiceReference": "INV-0042",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "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",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "invoiceLineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "netPence": 4500,
      "vatRateBp": 1207,
      "vatPence": 4500
    }
  ],
  "vatRegistered": false
}

A ready-to-send email for an invoice, in the company's wording: who it could go to, subject and message

GET/v1/invoices/{id}/email

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired
kindqueryenumOne of invoice, invoice_reminder, payment_received · Default "invoice"

Response object

  • toarray of objectrequired
    • emailstringrequired
    • namestringrequiredcan be null
  • subjectstringrequired
  • messagestringrequired
  • pdfbooleanrequired
  • linkstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/invoices/ID/email" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "to": [
    {
      "email": "office@example.co.uk",
      "name": "Harbourside Dental"
    }
  ],
  "subject": "text",
  "message": "text",
  "pdf": false,
  "link": "text"
}

The invoice as a PDF (kept once issued; a draft is made fresh, marked DRAFT)

GET/v1/invoices/{id}/pdf

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

Parameters

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

Record money paid back to the client on a paid invoice with credits

POST/v1/invoices/{id}/refunds

Permission
invoice.manage
Module
invoicing
Answers
201

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • amountPenceintegerrequired

    0 to 100000000

  • refundedOndaterequired

    YYYY-MM-DD

  • methodstringoptionalcan be null

    Up to 50 characters

  • notestringoptionalcan be null

    Up to 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/refunds" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "amountPence": 4500,
    "refundedOn": "2026-11-06",
    "method": "text",
    "note": "Side gate code is on the key safe."
  }'

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 back a refund recorded by mistake

DELETE/v1/invoices/{id}/refunds/{refundId}

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired
refundIdpathuuidrequired

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/refunds/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
    }
  ]
}

Email an issued invoice (or a reminder) with its PDF and link; logged on the invoice

POST/v1/invoices/{id}/send

Permission
invoice.manage
Module
invoicing
Answers
200

Parameters

NameInKind
idpathuuidrequired
kindqueryenumOne of invoice, invoice_reminder, payment_received · Default "invoice"

Request body JSON

  • toarray of emailrequired

    1–5 items

  • subjectstringrequired

    1–300 characters

  • messagestringrequired

    1–10000 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/send" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "to": [
      "office@example.co.uk"
    ],
    "subject": "text",
    "message": "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
    }
  ]
}