WorkscopeAPI Open Workscope

API reference

Quotes

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

On this page

Saved quote items in their order (archived ones with archived=true)

GET/v1/quote-items

Permission
quote.view
Module
quotes
Answers
200

Parameters

NameInKind
archivedqueryenumOne of true, false

Response array of object

  • iduuidrequired
  • namestringrequired
  • descriptionstringrequired
  • quantityX100integerrequired

    -9007199254740991 to 9007199254740991

  • unitPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • periodenumrequiredcan be null

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

  • optionalbooleanrequired
  • archivedbooleanrequired
  • usedintegerrequired

    -9007199254740991 to 9007199254740991

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

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "quantityX100": -9007199254740991,
    "unitPence": 4500,
    "period": "weekly",
    "optional": false,
    "archived": false,
    "used": -9007199254740991
  }
]

Save an item (added at the end of the list)

POST/v1/quote-items

Permission
quote.manage
Module
quotes
Answers
201

Request body JSON

  • namestringrequired

    1–200 characters

  • descriptionstringrequired

    1–2000 characters

  • quantityX100integeroptional

    1 to 10000000 · Default 100

  • unitPenceintegerrequired

    -100000000 to 100000000

  • periodenumoptionalcan be null

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

  • optionalbooleanoptional

    Default false

Response object

  • iduuidrequired
  • namestringrequired
  • descriptionstringrequired
  • quantityX100integerrequired

    -9007199254740991 to 9007199254740991

  • unitPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • periodenumrequiredcan be null

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

  • optionalbooleanrequired
  • archivedbooleanrequired
  • usedintegerrequired

    -9007199254740991 to 9007199254740991

curl -X POST "https://app.workscope.co.uk/v1/quote-items" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "quantityX100": 100,
    "unitPence": 4500,
    "period": "weekly",
    "optional": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "description": "Side gate code is on the key safe.",
  "quantityX100": -9007199254740991,
  "unitPence": 4500,
  "period": "weekly",
  "optional": false,
  "archived": false,
  "used": -9007199254740991
}

Change or archive a saved item (quotes already made keep their copy)

PATCH/v1/quote-items/{id}

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • namestringoptional

    1–200 characters

  • descriptionstringoptional

    1–2000 characters

  • quantityX100integeroptional

    1 to 10000000

  • unitPenceintegeroptional

    -100000000 to 100000000

  • periodenumoptionalcan be null

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

  • optionalbooleanoptional
  • archivedbooleanoptional

Response object

  • iduuidrequired
  • namestringrequired
  • descriptionstringrequired
  • quantityX100integerrequired

    -9007199254740991 to 9007199254740991

  • unitPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • periodenumrequiredcan be null

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

  • optionalbooleanrequired
  • archivedbooleanrequired
  • usedintegerrequired

    -9007199254740991 to 9007199254740991

curl -X PATCH "https://app.workscope.co.uk/v1/quote-items/ID" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "quantityX100": 1,
    "unitPence": 4500,
    "period": "weekly",
    "optional": false,
    "archived": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "description": "Side gate code is on the key safe.",
  "quantityX100": -9007199254740991,
  "unitPence": 4500,
  "period": "weekly",
  "optional": false,
  "archived": false,
  "used": -9007199254740991
}

Delete a saved item no quote has used (archive it otherwise)

DELETE/v1/quote-items/{id}

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • okconstantrequired

    Always true

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

Example response

{
  "ok": true
}

Put the saved items in this order

PUT/v1/quote-items/order

Permission
quote.manage
Module
quotes
Answers
200

Request body JSON

  • idsarray of uuidrequired

    1–500 items

Response array of object

  • iduuidrequired
  • namestringrequired
  • descriptionstringrequired
  • quantityX100integerrequired

    -9007199254740991 to 9007199254740991

  • unitPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • periodenumrequiredcan be null

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

  • optionalbooleanrequired
  • archivedbooleanrequired
  • usedintegerrequired

    -9007199254740991 to 9007199254740991

curl -X PUT "https://app.workscope.co.uk/v1/quote-items/order" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ]
  }'

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "quantityX100": -9007199254740991,
    "unitPence": 4500,
    "period": "weekly",
    "optional": false,
    "archived": false,
    "used": -9007199254740991
  }
]

Quotes, newest first, with counts by status (expired ones shown as expired)

GET/v1/quotes

Permission
quote.view
Module
quotes
Answers
200

Parameters

NameInKind
statusqueryenumOne of draft, sent, viewed, accepted, declined, expired, withdrawn, all, waiting · Default "all"
enquiryIdqueryuuid
clientIdqueryuuid
qquerystring
projectIdqueryuuid

Response object

  • quotesarray of objectrequired
    • iduuidrequired
    • numberintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • referencestringrequiredcan be null
    • titlestringrequired
    • statusenumrequired

      One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • enquiryIduuidrequiredcan be null
    • clientIduuidrequired
    • forNamestringrequired
    • recipientEmailstringrequiredcan be null
    • validUntildaterequiredcan be null

      YYYY-MM-DD

    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • sentAtstringrequiredcan be null
    • answeredAtstringrequiredcan be null
    • createdAtstringrequired
  • countsobjectrequired
curl "https://app.workscope.co.uk/v1/quotes" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "quotes": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "number": -9007199254740991,
      "reference": "INV-0042",
      "title": "text",
      "status": "draft",
      "version": -9007199254740991,
      "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "forName": "Harbourside Dental",
      "recipientEmail": "office@example.co.uk",
      "validUntil": "2026-11-06",
      "oneOffNet": -9007199254740991,
      "recurring": [
        {
          "net": -9007199254740991,
          "period": "weekly"
        }
      ],
      "sentAt": "2026-11-06T09:30:00.000Z",
      "answeredAt": "2026-11-06T09:30:00.000Z",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "counts": {}
}

Start a quote for an enquiry or a client (a draft, no number yet); can copy another quote

POST/v1/quotes

Permission
quote.manage
Module
quotes
Answers
201

Request body JSON

  • enquiryIduuidoptionalcan be null
  • clientIduuidoptionalcan be null
  • contactIduuidoptionalcan be null
  • titlestringrequired

    1–200 characters

  • copyFromQuoteIduuidoptional

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X POST "https://app.workscope.co.uk/v1/quotes" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "enquiryId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
    "title": "text",
    "copyFromQuoteId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

One quote: the working copy, its totals, versions sent, the acceptance and history

GET/v1/quotes/{id}

Permission
quote.view
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

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

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Change the working copy (lines are replaced as a whole). A sent quote changes only when sent again, as a new version.

PATCH/v1/quotes/{id}

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • titlestringoptional

    1–200 characters

  • scopestringoptionalcan be null

    Up to 50000 characters

  • termsstringoptionalcan be null

    Up to 20000 characters

  • notesstringoptionalcan be null

    Up to 20000 characters

  • validUntildateoptionalcan be null

    YYYY-MM-DD

  • clientIduuidoptional
  • contactIduuidoptionalcan be null
  • recipientNamestringoptionalcan be null

    Up to 200 characters

  • recipientEmailconstant or stringoptionalcan be null
  • recipientCompanystringoptionalcan be null

    Up to 200 characters

  • recipientAddressstringoptionalcan be null

    Up to 500 characters

  • linesarray of objectoptional

    Up to 200 items

    • iduuidoptional
    • descriptionstringrequired

      1–2000 characters

    • quantityX100integeroptional

      1 to 10000000 · Default 100

    • unitPenceintegerrequired

      -100000000 to 100000000

    • periodenumoptionalcan be null

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

    • optionalbooleanoptional

      Default false

    • itemIduuidoptionalcan be null

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X PATCH "https://app.workscope.co.uk/v1/quotes/ID" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "text",
    "scope": "text",
    "terms": "text",
    "notes": "Side gate code is on the key safe.",
    "validUntil": "2026-11-06",
    "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "contactId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "recipientName": "Harbourside Dental",
    "recipientEmail": "",
    "recipientCompany": "text",
    "recipientAddress": "1 Harbour Road, Bristol",
    "lines": [
      {
        "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
        "description": "Side gate code is on the key safe.",
        "quantityX100": 100,
        "unitPence": 4500,
        "period": "weekly",
        "optional": false,
        "itemId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
      }
    ]
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Delete a draft that was never sent

DELETE/v1/quotes/{id}

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • okconstantrequired

    Always true

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

Example response

{
  "ok": true
}

A ready-to-send email for a quote (sending it, or a nudge) in the company's wording

GET/v1/quotes/{id}/email

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired
kindqueryenumOne of quote, quote_nudge · Default "quote"

Response object

  • toarray of objectrequired
    • emailstringrequired
    • namestringrequiredcan be null
  • subjectstringrequired
  • messagestringrequired
  • pdfbooleanrequired
  • linkstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/quotes/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"
}

Add a picture to the scope

POST/v1/quotes/{id}/images

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body the file itself

Send the file as the body, with Content-Type one of image/jpeg, image/png, image/webp, image/heic, image/heif. See Files and photos.

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X POST "https://app.workscope.co.uk/v1/quotes/ID/images" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Take a picture out of the working copy (versions already sent keep it)

DELETE/v1/quotes/{id}/images/{imageId}

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired
imageIdpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

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

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

A picture in the scope

GET/v1/quotes/{id}/images/{imageId}/{size}

Permission
quote.view
Module
quotes
Answers
200 with a file (image/jpeg)

Parameters

NameInKind
idpathuuidrequired
imageIdpathuuidrequired
sizepathenumrequiredOne of thumb, full
curl "https://app.workscope.co.uk/v1/quotes/ID/images/ID/SIZE" \
  -H "Authorization: Bearer wsk_your_key_here"

Email the client a nudge about a quote that is out, with its link

POST/v1/quotes/{id}/nudge

Permission
quote.manage
Module
quotes
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
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X POST "https://app.workscope.co.uk/v1/quotes/ID/nudge" \
  -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",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

The latest version sent as a PDF (signed, once accepted)

GET/v1/quotes/{id}/pdf

Permission
quote.view
Module
quotes
Answers
200 with a file (image/jpeg)

Parameters

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

The working copy as the client would see it if it were sent now

GET/v1/quotes/{id}/preview

Permission
quote.view
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • referencestringrequired
  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • titlestringrequired
  • issuedOndaterequired

    YYYY-MM-DD

  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • phonestringrequiredcan be null
    • emailstringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • logoUrlstringrequiredcan be null
  • toobjectrequired
    • namestringrequiredcan be null
    • companystringrequiredcan be null
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
  • scopestringrequiredcan be null
  • imagesarray of objectrequired
    • iduuidrequired
    • thumbUrlstringrequired
    • fullUrlstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • fingerprintstringrequired
  • acceptedobjectrequiredcan be null
    • namestringrequired
    • atstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringoptionalcan be null
  • pdfUrlstringoptionalcan be null
  • declinedAtstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/quotes/ID/preview" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "reference": "INV-0042",
  "version": -9007199254740991,
  "status": "draft",
  "title": "text",
  "issuedOn": "2026-11-06",
  "validUntil": "2026-11-06",
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "phone": "0117 496 0123",
    "email": "office@example.co.uk",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "logoUrl": "https://example.co.uk"
  },
  "to": {
    "name": "Harbourside Dental",
    "company": "text",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk"
  },
  "scope": "text",
  "images": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "lines": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "itemId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "vatRegistered": false,
  "terms": "text",
  "fingerprint": "text",
  "accepted": {
    "name": "Harbourside Dental",
    "at": "2026-11-06T09:30:00.000Z",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "pdfUrl": "https://example.co.uk",
  "declinedAt": "2026-11-06T09:30:00.000Z"
}

Add a project (property) for an accepted quote's client, for its address, and link the quote to it

POST/v1/quotes/{id}/project

Permission
quote.manage or project.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • namestringrequired

    1–200 characters

  • addressstringoptionalcan be null

    Up to 500 characters

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X POST "https://app.workscope.co.uk/v1/quotes/ID/project" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Choose what an accepted quote's work is booked against: the client only, or one of its existing projects (until work has been made from it)

PUT/v1/quotes/{id}/project

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • projectIduuidrequiredcan be null

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X PUT "https://app.workscope.co.uk/v1/quotes/ID/project" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Send the working copy as the next version (numbered on first send), by email or just to share the link

POST/v1/quotes/{id}/send

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • emailbooleanoptional

    Default true

  • toarray of emailoptional

    1–5 items

  • subjectstringoptional

    Up to 300 characters

  • messagestringoptional

    Up to 10000 characters

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

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

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

The signature an accepted quote was signed with

GET/v1/quotes/{id}/signature

Permission
quote.view
Module
quotes
Answers
200 with a file (image/jpeg)

Parameters

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

A version exactly as it was sent (as the client sees it)

GET/v1/quotes/{id}/versions/{version}

Permission
quote.view
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired
versionpathintegerrequired

Response object

  • referencestringrequired
  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • titlestringrequired
  • issuedOndaterequired

    YYYY-MM-DD

  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • fromobjectrequired
    • namestringrequired
    • addressstringrequiredcan be null
    • phonestringrequiredcan be null
    • emailstringrequiredcan be null
    • websitestringrequiredcan be null
    • companyNumberstringrequiredcan be null
    • vatNumberstringrequiredcan be null
    • logoUrlstringrequiredcan be null
  • toobjectrequired
    • namestringrequiredcan be null
    • companystringrequiredcan be null
    • addressstringrequiredcan be null
    • emailstringrequiredcan be null
  • scopestringrequiredcan be null
  • imagesarray of objectrequired
    • iduuidrequired
    • thumbUrlstringrequired
    • fullUrlstringrequired
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • vatRegisteredbooleanrequired
  • termsstringrequiredcan be null
  • fingerprintstringrequired
  • acceptedobjectrequiredcan be null
    • namestringrequired
    • atstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringoptionalcan be null
  • pdfUrlstringoptionalcan be null
  • declinedAtstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/quotes/ID/versions/VERSION" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "reference": "INV-0042",
  "version": -9007199254740991,
  "status": "draft",
  "title": "text",
  "issuedOn": "2026-11-06",
  "validUntil": "2026-11-06",
  "from": {
    "name": "Harbourside Dental",
    "address": "1 Harbour Road, Bristol",
    "phone": "0117 496 0123",
    "email": "office@example.co.uk",
    "website": "https://example.co.uk",
    "companyNumber": "text",
    "vatNumber": "text",
    "logoUrl": "https://example.co.uk"
  },
  "to": {
    "name": "Harbourside Dental",
    "company": "text",
    "address": "1 Harbour Road, Bristol",
    "email": "office@example.co.uk"
  },
  "scope": "text",
  "images": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "lines": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "itemId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "vatRegistered": false,
  "terms": "text",
  "fingerprint": "text",
  "accepted": {
    "name": "Harbourside Dental",
    "at": "2026-11-06T09:30:00.000Z",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "pdfUrl": "https://example.co.uk",
  "declinedAt": "2026-11-06T09:30:00.000Z"
}

Withdraw a quote that is out (its link then says so)

POST/v1/quotes/{id}/withdraw

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

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

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Mark an accepted line as not needed as work (or take that back). Jobs and bookings made with fromQuote link themselves.

POST/v1/quotes/{id}/work

Permission
quote.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • lineIduuidrequired
  • notNeededbooleanrequired

Response object

  • iduuidrequired
  • numberintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • referencestringrequiredcan be null
  • titlestringrequired
  • statusenumrequired

    One of "draft", "sent", "viewed", "accepted", "declined", "expired", "withdrawn"

  • versionintegerrequired

    -9007199254740991 to 9007199254740991

  • enquiryIduuidrequiredcan be null
  • clientIduuidrequired
  • forNamestringrequired
  • recipientEmailstringrequiredcan be null
  • validUntildaterequiredcan be null

    YYYY-MM-DD

  • oneOffNetintegerrequired

    -9007199254740991 to 9007199254740991

  • recurringarray of objectrequired
    • netintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequired

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

  • sentAtstringrequiredcan be null
  • answeredAtstringrequiredcan be null
  • createdAtstringrequired
  • scopestringrequiredcan be null
  • termsstringrequiredcan be null
  • notesstringrequiredcan be null
  • recipientNamestringrequiredcan be null
  • recipientCompanystringrequiredcan be null
  • recipientAddressstringrequiredcan be null
  • linesarray of objectrequired
    • iduuidrequired
    • itemIduuidoptionalcan be null
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • optionalbooleanrequired
    • netPenceintegerrequired

      -9007199254740991 to 9007199254740991

  • totalsobjectrequired
    • oneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • recurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

    • optionalOneOffobjectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

    • optionalRecurringarray of objectrequired
      • netintegerrequired

        -9007199254740991 to 9007199254740991

      • periodenumrequired

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

  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • thumbUrlstringrequired
    • fullUrlstringrequired
  • vatRegisteredbooleanrequired
  • publicUrlstringrequiredcan be null
  • unsentChangesbooleanrequired
  • versionsarray of objectrequired
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • sentAtstringrequired
    • sentByNamestringrequiredcan be null
    • fingerprintstringrequired
    • oneOffNetintegerrequired

      -9007199254740991 to 9007199254740991

  • acceptanceobjectrequiredcan be null
    • versionintegerrequired

      -9007199254740991 to 9007199254740991

    • namestringrequired
    • emailstringrequiredcan be null
    • atstringrequired
    • ipstringrequiredcan be null
    • userAgentstringrequiredcan be null
    • fingerprintstringrequired
    • optionalLineIdsarray of uuidrequired
    • signatureUrlstringrequired
  • declineReasonstringrequiredcan be null
  • changesarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "edited", "sent", "viewed", "accepted", "declined", "withdrawn", "reopened", "converted"

    • summarystringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
  • enquiryNamestringrequiredcan be null
  • clientNamestringrequired
  • contactIduuidrequiredcan be null
  • clientAddressstringrequiredcan be null
  • projectIduuidrequiredcan be null
  • projectNamestringrequiredcan be null
  • workarray of objectrequiredcan be null
    • lineIduuidrequired
    • descriptionstringrequired
    • quantityX100integerrequired

      -9007199254740991 to 9007199254740991

    • unitPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • periodenumrequiredcan be null

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

    • notNeededbooleanrequired
    • jobsarray of objectrequired
      • iduuidrequired
      • namestringrequired
    • bookingsarray of objectrequired
      • iduuidrequired
      • namestringrequired
      • datedaterequiredcan be null

        YYYY-MM-DD

curl -X POST "https://app.workscope.co.uk/v1/quotes/ID/work" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "lineId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "notNeeded": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "number": -9007199254740991,
  "reference": "INV-0042",
  "title": "text",
  "status": "draft",
  "version": -9007199254740991,
  "enquiryId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "forName": "Harbourside Dental",
  "recipientEmail": "office@example.co.uk",
  "validUntil": "2026-11-06",
  "oneOffNet": -9007199254740991,
  "recurring": [
    {
      "net": -9007199254740991,
      "period": "weekly"
    }
  ],
  "sentAt": "2026-11-06T09:30:00.000Z",
  "answeredAt": "2026-11-06T09:30:00.000Z",
  "createdAt": "2026-11-06T09:30:00.000Z",
  "scope": "text",
  "terms": "text",
  "notes": "Side gate code is on the key safe.",
  "recipientName": "Harbourside Dental",
  "recipientCompany": "text",
  "recipientAddress": "1 Harbour Road, Bristol",
  "lines": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "itemId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "optional": false,
      "netPence": 4500
    }
  ],
  "totals": {
    "oneOff": {
      "net": -9007199254740991
    },
    "recurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ],
    "optionalOneOff": {
      "net": -9007199254740991
    },
    "optionalRecurring": [
      {
        "net": -9007199254740991,
        "period": "weekly"
      }
    ]
  },
  "images": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "vatRegistered": false,
  "publicUrl": "https://example.co.uk",
  "unsentChanges": false,
  "versions": [
    {
      "version": -9007199254740991,
      "sentAt": "2026-11-06T09:30:00.000Z",
      "sentByName": "Harbourside Dental",
      "fingerprint": "text",
      "oneOffNet": -9007199254740991
    }
  ],
  "acceptance": {
    "version": -9007199254740991,
    "name": "Harbourside Dental",
    "email": "office@example.co.uk",
    "at": "2026-11-06T09:30:00.000Z",
    "ip": "text",
    "userAgent": "text",
    "fingerprint": "text",
    "optionalLineIds": [
      "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
    ],
    "signatureUrl": "https://example.co.uk"
  },
  "declineReason": "text",
  "changes": [
    {
      "id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "kind": "created",
      "summary": "text",
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ],
  "enquiryName": "Harbourside Dental",
  "clientName": "Harbourside Dental",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "clientAddress": "1 Harbour Road, Bristol",
  "projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "projectName": "1 Harbour Road",
  "work": [
    {
      "lineId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "description": "Side gate code is on the key safe.",
      "quantityX100": -9007199254740991,
      "unitPence": 4500,
      "period": "weekly",
      "notNeeded": false,
      "jobs": [
        {
          "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
          "name": "Harbourside Dental"
        }
      ],
      "bookings": [
        {
          "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
          "name": "Harbourside Dental",
          "date": "2026-11-06"
        }
      ]
    }
  ]
}

Quote numbering, how long a quote stands, and the terms new quotes start with

GET/v1/quotes/settings

Permission
quote.view
Module
quotes
Answers
200

Response object

  • quotePrefixstringrequired
  • nextQuoteNumberintegerrequired

    -9007199254740991 to 9007199254740991

  • quoteValidityDaysintegerrequired

    -9007199254740991 to 9007199254740991

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

Example response

{
  "quotePrefix": "text",
  "nextQuoteNumber": -9007199254740991,
  "quoteValidityDays": -9007199254740991,
  "quoteTerms": "text"
}

Change the quote settings

PATCH/v1/quotes/settings

Permission
quote.manage
Module
quotes
Answers
200

Request body JSON

  • quotePrefixstringoptional

    Up to 10 characters

  • nextQuoteNumberintegeroptional

    1 to 9999999

  • quoteValidityDaysintegeroptional

    1 to 365

  • quoteTermsstringoptional

    Up to 20000 characters

Response object

  • quotePrefixstringrequired
  • nextQuoteNumberintegerrequired

    -9007199254740991 to 9007199254740991

  • quoteValidityDaysintegerrequired

    -9007199254740991 to 9007199254740991

  • quoteTermsstringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/quotes/settings" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "quotePrefix": "text",
    "nextQuoteNumber": 1,
    "quoteValidityDays": 1,
    "quoteTerms": "text"
  }'

Example response

{
  "quotePrefix": "text",
  "nextQuoteNumber": -9007199254740991,
  "quoteValidityDays": -9007199254740991,
  "quoteTerms": "text"
}