WorkscopeAPI Open Workscope

API reference

Reports

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

On this page

Attendance matrix (as Xota's): for each team member and day, work, breaks and net from where their hours come from, approved absence by type, and net plus paid absence, with totals

GET/v1/reports/attendance

Permission
report.view
Answers
200

Parameters

NameInKind
fromquerydaterequired
toquerydaterequired
teamIdqueryuuid
teamMemberIdqueryuuid
teamIdsqueryarray of uuid
teamMemberIdsqueryarray of uuid
clientIdsqueryarray of uuid
projectIdsqueryarray of uuid
templateIdsqueryarray of uuid
workqueryenumOne of all, clients, internal · Default "all"

Response object

  • fromdaterequired

    YYYY-MM-DD

  • todaterequired

    YYYY-MM-DD

  • daysarray of daterequired
  • absenceTypesarray of objectrequired
    • iduuidrequired
    • keystringrequiredcan be null
    • namestringrequired
    • paidbooleanrequired
  • rowsarray of objectrequired
    • teamMemberIduuidrequired
    • namestringrequired
    • breaksPaidbooleanrequired
    • hoursFromenumrequired

      One of "bookings", "timesheets"

    • daysobjectrequired
      • worknumberrequired
      • breaksnumberrequired
      • netnumberrequired
      • absenceobjectrequired
      • absenceTotalnumberrequired
      • paidAbsencenumberrequired
      • totalnumberrequired
    • totalsobjectrequired
      • worknumberrequired
      • breaksnumberrequired
      • netnumberrequired
      • absenceobjectrequired
      • absenceTotalnumberrequired
      • paidAbsencenumberrequired
      • totalnumberrequired
  • totalsobjectrequired
    • daysobjectrequired
      • worknumberrequired
      • breaksnumberrequired
      • netnumberrequired
      • absenceobjectrequired
      • absenceTotalnumberrequired
      • paidAbsencenumberrequired
      • totalnumberrequired
    • totalsobjectrequired
      • worknumberrequired
      • breaksnumberrequired
      • netnumberrequired
      • absenceobjectrequired
      • absenceTotalnumberrequired
      • paidAbsencenumberrequired
      • totalnumberrequired
  • workFilteredbooleanrequired
curl "https://app.workscope.co.uk/v1/reports/attendance?from=2026-11-06&to=2026-11-06" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "from": "2026-11-06",
  "to": "2026-11-06",
  "days": [
    "2026-11-06"
  ],
  "absenceTypes": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "key": "example-slug",
      "name": "Harbourside Dental",
      "paid": false
    }
  ],
  "rows": [
    {
      "teamMemberId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
      "name": "Harbourside Dental",
      "breaksPaid": false,
      "hoursFrom": "bookings",
      "days": {},
      "totals": {
        "work": 1,
        "breaks": 1,
        "net": 1,
        "absence": {},
        "absenceTotal": 1,
        "paidAbsence": 1,
        "total": 1
      }
    }
  ],
  "totals": {
    "days": {},
    "totals": {
      "work": 1,
      "breaks": 1,
      "net": 1,
      "absence": {},
      "absenceTotal": 1,
      "paidAbsence": 1,
      "total": 1
    }
  },
  "workFiltered": false
}

The attendance matrix as CSV

GET/v1/reports/attendance/export

Permission
report.view
Answers
200 with a file (image/jpeg)

Parameters

NameInKind
fromquerydaterequired
toquerydaterequired
teamIdqueryuuid
teamMemberIdqueryuuid
teamIdsqueryarray of uuid
teamMemberIdsqueryarray of uuid
clientIdsqueryarray of uuid
projectIdsqueryarray of uuid
templateIdsqueryarray of uuid
workqueryenumOne of all, clients, internal · Default "all"
curl "https://app.workscope.co.uk/v1/reports/attendance/export?from=2026-11-06&to=2026-11-06" \
  -H "Authorization: Bearer wsk_your_key_here"

Deals won and lost, win rate, value won (one-off and a year of recurring), days to win, by source and owner, and why deals were lost

GET/v1/reports/sales

Permission
report.view
Module
quotes
Answers
200

Parameters

NameInKind
fromquerydaterequired
toquerydaterequired

Response object

  • fromdaterequired

    YYYY-MM-DD

  • todaterequired

    YYYY-MM-DD

  • createdintegerrequired

    -9007199254740991 to 9007199254740991

  • wonintegerrequired

    -9007199254740991 to 9007199254740991

  • lostintegerrequired

    -9007199254740991 to 9007199254740991

  • winRateintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • wonOneOffPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • wonYearlyPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • averageDaysToWinintegerrequiredcan be null

    -9007199254740991 to 9007199254740991

  • openNowintegerrequired

    -9007199254740991 to 9007199254740991

  • openValuePenceintegerrequired

    -9007199254740991 to 9007199254740991

  • openWeightedPenceintegerrequired

    -9007199254740991 to 9007199254740991

  • bySourcearray of objectrequired
    • keystringrequired
    • labelstringrequired
    • wonintegerrequired

      -9007199254740991 to 9007199254740991

    • lostintegerrequired

      -9007199254740991 to 9007199254740991

    • openintegerrequired

      -9007199254740991 to 9007199254740991

    • wonValuePenceintegerrequired

      -9007199254740991 to 9007199254740991

  • byOwnerarray of objectrequired
    • keystringrequired
    • labelstringrequired
    • wonintegerrequired

      -9007199254740991 to 9007199254740991

    • lostintegerrequired

      -9007199254740991 to 9007199254740991

    • openintegerrequired

      -9007199254740991 to 9007199254740991

    • wonValuePenceintegerrequired

      -9007199254740991 to 9007199254740991

  • lostReasonsarray of objectrequired
    • reasonenumrequired

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

    • countintegerrequired

      -9007199254740991 to 9007199254740991

curl "https://app.workscope.co.uk/v1/reports/sales?from=2026-11-06&to=2026-11-06" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "from": "2026-11-06",
  "to": "2026-11-06",
  "created": -9007199254740991,
  "won": -9007199254740991,
  "lost": -9007199254740991,
  "winRate": -9007199254740991,
  "wonOneOffPence": 4500,
  "wonYearlyPence": 4500,
  "averageDaysToWin": -9007199254740991,
  "openNow": -9007199254740991,
  "openValuePence": 4500,
  "openWeightedPence": 4500,
  "bySource": [
    {
      "key": "example-slug",
      "label": "text",
      "won": -9007199254740991,
      "lost": -9007199254740991,
      "open": -9007199254740991,
      "wonValuePence": 4500
    }
  ],
  "byOwner": [
    {
      "key": "example-slug",
      "label": "text",
      "won": -9007199254740991,
      "lost": -9007199254740991,
      "open": -9007199254740991,
      "wonValuePence": 4500
    }
  ],
  "lostReasons": [
    {
      "reason": "price",
      "count": 3
    }
  ]
}

The deals closed in the range as CSV

GET/v1/reports/sales/export

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

Parameters

NameInKind
fromquerydaterequired
toquerydaterequired
curl "https://app.workscope.co.uk/v1/reports/sales/export?from=2026-11-06&to=2026-11-06" \
  -H "Authorization: Bearer wsk_your_key_here"