API reference
Purchasing
35 requests. Each shows the permission a key needs, what to send and what comes back.
On this page
Products and materials charged to clients, newest first, with what is not invoiced yet
GET/v1/client-charges
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
clientId | query | uuid | |
projectId | query | uuid | |
uninvoiced | query | enum | One of true, false |
Response object
chargesarray of objectrequirediduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullbookingIduuidrequiredcan be nulldatedaterequiredYYYY-MM-DD
descriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
unitSellPenceintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
sourceenumrequiredOne of
"order","stock"orderIduuidrequiredcan be nullorderReferencestringrequiredcan be nullproductIduuidrequiredcan be nullinvoiceobjectrequiredcan be nulliduuidrequiredreferencestringrequiredcan be nullstatusstringrequired
createdAtstringrequired
uninvoicedPenceintegerrequired-9007199254740991 to 9007199254740991
uninvoicedCountintegerrequired-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/client-charges" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"charges": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"bookingId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"date": "2026-11-06",
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500,
"unitSellPence": 4500,
"netPence": 4500,
"vatRateBp": 1207,
"source": "order",
"orderId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"orderReference": "INV-0042",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invoice": {
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "text"
},
"createdAt": "2026-11-06T09:30:00.000Z"
}
],
"uninvoicedPence": 4500,
"uninvoicedCount": 3
}Change a charge that is not on an invoice yet
PATCH/v1/client-charges/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
descriptionstringoptional1–500 characters
quantityX100integeroptional1 to 100000000
unitSellPenceintegeroptional0 to 100000000
datedateoptionalYYYY-MM-DD
projectIduuidoptionalcan be null
Response object
iduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullbookingIduuidrequiredcan be nulldatedaterequiredYYYY-MM-DD
descriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
unitSellPenceintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
sourceenumrequiredOne of
"order","stock"orderIduuidrequiredcan be nullorderReferencestringrequiredcan be nullproductIduuidrequiredcan be nullinvoiceobjectrequiredcan be nulliduuidrequiredreferencestringrequiredcan be nullstatusstringrequired
createdAtstringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/client-charges/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"description": "Side gate code is on the key safe.",
"quantityX100": 1,
"unitSellPence": 4500,
"date": "2026-11-06",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"bookingId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"date": "2026-11-06",
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500,
"unitSellPence": 4500,
"netPence": 4500,
"vatRateBp": 1207,
"source": "order",
"orderId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"orderReference": "INV-0042",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invoice": {
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "text"
},
"createdAt": "2026-11-06T09:30:00.000Z"
}Take off a charge that is not on an invoice (one from stock goes back into stock)
DELETE/v1/client-charges/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/client-charges/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}A client's own markup on purchases (null: the company's)
GET/v1/clients/{id}/markup
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
markupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/clients/ID/markup" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"markupBp": 1207
}Set a client's own markup, or null for the company's
PUT/v1/clients/{id}/markup
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
markupBpintegerrequiredcan be null0 to 100000
Response object
markupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
curl -X PUT "https://app.workscope.co.uk/v1/clients/ID/markup" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"markupBp": 1207
}'Example response
{
"markupBp": 1207
}Products by name, with stock on hand (archived ones with archived=true)
GET/v1/products
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
archived | query | enum | One of true, false |
Response array of object
iduuidrequirednamestringrequiredcodestringrequiredcan be nullunitstringrequiredsupplierIduuidrequiredcan be nullsupplierNamestringrequiredcan be nullcostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellAtMarkupPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
trackStockbooleanrequiredreorderLevelX100integerrequiredcan be null-9007199254740991 to 9007199254740991
onHandX100integerrequired-9007199254740991 to 9007199254740991
avgCostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lowbooleanrequiredarchivedbooleanrequired
curl "https://app.workscope.co.uk/v1/products" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"code": "text",
"unit": "text",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"costPence": 4500,
"sellPence": 4500,
"sellAtMarkupPence": 4500,
"vatRateBp": 1207,
"trackStock": false,
"reorderLevelX100": -9007199254740991,
"onHandX100": -9007199254740991,
"avgCostPence": 4500,
"low": false,
"archived": false
}
]Add a product
POST/v1/products
- Permission
purchase.manage- Module
purchases- Answers
201
Request body JSON
namestringrequired1–200 characters
codestringoptionalcan be nullUp to 100 characters
unitstringoptional1–30 characters · Default
"each"supplierIduuidoptionalcan be nullcostPenceintegeroptionalcan be null0 to 100000000
sellPenceintegeroptionalcan be null0 to 100000000
vatRateBpintegeroptionalcan be null0 to 10000
trackStockbooleanoptionalDefault
falsereorderLevelX100integeroptionalcan be null0 to 100000000
Response object
iduuidrequirednamestringrequiredcodestringrequiredcan be nullunitstringrequiredsupplierIduuidrequiredcan be nullsupplierNamestringrequiredcan be nullcostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellAtMarkupPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
trackStockbooleanrequiredreorderLevelX100integerrequiredcan be null-9007199254740991 to 9007199254740991
onHandX100integerrequired-9007199254740991 to 9007199254740991
avgCostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lowbooleanrequiredarchivedbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/products" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"code": "text",
"unit": "each",
"supplierId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"costPence": 4500,
"sellPence": 4500,
"vatRateBp": 1207,
"trackStock": false,
"reorderLevelX100": 0
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"code": "text",
"unit": "text",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"costPence": 4500,
"sellPence": 4500,
"sellAtMarkupPence": 4500,
"vatRateBp": 1207,
"trackStock": false,
"reorderLevelX100": -9007199254740991,
"onHandX100": -9007199254740991,
"avgCostPence": 4500,
"low": false,
"archived": false
}Change or archive a product
PATCH/v1/products/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
namestringoptional1–200 characters
codestringoptionalcan be nullUp to 100 characters
unitstringoptional1–30 characters · Default
"each"supplierIduuidoptionalcan be nullcostPenceintegeroptionalcan be null0 to 100000000
sellPenceintegeroptionalcan be null0 to 100000000
vatRateBpintegeroptionalcan be null0 to 10000
trackStockbooleanoptionalDefault
falsereorderLevelX100integeroptionalcan be null0 to 100000000
archivedbooleanoptional
Response object
iduuidrequirednamestringrequiredcodestringrequiredcan be nullunitstringrequiredsupplierIduuidrequiredcan be nullsupplierNamestringrequiredcan be nullcostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellAtMarkupPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
trackStockbooleanrequiredreorderLevelX100integerrequiredcan be null-9007199254740991 to 9007199254740991
onHandX100integerrequired-9007199254740991 to 9007199254740991
avgCostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lowbooleanrequiredarchivedbooleanrequired
curl -X PATCH "https://app.workscope.co.uk/v1/products/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"code": "text",
"unit": "each",
"supplierId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"costPence": 4500,
"sellPence": 4500,
"vatRateBp": 1207,
"trackStock": false,
"reorderLevelX100": 0,
"archived": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"code": "text",
"unit": "text",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"costPence": 4500,
"sellPence": 4500,
"sellAtMarkupPence": 4500,
"vatRateBp": 1207,
"trackStock": false,
"reorderLevelX100": -9007199254740991,
"onHandX100": -9007199254740991,
"avgCostPence": 4500,
"low": false,
"archived": false
}Delete a product never ordered or stocked (archive it otherwise)
DELETE/v1/products/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/products/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}Count the stock of a product, or add or take some away, saying why
POST/v1/products/{id}/adjust
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
modeenumrequiredOne of
"count","change"quantityX100integerrequired-100000000 to 100000000
reasonstringrequired1–500 characters
unitCostPenceintegeroptional0 to 100000000
Response object
iduuidrequirednamestringrequiredcodestringrequiredcan be nullunitstringrequiredsupplierIduuidrequiredcan be nullsupplierNamestringrequiredcan be nullcostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
sellAtMarkupPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
trackStockbooleanrequiredreorderLevelX100integerrequiredcan be null-9007199254740991 to 9007199254740991
onHandX100integerrequired-9007199254740991 to 9007199254740991
avgCostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lowbooleanrequiredarchivedbooleanrequired
curl -X POST "https://app.workscope.co.uk/v1/products/ID/adjust" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"mode": "count",
"quantityX100": -100000000,
"reason": "text",
"unitCostPence": 4500
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"code": "text",
"unit": "text",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"costPence": 4500,
"sellPence": 4500,
"sellAtMarkupPence": 4500,
"vatRateBp": 1207,
"trackStock": false,
"reorderLevelX100": -9007199254740991,
"onHandX100": -9007199254740991,
"avgCostPence": 4500,
"low": false,
"archived": false
}Take some from stock for a client: it becomes a charge on their next invoice
POST/v1/products/{id}/issue
- Permission
purchase.manage- Module
purchases- Answers
201
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
quantityX100integerrequired1 to 100000000
clientIduuidrequiredprojectIduuidoptionalcan be nullbookingIduuidoptionalcan be nulldatedateoptionalYYYY-MM-DD
unitSellPenceintegeroptionalcan be null0 to 100000000
descriptionstringoptionalcan be nullUp to 500 characters
Response object
iduuidrequiredclientIduuidrequiredclientNamestringrequiredprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullbookingIduuidrequiredcan be nulldatedaterequiredYYYY-MM-DD
descriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
unitSellPenceintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
sourceenumrequiredOne of
"order","stock"orderIduuidrequiredcan be nullorderReferencestringrequiredcan be nullproductIduuidrequiredcan be nullinvoiceobjectrequiredcan be nulliduuidrequiredreferencestringrequiredcan be nullstatusstringrequired
createdAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/products/ID/issue" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"quantityX100": 1,
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"bookingId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"date": "2026-11-06",
"unitSellPence": 4500,
"description": "Side gate code is on the key safe."
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectName": "1 Harbour Road",
"bookingId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"date": "2026-11-06",
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500,
"unitSellPence": 4500,
"netPence": 4500,
"vatRateBp": 1207,
"source": "order",
"orderId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"orderReference": "INV-0042",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invoice": {
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "text"
},
"createdAt": "2026-11-06T09:30:00.000Z"
}A product's stock movements, newest first
GET/v1/products/{id}/movements
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response array of object
iduuidrequiredkindenumrequiredOne of
"received","issued","adjusted","returned"quantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
reasonstringrequiredcan be nullreferencestringrequiredcan be nullclientNamestringrequiredcan be nullbyNamestringrequiredcan be nullatstringrequired
curl "https://app.workscope.co.uk/v1/products/ID/movements" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"kind": "received",
"quantityX100": -9007199254740991,
"unitCostPence": 4500,
"reason": "text",
"reference": "INV-0042",
"clientName": "Harbourside Dental",
"byName": "Harbourside Dental",
"at": "2026-11-06T09:30:00.000Z"
}
]Purchase orders, newest first
GET/v1/purchase-orders
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
status | query | enum | One of draft, ordered, part_received, received, cancelled, open |
supplierId | query | uuid | |
clientId | query | uuid | |
q | query | string |
Response array of object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequired
curl "https://app.workscope.co.uk/v1/purchase-orders" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z"
}
]Start an order (a draft, no number yet)
POST/v1/purchase-orders
- Permission
purchase.manage- Module
purchases- Answers
201
Request body JSON
supplierIduuidoptionalcan be nullnewSupplierobjectoptionalnamestringrequired1–200 characters
emailemail or constantoptionalcan be nullphonestringoptionalcan be nullUp to 100 characters
fromStockbooleanoptionalDefault
falsedestinationenumoptionalOne of
"stock","client"clientIduuidoptionalcan be nullprojectIduuidoptionalcan be nullorderDatedateoptionalcan be nullYYYY-MM-DD
expectedDatedateoptionalcan be nullYYYY-MM-DD
deliverTostringoptionalcan be nullUp to 2000 characters
notesstringoptionalcan be nullUp to 2000 characters
linesarray of objectrequiredUp to 200 items
iduuidoptionalcan be nullproductIduuidoptionalcan be nulldescriptionstringrequired1–500 characters
supplierCodestringoptionalcan be nullUp to 100 characters
unitstringoptional1–30 characters · Default
"each"quantityX100integerrequired1 to 100000000
unitCostPenceintegeroptional0 to 100000000 · Default
0vatRateBpintegeroptional0 to 10000 · Default
2000destinationenumoptionalOne of
"stock","client"clientIduuidoptionalcan be nullprojectIduuidoptionalcan be nullmarkupBpintegeroptionalcan be null0 to 100000
saveAsProductbooleanoptionalDefault
false
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/purchase-orders" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"supplierId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"newSupplier": {
"name": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123"
},
"fromStock": false,
"destination": "stock",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"productId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"description": "Side gate code is on the key safe.",
"supplierCode": "text",
"unit": "each",
"quantityX100": 1,
"unitCostPence": 0,
"vatRateBp": 2000,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"markupBp": 1207,
"saveAsProduct": false
}
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}One order, its lines and what has arrived
GET/v1/purchase-orders/{id}
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/purchase-orders/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}Change an order. A draft's lines are replaced as a whole; a placed or arrived order's lines are amended in place (send each line's id), with stock and client charges following
PATCH/v1/purchase-orders/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
supplierIduuidoptionalcan be nullnewSupplierobjectoptionalnamestringrequired1–200 characters
emailemail or constantoptionalcan be nullphonestringoptionalcan be nullUp to 100 characters
destinationenumoptionalOne of
"stock","client"clientIduuidoptionalcan be nullprojectIduuidoptionalcan be nullorderDatedateoptionalcan be nullYYYY-MM-DD
expectedDatedateoptionalcan be nullYYYY-MM-DD
deliverTostringoptionalcan be nullUp to 2000 characters
notesstringoptionalcan be nullUp to 2000 characters
linesarray of objectoptionalUp to 200 items
iduuidoptionalcan be nullproductIduuidoptionalcan be nulldescriptionstringrequired1–500 characters
supplierCodestringoptionalcan be nullUp to 100 characters
unitstringoptional1–30 characters · Default
"each"quantityX100integerrequired1 to 100000000
unitCostPenceintegeroptional0 to 100000000 · Default
0vatRateBpintegeroptional0 to 10000 · Default
2000destinationenumoptionalOne of
"stock","client"clientIduuidoptionalcan be nullprojectIduuidoptionalcan be nullmarkupBpintegeroptionalcan be null0 to 100000
saveAsProductbooleanoptionalDefault
false
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/purchase-orders/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"supplierId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"newSupplier": {
"name": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123"
},
"destination": "stock",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"productId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"description": "Side gate code is on the key safe.",
"supplierCode": "text",
"unit": "each",
"quantityX100": 1,
"unitCostPence": 0,
"vatRateBp": 2000,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"markupBp": 1207,
"saveAsProduct": false
}
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}Delete a draft order
DELETE/v1/purchase-orders/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/purchase-orders/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}Mark the order as arrived (on a date, today if not given), at the costs on it; a draft is placed first
POST/v1/purchase-orders/{id}/arrived
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
receivedOndateoptionalYYYY-MM-DD
supplierRefstringoptionalcan be nullUp to 100 characters
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/purchase-orders/ID/arrived" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"receivedOn": "2026-11-06",
"supplierRef": "text"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}Cancel a whole order: stock it brought in comes back out and its clients' charges go (none may be on an issued invoice)
POST/v1/purchase-orders/{id}/cancel
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
reasonstringoptionalcan be nullUp to 500 characters
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/purchase-orders/ID/cancel" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"reason": "text"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}A ready-to-send email of the order to its supplier, in the company's wording
GET/v1/purchase-orders/{id}/email
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
toarray of objectrequiredemailstringrequirednamestringrequiredcan be null
subjectstringrequiredmessagestringrequiredpdfbooleanrequiredlinkstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/purchase-orders/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"
}Mark a draft as placed with the supplier (on its order date, or today): it gets its number
POST/v1/purchase-orders/{id}/order
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/purchase-orders/ID/order" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}The order as a PDF, as the supplier sees it
GET/v1/purchase-orders/{id}/pdf
- Permission
purchase.view- Module
purchases- Answers
200with a file (image/jpeg)
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
curl "https://app.workscope.co.uk/v1/purchase-orders/ID/pdf" \
-H "Authorization: Bearer wsk_your_key_here"Record what arrived (at what it actually cost): stock lines go into stock, clients' lines become charges to them
POST/v1/purchase-orders/{id}/receive
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
receivedOndateoptionalYYYY-MM-DD
supplierRefstringoptionalcan be nullUp to 100 characters
linesarray of objectrequiredAt least 1 item
lineIduuidrequiredquantityX100integerrequired0 to 100000000
unitCostPenceintegeroptional0 to 100000000
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/purchase-orders/ID/receive" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"receivedOn": "2026-11-06",
"supplierRef": "text",
"lines": [
{
"lineId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"quantityX100": 0,
"unitCostPence": 4500
}
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}Email the order to the supplier with its PDF (a draft is marked ordered and numbered first)
POST/v1/purchase-orders/{id}/send
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
toarray of emailrequired1–5 items
subjectstringrequired1–300 characters
messagestringrequired1–10000 characters
Response object
iduuidrequiredreferencestringrequiredcan be nullstatusenumrequiredOne of
"draft","ordered","part_received","received","cancelled"supplierIduuidrequiredcan be nullsupplierNamestringrequiredfromStockbooleanrequireddestinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmixedbooleanrequiredorderDatedaterequiredcan be nullYYYY-MM-DD
expectedDatedaterequiredcan be nullYYYY-MM-DD
supplierRefstringrequiredcan be nullnetPenceintegerrequired-9007199254740991 to 9007199254740991
vatPenceintegerrequired-9007199254740991 to 9007199254740991
grossPenceintegerrequired-9007199254740991 to 9007199254740991
lineCountintegerrequired-9007199254740991 to 9007199254740991
destinationsstringrequiredcreatedAtstringrequiredsupplierEmailstringrequiredcan be nulldeliverTostringrequiredcan be nullnotesstringrequiredcan be nulllinesarray of objectrequirediduuidrequiredproductIduuidrequiredcan be nullcodestringrequiredcan be nullsupplierCodestringrequiredcan be nulldescriptionstringrequiredunitstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
receivedX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
netPenceintegerrequired-9007199254740991 to 9007199254740991
destinationenumrequiredOne of
"stock","client"clientIduuidrequiredcan be nullclientNamestringrequiredcan be nullprojectIduuidrequiredcan be nullprojectNamestringrequiredcan be nullmarkupBpintegerrequiredcan be null-9007199254740991 to 9007199254740991
unitSellPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
lockedBystringrequiredcan be null
receiptsarray of objectrequirediduuidrequiredreceivedOndaterequiredYYYY-MM-DD
supplierRefstringrequiredcan be nullbyNamestringrequiredcan be nulllinesarray of objectrequireddescriptionstringrequiredquantityX100integerrequired-9007199254740991 to 9007199254740991
unitCostPenceintegerrequired-9007199254740991 to 9007199254740991
sentAtstringrequiredcan be nullcancelReasonstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/purchase-orders/ID/send" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"to": [
"office@example.co.uk"
],
"subject": "text",
"message": "text"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"status": "draft",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"fromStock": false,
"destination": "stock",
"clientId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"clientName": "Harbourside Dental",
"projectId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"projectName": "1 Harbour Road",
"mixed": false,
"orderDate": "2026-11-06",
"expectedDate": "2026-11-06",
"supplierRef": "text",
"netPence": 4500,
"vatPence": 4500,
"grossPence": 4500,
"lineCount": 3,
"destinations": "text",
"createdAt": "2026-11-06T09:30:00.000Z",
"supplierEmail": "office@example.co.uk",
"deliverTo": "text",
"notes": "Side gate code is on the key safe.",
"lines": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"productId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"code": "text",
"supplierCode": "text",
"description": "Side gate code is on the key safe.",
"unit": "text",
"quantityX100": -9007199254740991,
"receivedX100": -9007199254740991,
"unitCostPence": 4500,
"vatRateBp": 1207,
"netPence": 4500,
"destination": "stock",
"clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"clientName": "Harbourside Dental",
"projectId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectName": "1 Harbour Road",
"markupBp": 1207,
"unitSellPence": 4500,
"lockedBy": "text"
}
],
"receipts": [
{
"id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"receivedOn": "2026-11-06",
"supplierRef": "text",
"byName": "Harbourside Dental",
"lines": [
{
"description": "Side gate code is on the key safe.",
"quantityX100": -9007199254740991,
"unitCostPence": 4500
}
]
}
],
"sentAt": "2026-11-06T09:30:00.000Z",
"cancelReason": "text"
}Products, and things bought before, matching what is typed on an order line (the same supplier first)
GET/v1/purchase-orders/suggest
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
q | query | stringrequired | |
supplierId | query | uuid |
Response array of object
sourceenumrequiredOne of
"product","history"productIduuidrequiredcan be nulldescriptionstringrequiredsupplierCodestringrequiredcan be nullunitstringrequiredsupplierIduuidrequiredcan be nullsupplierNamestringrequiredcan be nullunitCostPenceintegerrequiredcan be null-9007199254740991 to 9007199254740991
vatRateBpintegerrequired-9007199254740991 to 9007199254740991
lastDatedaterequiredcan be nullYYYY-MM-DD
trackStockbooleanrequiredonHandX100integerrequiredcan be null-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/purchase-orders/suggest?q=text" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"source": "product",
"productId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"description": "Side gate code is on the key safe.",
"supplierCode": "text",
"unit": "text",
"supplierId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"supplierName": "Harbourside Dental",
"unitCostPence": 4500,
"vatRateBp": 1207,
"lastDate": "2026-11-06",
"trackStock": false,
"onHandX100": -9007199254740991
}
]Draft an order to each product's supplier for everything at or below its reorder level
POST/v1/purchasing/low-stock-orders
- Permission
purchase.manage- Module
purchases- Answers
200
Response object
ordersarray of objectrequirediduuidrequiredsupplierNamestringrequiredlinesintegerrequired-9007199254740991 to 9007199254740991
skippedarray of stringrequired
curl -X POST "https://app.workscope.co.uk/v1/purchasing/low-stock-orders" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"orders": [
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"supplierName": "Harbourside Dental",
"lines": -9007199254740991
}
],
"skipped": [
"text"
]
}Download what was received, by supplier and month, as CSV
GET/v1/purchasing/reports/purchases
- Permission
purchase.view- Module
purchases- Answers
200with a file (image/jpeg)
curl "https://app.workscope.co.uk/v1/purchasing/reports/purchases" \
-H "Authorization: Bearer wsk_your_key_here"Download the stock on hand and its value as CSV
GET/v1/purchasing/reports/stock
- Permission
purchase.view- Module
purchases- Answers
200with a file (image/jpeg)
curl "https://app.workscope.co.uk/v1/purchasing/reports/stock" \
-H "Authorization: Bearer wsk_your_key_here"The markup, order numbering, when client purchases are charged, and where orders are delivered
GET/v1/purchasing/settings
- Permission
purchase.view- Module
purchases- Answers
200
Response object
markupBpintegerrequired-9007199254740991 to 9007199254740991
poPrefixstringrequirednextPoNumberintegerrequired-9007199254740991 to 9007199254740991
chargeOnenumrequiredOne of
"receipt","order"deliverTostringrequiredcan be null
curl "https://app.workscope.co.uk/v1/purchasing/settings" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"markupBp": 1207,
"poPrefix": "text",
"nextPoNumber": -9007199254740991,
"chargeOn": "receipt",
"deliverTo": "text"
}Change the purchasing settings
PATCH/v1/purchasing/settings
- Permission
purchase.manage- Module
purchases- Answers
200
Request body JSON
markupBpintegeroptional0 to 100000
poPrefixstringoptional1–10 characters
nextPoNumberintegeroptional1 to 10000000
chargeOnenumoptionalOne of
"receipt","order"deliverTostringoptionalcan be nullUp to 2000 characters
Response object
markupBpintegerrequired-9007199254740991 to 9007199254740991
poPrefixstringrequirednextPoNumberintegerrequired-9007199254740991 to 9007199254740991
chargeOnenumrequiredOne of
"receipt","order"deliverTostringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/purchasing/settings" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"markupBp": 1207,
"poPrefix": "text",
"nextPoNumber": 1,
"chargeOn": "receipt",
"deliverTo": "text"
}'Example response
{
"markupBp": 1207,
"poPrefix": "text",
"nextPoNumber": -9007199254740991,
"chargeOn": "receipt",
"deliverTo": "text"
}Client orders, and stock given to clients, not invoiced in full yet
GET/v1/purchasing/to-recharge
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
clientId | query | uuid |
Response object
rowsarray of objectrequiredkindenumrequiredOne of
"order","stock"keystringrequiredorderIduuidrequiredcan be nullreferencestringrequiredcan be nullfromStockbooleanrequiredsupplierNamestringrequiredcan be nullclientIduuidrequiredclientNamestringrequireddatedaterequiredYYYY-MM-DD
uninvoicedPenceintegerrequired-9007199254740991 to 9007199254740991
uninvoicedCountintegerrequired-9007199254740991 to 9007199254740991
partlyInvoicedbooleanrequiredonDraftbooleanrequired
countintegerrequired-9007199254740991 to 9007199254740991
penceintegerrequired-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/purchasing/to-recharge" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"rows": [
{
"kind": "order",
"key": "example-slug",
"orderId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"reference": "INV-0042",
"fromStock": false,
"supplierName": "Harbourside Dental",
"clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"clientName": "Harbourside Dental",
"date": "2026-11-06",
"uninvoicedPence": 4500,
"uninvoicedCount": 3,
"partlyInvoiced": false,
"onDraft": false
}
],
"count": 3,
"pence": 4500
}Suppliers by name (archived ones with archived=true)
GET/v1/suppliers
- Permission
purchase.view- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
archived | query | enum | One of true, false |
Response array of object
iduuidrequirednamestringrequiredcontactNamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulladdressstringrequiredcan be nullaccountRefstringrequiredcan be nullnotesstringrequiredcan be nullarchivedbooleanrequiredordersintegerrequired-9007199254740991 to 9007199254740991
curl "https://app.workscope.co.uk/v1/suppliers" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"contactName": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"address": "1 Harbour Road, Bristol",
"accountRef": "text",
"notes": "Side gate code is on the key safe.",
"archived": false,
"orders": -9007199254740991
}
]Add a supplier
POST/v1/suppliers
- Permission
purchase.manage- Module
purchases- Answers
201
Request body JSON
namestringrequired1–200 characters
contactNamestringoptionalcan be nullUp to 200 characters
emailemail or constantoptionalcan be nullphonestringoptionalcan be nullUp to 100 characters
addressstringoptionalcan be nullUp to 2000 characters
accountRefstringoptionalcan be nullUp to 100 characters
notesstringoptionalcan be nullUp to 2000 characters
Response object
iduuidrequirednamestringrequiredcontactNamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulladdressstringrequiredcan be nullaccountRefstringrequiredcan be nullnotesstringrequiredcan be nullarchivedbooleanrequiredordersintegerrequired-9007199254740991 to 9007199254740991
curl -X POST "https://app.workscope.co.uk/v1/suppliers" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"contactName": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"address": "1 Harbour Road, Bristol",
"accountRef": "text",
"notes": "Side gate code is on the key safe."
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"contactName": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"address": "1 Harbour Road, Bristol",
"accountRef": "text",
"notes": "Side gate code is on the key safe.",
"archived": false,
"orders": -9007199254740991
}Change or archive a supplier
PATCH/v1/suppliers/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
namestringoptional1–200 characters
contactNamestringoptionalcan be nullUp to 200 characters
emailemail or constantoptionalcan be nullphonestringoptionalcan be nullUp to 100 characters
addressstringoptionalcan be nullUp to 2000 characters
accountRefstringoptionalcan be nullUp to 100 characters
notesstringoptionalcan be nullUp to 2000 characters
archivedbooleanoptional
Response object
iduuidrequirednamestringrequiredcontactNamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulladdressstringrequiredcan be nullaccountRefstringrequiredcan be nullnotesstringrequiredcan be nullarchivedbooleanrequiredordersintegerrequired-9007199254740991 to 9007199254740991
curl -X PATCH "https://app.workscope.co.uk/v1/suppliers/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"contactName": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"address": "1 Harbour Road, Bristol",
"accountRef": "text",
"notes": "Side gate code is on the key safe.",
"archived": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"contactName": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"address": "1 Harbour Road, Bristol",
"accountRef": "text",
"notes": "Side gate code is on the key safe.",
"archived": false,
"orders": -9007199254740991
}Delete a supplier with no orders (archive it otherwise)
DELETE/v1/suppliers/{id}
- Permission
purchase.manage- Module
purchases- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/suppliers/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}