WorkscopeAPI Open Workscope

API reference

Enquiries

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

On this page

Enquiries by stage, with counts, how many next actions are due, and the address to forward enquiries to

GET/v1/enquiries

Permission
enquiry.view
Module
quotes
Answers
200

Parameters

NameInKind
statusqueryenumOne of new, contacted, quoted, won, lost, open, all · Default "open"
viewqueryenumOne of list, board · Default "list"
stageIdqueryuuid
sourcequeryenumOne of email, manual, phone, website
clientIdqueryuuid
projectIdqueryuuid
quietqueryenumOne of 1
qquerystring
assignedUserIdqueryuuid
duequeryenumOne of 1

Response object

  • enquiriesarray of objectrequired
    • iduuidrequired
    • namestringrequired
    • emailstringrequiredcan be null
    • phonestringrequiredcan be null
    • companystringrequiredcan be null
    • subjectstringrequiredcan be null
    • statusenumrequired

      One of "new", "contacted", "quoted", "won", "lost"

    • sourceenumrequired

      One of "email", "manual", "phone", "website"

    • lostReasonenumrequiredcan be null

      One of "price", "timing", "no_reply", "not_a_fit", "other"

    • clientIduuidrequired
    • clientNamestringrequired
    • assignedUserIduuidrequiredcan be null
    • assignedNamestringrequiredcan be null
    • nextActionOndaterequiredcan be null

      YYYY-MM-DD

    • nextActionstringrequiredcan be null
    • overduebooleanrequired
    • lastActivityAtstringrequired
    • lastActivitystringrequiredcan be null
    • unreadbooleanrequired
    • createdAtstringrequired
    • stageIduuidrequired
    • stageNamestringrequired
    • stageKeyenumrequiredcan be null

      One of "new", "contacted", "site_visit", "quoted", "won", "lost"

    • stageKindenumrequired

      One of "open", "won", "lost"

    • probabilityintegerrequired

      -9007199254740991 to 9007199254740991

    • stageEnteredAtstringrequired
    • daysInStageintegerrequired

      -9007199254740991 to 9007199254740991

    • valuePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • valueFromenumrequiredcan be null

      One of "quote", "typed"

    • valueOneOffPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • valueYearlyPenceintegerrequired

      -9007199254740991 to 9007199254740991

    • manualValuePenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • weightedPenceintegerrequiredcan be null

      -9007199254740991 to 9007199254740991

    • expectedCloseOndaterequiredcan be null

      YYYY-MM-DD

    • closedAtstringrequiredcan be null
    • goneQuietbooleanrequired
    • followUpenumrequiredcan be null

      One of "not_viewed", "expiring", "declined"

    • quoteIduuidrequiredcan be null
    • quoteReferencestringrequiredcan be null
    • quoteStatusstringrequiredcan be null
  • stagesarray of objectrequired
    • iduuidrequired
    • namestringrequired
    • keyenumrequiredcan be null

      One of "new", "contacted", "site_visit", "quoted", "won", "lost"

    • kindenumrequired

      One of "open", "won", "lost"

    • probabilityintegerrequired

      -9007199254740991 to 9007199254740991

    • positionintegerrequired

      -9007199254740991 to 9007199254740991

  • quietintegerrequired

    -9007199254740991 to 9007199254740991

  • goneQuietDaysintegerrequired

    -9007199254740991 to 9007199254740991

  • countsobjectrequired
  • dueintegerrequired

    -9007199254740991 to 9007199254740991

  • inboundAddressstringrequired
curl "https://app.workscope.co.uk/v1/enquiries" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "enquiries": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "name": "Harbourside Dental",
      "email": "office@example.co.uk",
      "phone": "0117 496 0123",
      "company": "text",
      "subject": "text",
      "status": "new",
      "source": "email",
      "lostReason": "price",
      "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "clientName": "Harbourside Dental",
      "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "assignedName": "Harbourside Dental",
      "nextActionOn": "2026-11-06",
      "nextAction": "text",
      "overdue": false,
      "lastActivityAt": "2026-11-06T09:30:00.000Z",
      "lastActivity": "text",
      "unread": false,
      "createdAt": "2026-11-06T09:30:00.000Z",
      "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "stageName": "Harbourside Dental",
      "stageKey": "new",
      "stageKind": "open",
      "probability": -9007199254740991,
      "stageEnteredAt": "2026-11-06T09:30:00.000Z",
      "daysInStage": -9007199254740991,
      "valuePence": 4500,
      "valueFrom": "quote",
      "valueOneOffPence": 4500,
      "valueYearlyPence": 4500,
      "manualValuePence": 4500,
      "weightedPence": 4500,
      "expectedCloseOn": "2026-11-06",
      "closedAt": "2026-11-06T09:30:00.000Z",
      "goneQuiet": false,
      "followUp": "not_viewed",
      "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "quoteReference": "INV-0042",
      "quoteStatus": "text"
    }
  ],
  "stages": [
    {
      "id": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
      "name": "Harbourside Dental",
      "key": "new",
      "kind": "open",
      "probability": -9007199254740991,
      "position": -9007199254740991
    }
  ],
  "quiet": -9007199254740991,
  "goneQuietDays": -9007199254740991,
  "counts": {},
  "due": -9007199254740991,
  "inboundAddress": "1 Harbour Road, Bristol"
}

Add an enquiry by hand (a phone call, a pasted email)

POST/v1/enquiries

Permission
enquiry.manage
Module
quotes
Answers
201

Request body JSON

  • namestringrequired

    1–200 characters

  • emailconstant or stringoptionalcan be null
  • phonestringoptionalcan be null

    Up to 50 characters

  • companystringoptionalcan be null

    Up to 200 characters

  • addressstringoptionalcan be null

    Up to 500 characters

  • subjectstringoptionalcan be null

    Up to 300 characters

  • messagestringoptionalcan be null

    Up to 20000 characters

  • clientIduuidoptionalcan be null
  • assignedUserIduuidoptionalcan be null
  • nextActionOndateoptionalcan be null

    YYYY-MM-DD

  • nextActionstringoptionalcan be null

    Up to 300 characters

  • sourceenumoptional

    One of "email", "manual", "phone", "website" · Default "manual"

  • stageIduuidoptional
  • valuePenceintegeroptionalcan be null

    0 to 1000000000

  • expectedCloseOndateoptionalcan be null

    YYYY-MM-DD

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/enquiries" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbourside Dental",
    "email": "",
    "phone": "0117 496 0123",
    "company": "text",
    "address": "1 Harbour Road, Bristol",
    "subject": "text",
    "message": "text",
    "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "assignedUserId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "nextActionOn": "2026-11-06",
    "nextAction": "text",
    "source": "manual",
    "stageId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
    "valuePence": 4500,
    "expectedCloseOn": "2026-11-06"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

One enquiry and its timeline (marks its emails as read)

GET/v1/enquiries/{id}

Permission
enquiry.view
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl "https://app.workscope.co.uk/v1/enquiries/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

Change an enquiry: details, stage (Lost needs a reason), who has it, its next action

PATCH/v1/enquiries/{id}

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • namestringoptional

    1–200 characters

  • emailconstant or stringoptionalcan be null
  • phonestringoptionalcan be null

    Up to 50 characters

  • companystringoptionalcan be null

    Up to 200 characters

  • addressstringoptionalcan be null

    Up to 500 characters

  • subjectstringoptionalcan be null

    Up to 300 characters

  • messagestringoptionalcan be null

    Up to 20000 characters

  • clientIduuidoptional
  • assignedUserIduuidoptionalcan be null
  • nextActionOndateoptionalcan be null

    YYYY-MM-DD

  • nextActionstringoptionalcan be null

    Up to 300 characters

  • sourceenumoptional

    One of "email", "manual", "phone", "website"

  • statusenumoptional

    One of "new", "contacted", "quoted", "won", "lost"

  • stageIduuidoptional
  • valuePenceintegeroptionalcan be null

    0 to 1000000000

  • expectedCloseOndateoptionalcan be null

    YYYY-MM-DD

  • lostReasonenumoptionalcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • lostNotestringoptionalcan be null

    Up to 1000 characters

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/enquiries/ID" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbourside Dental",
    "email": "",
    "phone": "0117 496 0123",
    "company": "text",
    "address": "1 Harbour Road, Bristol",
    "subject": "text",
    "message": "text",
    "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "assignedUserId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "nextActionOn": "2026-11-06",
    "nextAction": "text",
    "source": "email",
    "status": "new",
    "stageId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
    "valuePence": 4500,
    "expectedCloseOn": "2026-11-06",
    "lostReason": "price",
    "lostNote": "Side gate code is on the key safe."
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

Delete an enquiry (spam, a mistake) and its timeline

DELETE/v1/enquiries/{id}

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • okconstantrequired

    Always true

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

Example response

{
  "ok": true
}

A file that came with an email

GET/v1/enquiries/{id}/events/{eventId}/attachments/{index}

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

Parameters

NameInKind
idpathuuidrequired
eventIdpathuuidrequired
indexpathintegerrequired
curl "https://app.workscope.co.uk/v1/enquiries/ID/events/ID/attachments/INDEX" \
  -H "Authorization: Bearer wsk_your_key_here"

Move an email (and its files) to another deal. Both timelines say so.

POST/v1/enquiries/{id}/events/{eventId}/move

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired
eventIdpathuuidrequired

Request body JSON

  • toEnquiryIduuidrequired

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/enquiries/ID/events/ID/move" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "toEnquiryId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

What merging this deal into another would move, and whether its client could be archived

GET/v1/enquiries/{id}/merge

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired
intoIdqueryuuidrequired

Response object

  • intoIduuidrequired
  • intoTitlestringrequired
  • clientChangesbooleanrequired
  • fromClientNamestringrequired
  • intoClientNamestringrequired
  • canArchiveClientbooleanrequired
  • movesobjectrequired
    • eventsintegerrequired

      -9007199254740991 to 9007199254740991

    • quotesintegerrequired

      -9007199254740991 to 9007199254740991

    • bookingsintegerrequired

      -9007199254740991 to 9007199254740991

curl "https://app.workscope.co.uk/v1/enquiries/ID/merge?intoId=3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "intoId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "intoTitle": "text",
  "clientChanges": false,
  "fromClientName": "Harbourside Dental",
  "intoClientName": "Harbourside Dental",
  "canArchiveClient": false,
  "moves": {
    "events": -9007199254740991,
    "quotes": -9007199254740991,
    "bookings": -9007199254740991
  }
}

Merge this deal into another: its timeline, quotes and site visits move, replies to its emails still arrive, and it goes. The other deal's client and stage stay.

POST/v1/enquiries/{id}/merge

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • intoIduuidrequired
  • archiveClientbooleanoptional

    Default false

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/enquiries/ID/merge" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "intoId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "archiveClient": false
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

Add a note or a call to the timeline

POST/v1/enquiries/{id}/notes

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • kindenumoptional

    One of "note", "call" · Default "note"

  • bodystringrequired

    1–10000 characters

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/enquiries/ID/notes" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "note",
    "body": "Side gate code is on the key safe."
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

Mark a deal read (or unread again). Opening a deal marks it read for everyone.

POST/v1/enquiries/{id}/read

Permission
enquiry.view
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • unreadbooleanoptional

    Default false

Response object

  • okconstantrequired

    Always true

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

Example response

{
  "ok": true
}

Email the enquirer. Their answer comes back to this enquiry. Links may only be to Workscope.

POST/v1/enquiries/{id}/reply

Permission
enquiry.manage
Module
quotes
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • subjectstringrequired

    1–300 characters

  • bodystringrequired

    1–20000 characters

Response object

  • iduuidrequired
  • namestringrequired
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • statusenumrequired

    One of "new", "contacted", "quoted", "won", "lost"

  • sourceenumrequired

    One of "email", "manual", "phone", "website"

  • lostReasonenumrequiredcan be null

    One of "price", "timing", "no_reply", "not_a_fit", "other"

  • clientIduuidrequired
  • clientNamestringrequired
  • assignedUserIduuidrequiredcan be null
  • assignedNamestringrequiredcan be null
  • nextActionOndaterequiredcan be null

    YYYY-MM-DD

  • nextActionstringrequiredcan be null
  • overduebooleanrequired
  • lastActivityAtstringrequired
  • lastActivitystringrequiredcan be null
  • unreadbooleanrequired
  • createdAtstringrequired
  • stageIduuidrequired
  • stageNamestringrequired
  • stageKeyenumrequiredcan be null

    One of "new", "contacted", "site_visit", "quoted", "won", "lost"

  • stageKindenumrequired

    One of "open", "won", "lost"

  • probabilityintegerrequired

    -9007199254740991 to 9007199254740991

  • stageEnteredAtstringrequired
  • daysInStageintegerrequired

    -9007199254740991 to 9007199254740991

  • valuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • valueFromenumrequiredcan be null

    One of "quote", "typed"

  • valueOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • valueYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • manualValuePenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • weightedPenceintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • expectedCloseOndaterequiredcan be null

    YYYY-MM-DD

  • closedAtstringrequiredcan be null
  • goneQuietbooleanrequired
  • followUpenumrequiredcan be null

    One of "not_viewed", "expiring", "declined"

  • quoteIduuidrequiredcan be null
  • quoteReferencestringrequiredcan be null
  • quoteStatusstringrequiredcan be null
  • addressstringrequiredcan be null
  • messagestringrequiredcan be null
  • lostNotestringrequiredcan be null
  • contactIduuidrequiredcan be null
  • inboundAddressstringrequired
  • eventsarray of objectrequired
    • iduuidrequired
    • kindenumrequired

      One of "created", "email_in", "email_out", "note", "call", "status", "assigned", "quote_sent", "quote_viewed", "quote_accepted", "quote_declined", "converted", "stage", "site_visit", "value", "email_moved", "merged"

    • bodystringrequiredcan be null
    • subjectstringrequiredcan be null
    • fromAddressstringrequiredcan be null
    • toAddressstringrequiredcan be null
    • attachmentsarray of objectrequired
      • indexintegerrequired

        -9007199254740991 to 9007199254740991

      • filenamestringrequired
      • contentTypestringrequired
      • bytesintegerrequired

        -9007199254740991 to 9007199254740991

      • urlstringrequired
    • metaobjectrequired
    • deliveryobjectrequiredcan be null
      • statusenumrequired

        One of "queued", "sent", "not_sent", "delivered", "bounced", "complained", "failed"

      • detailstringrequiredcan be null
    • userNamestringrequiredcan be null
    • createdAtstringrequired
curl -X POST "https://app.workscope.co.uk/v1/enquiries/ID/reply" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "text",
    "body": "Side gate code is on the key safe."
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "status": "new",
  "source": "email",
  "lostReason": "price",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "assignedUserId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "assignedName": "Harbourside Dental",
  "nextActionOn": "2026-11-06",
  "nextAction": "text",
  "overdue": false,
  "lastActivityAt": "2026-11-06T09:30:00.000Z",
  "lastActivity": "text",
  "unread": false,
  "createdAt": "2026-11-06T09:30:00.000Z",
  "stageId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "stageName": "Harbourside Dental",
  "stageKey": "new",
  "stageKind": "open",
  "probability": -9007199254740991,
  "stageEnteredAt": "2026-11-06T09:30:00.000Z",
  "daysInStage": -9007199254740991,
  "valuePence": 4500,
  "valueFrom": "quote",
  "valueOneOffPence": 4500,
  "valueYearlyPence": 4500,
  "manualValuePence": 4500,
  "weightedPence": 4500,
  "expectedCloseOn": "2026-11-06",
  "closedAt": "2026-11-06T09:30:00.000Z",
  "goneQuiet": false,
  "followUp": "not_viewed",
  "quoteId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "quoteReference": "INV-0042",
  "quoteStatus": "text",
  "address": "1 Harbour Road, Bristol",
  "message": "text",
  "lostNote": "Side gate code is on the key safe.",
  "contactId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
  "inboundAddress": "1 Harbour Road, Bristol",
  "events": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "kind": "created",
      "body": "Side gate code is on the key safe.",
      "subject": "text",
      "fromAddress": "1 Harbour Road, Bristol",
      "toAddress": "1 Harbour Road, Bristol",
      "attachments": [
        {
          "index": -9007199254740991,
          "filename": "Harbourside Dental",
          "contentType": "text",
          "bytes": -9007199254740991,
          "url": "https://example.co.uk"
        }
      ],
      "meta": {},
      "delivery": {
        "status": "queued",
        "detail": "text"
      },
      "userName": "Harbourside Dental",
      "createdAt": "2026-11-06T09:30:00.000Z"
    }
  ]
}

The enquiry page settings, and what the website forms need

GET/v1/enquiries/page

Permission
enquiry.manage
Module
quotes
Answers
200

Response object

  • enabledbooleanrequired
  • slugstringrequired
  • urlstringrequired
  • colourstringrequired
  • headlinestringrequiredcan be null
  • introstringrequiredcan be null
  • thanksstringrequiredcan be null
  • servicesarray of stringrequired
  • requiredarray of enumrequired
  • logoUrlstringrequiredcan be null
  • coverUrlstringrequiredcan be null
  • companyNamestringrequired
  • suggestedServicesarray of stringrequired
  • originstringrequired
  • careersobjectrequiredcan be null
    • enabledbooleanrequired
    • rolesarray of objectrequired
      • slugstringrequired
      • titlestringrequired
curl "https://app.workscope.co.uk/v1/enquiries/page" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "enabled": false,
  "slug": "example-slug",
  "url": "https://example.co.uk",
  "colour": "text",
  "headline": "text",
  "intro": "text",
  "thanks": "text",
  "services": [
    "text"
  ],
  "required": [
    "phone"
  ],
  "logoUrl": "https://example.co.uk",
  "coverUrl": "https://example.co.uk",
  "companyName": "Harbourside Dental",
  "suggestedServices": [
    "text"
  ],
  "origin": "text",
  "careers": {
    "enabled": false,
    "roles": [
      {
        "slug": "example-slug",
        "title": "text"
      }
    ]
  }
}

Change the enquiry page: switch it on, its address (shared with the careers page), colour, words, services and which questions must be answered

PATCH/v1/enquiries/page

Permission
enquiry.manage
Module
quotes
Answers
200

Request body JSON

  • enabledbooleanoptional
  • slugstringoptional

    Matches ^[a-z0-9]+(?:-[a-z0-9]+)*$ · 2–60 characters

  • colourstringoptional

    Matches ^#[0-9a-fA-F]{6}$

  • headlinestringoptionalcan be null

    Up to 160 characters

  • introstringoptionalcan be null

    Up to 5000 characters

  • thanksstringoptionalcan be null

    Up to 1000 characters

  • servicesarray of stringoptional

    Up to 20 items

  • requiredarray of enumoptional

Response object

  • enabledbooleanrequired
  • slugstringrequired
  • urlstringrequired
  • colourstringrequired
  • headlinestringrequiredcan be null
  • introstringrequiredcan be null
  • thanksstringrequiredcan be null
  • servicesarray of stringrequired
  • requiredarray of enumrequired
  • logoUrlstringrequiredcan be null
  • coverUrlstringrequiredcan be null
  • companyNamestringrequired
  • suggestedServicesarray of stringrequired
  • originstringrequired
  • careersobjectrequiredcan be null
    • enabledbooleanrequired
    • rolesarray of objectrequired
      • slugstringrequired
      • titlestringrequired
curl -X PATCH "https://app.workscope.co.uk/v1/enquiries/page" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": false,
    "slug": "example-slug",
    "colour": "#2563eb",
    "headline": "text",
    "intro": "text",
    "thanks": "text",
    "services": [
      "text"
    ],
    "required": [
      "phone"
    ]
  }'

Example response

{
  "enabled": false,
  "slug": "example-slug",
  "url": "https://example.co.uk",
  "colour": "text",
  "headline": "text",
  "intro": "text",
  "thanks": "text",
  "services": [
    "text"
  ],
  "required": [
    "phone"
  ],
  "logoUrl": "https://example.co.uk",
  "coverUrl": "https://example.co.uk",
  "companyName": "Harbourside Dental",
  "suggestedServices": [
    "text"
  ],
  "origin": "text",
  "careers": {
    "enabled": false,
    "roles": [
      {
        "slug": "example-slug",
        "title": "text"
      }
    ]
  }
}

Set the cover picture (shared with the careers page): send the image itself (JPEG, PNG or WebP)

POST/v1/enquiries/page/cover

Permission
enquiry.manage
Module
quotes
Answers
200

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

  • enabledbooleanrequired
  • slugstringrequired
  • urlstringrequired
  • colourstringrequired
  • headlinestringrequiredcan be null
  • introstringrequiredcan be null
  • thanksstringrequiredcan be null
  • servicesarray of stringrequired
  • requiredarray of enumrequired
  • logoUrlstringrequiredcan be null
  • coverUrlstringrequiredcan be null
  • companyNamestringrequired
  • suggestedServicesarray of stringrequired
  • originstringrequired
  • careersobjectrequiredcan be null
    • enabledbooleanrequired
    • rolesarray of objectrequired
      • slugstringrequired
      • titlestringrequired
curl -X POST "https://app.workscope.co.uk/v1/enquiries/page/cover" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg

Example response

{
  "enabled": false,
  "slug": "example-slug",
  "url": "https://example.co.uk",
  "colour": "text",
  "headline": "text",
  "intro": "text",
  "thanks": "text",
  "services": [
    "text"
  ],
  "required": [
    "phone"
  ],
  "logoUrl": "https://example.co.uk",
  "coverUrl": "https://example.co.uk",
  "companyName": "Harbourside Dental",
  "suggestedServices": [
    "text"
  ],
  "origin": "text",
  "careers": {
    "enabled": false,
    "roles": [
      {
        "slug": "example-slug",
        "title": "text"
      }
    ]
  }
}

Take the cover picture off

DELETE/v1/enquiries/page/cover

Permission
enquiry.manage
Module
quotes
Answers
200

Response object

  • enabledbooleanrequired
  • slugstringrequired
  • urlstringrequired
  • colourstringrequired
  • headlinestringrequiredcan be null
  • introstringrequiredcan be null
  • thanksstringrequiredcan be null
  • servicesarray of stringrequired
  • requiredarray of enumrequired
  • logoUrlstringrequiredcan be null
  • coverUrlstringrequiredcan be null
  • companyNamestringrequired
  • suggestedServicesarray of stringrequired
  • originstringrequired
  • careersobjectrequiredcan be null
    • enabledbooleanrequired
    • rolesarray of objectrequired
      • slugstringrequired
      • titlestringrequired
curl -X DELETE "https://app.workscope.co.uk/v1/enquiries/page/cover" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "enabled": false,
  "slug": "example-slug",
  "url": "https://example.co.uk",
  "colour": "text",
  "headline": "text",
  "intro": "text",
  "thanks": "text",
  "services": [
    "text"
  ],
  "required": [
    "phone"
  ],
  "logoUrl": "https://example.co.uk",
  "coverUrl": "https://example.co.uk",
  "companyName": "Harbourside Dental",
  "suggestedServices": [
    "text"
  ],
  "origin": "text",
  "careers": {
    "enabled": false,
    "roles": [
      {
        "slug": "example-slug",
        "title": "text"
      }
    ]
  }
}

The logo or cover on the enquiry page, for the preview

GET/v1/enquiries/page/images/{id}

Permission
enquiry.manage
Module
quotes
Answers
200 with a file (image/jpeg)

Parameters

NameInKind
idpathenumrequiredOne of logo, cover
curl "https://app.workscope.co.uk/v1/enquiries/page/images/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

The enquiry page as it will look, before it is switched on

GET/v1/enquiries/page/preview

Permission
enquiry.manage
Module
quotes
Answers
200

Response object

  • slugstringrequired
  • companyNamestringrequired
  • websitestringrequiredcan be null
  • phonestringrequiredcan be null
  • logoUrlstringrequiredcan be null
  • coverUrlstringrequiredcan be null
  • colourstringrequired
  • headlinestringrequiredcan be null
  • introstringrequiredcan be null
  • servicesarray of stringrequired
  • requiredarray of enumrequired
  • thanksstringrequired
  • privacystringrequired
  • previewbooleanrequired
curl "https://app.workscope.co.uk/v1/enquiries/page/preview" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "slug": "example-slug",
  "companyName": "Harbourside Dental",
  "website": "https://example.co.uk",
  "phone": "0117 496 0123",
  "logoUrl": "https://example.co.uk",
  "coverUrl": "https://example.co.uk",
  "colour": "text",
  "headline": "text",
  "intro": "text",
  "services": [
    "text"
  ],
  "required": [
    "phone"
  ],
  "thanks": "text",
  "privacy": "text",
  "preview": false
}

Read a pasted email: who sent it, their phone, the subject and their words, and any client they already are

POST/v1/enquiries/parse

Permission
enquiry.manage
Module
quotes
Answers
200

Request body JSON

  • textstringrequired

    1–100000 characters

Response object

  • namestringrequiredcan be null
  • emailstringrequiredcan be null
  • phonestringrequiredcan be null
  • companystringrequiredcan be null
  • subjectstringrequiredcan be null
  • messagestringrequired
  • clientIduuidrequiredcan be null
  • clientNamestringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/enquiries/parse" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "text"
  }'

Example response

{
  "name": "Harbourside Dental",
  "email": "office@example.co.uk",
  "phone": "0117 496 0123",
  "company": "text",
  "subject": "text",
  "message": "text",
  "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "clientName": "Harbourside Dental"
}

The address this company forwards enquiries to

GET/v1/enquiries/settings

Permission
enquiry.view
Module
quotes
Answers
200

Response object

  • inboundAddressstringrequired
  • inboundCodestringrequired
  • signaturestringrequired

    Default ""

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

Example response

{
  "inboundAddress": "1 Harbour Road, Bristol",
  "inboundCode": "text",
  "signature": ""
}

Make a new forwarding address (the old one stops working, as do replies to emails already sent)

POST/v1/enquiries/settings/new-address

Permission
enquiry.manage
Module
quotes
Answers
200

Response object

  • inboundAddressstringrequired
  • inboundCodestringrequired
  • signaturestringrequired

    Default ""

curl -X POST "https://app.workscope.co.uk/v1/enquiries/settings/new-address" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "inboundAddress": "1 Harbour Road, Bristol",
  "inboundCode": "text",
  "signature": ""
}