WorkscopeAPI Open Workscope

API reference

Projects

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

On this page

Projects (optional pieces of work under a client)

GET/v1/projects

Permission
project.view
Answers
200

Parameters

NameInKind
clientIdqueryuuid
statusqueryenumOne of active, archived
qquerystring

Response array of object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • namestringrequired
  • descriptionstringrequiredcan be null
  • startDatedaterequiredcan be null

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • notesstringrequiredcan be null
  • statusenumrequired

    One of "active", "archived"

  • logoUrlstringrequiredcan be null
  • clientLogoUrlstringrequiredcan be null
  • customFieldsobjectrequired
curl "https://app.workscope.co.uk/v1/projects" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

[
  {
    "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
    "clientName": "Harbourside Dental",
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "startDate": "2026-11-06",
    "endDate": "2026-11-06",
    "notes": "Side gate code is on the key safe.",
    "status": "active",
    "logoUrl": "https://example.co.uk",
    "clientLogoUrl": "https://example.co.uk",
    "customFields": {
      "contract-number": "CN-1042"
    }
  }
]

Add a project

POST/v1/projects

Permission
project.manage
Module
projects
Answers
201

Request body JSON

  • clientIduuidrequired
  • namestringrequired

    1–200 characters

  • descriptionstringoptionalcan be null

    Up to 5000 characters

  • startDatedateoptionalcan be null

    YYYY-MM-DD

  • endDatedateoptionalcan be null

    YYYY-MM-DD

  • notesstringoptionalcan be null

    Up to 5000 characters

  • customFieldsobjectoptional

Response object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • namestringrequired
  • descriptionstringrequiredcan be null
  • startDatedaterequiredcan be null

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • notesstringrequiredcan be null
  • statusenumrequired

    One of "active", "archived"

  • logoUrlstringrequiredcan be null
  • clientLogoUrlstringrequiredcan be null
  • customFieldsobjectrequired
curl -X POST "https://app.workscope.co.uk/v1/projects" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "clientId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "startDate": "2026-11-06",
    "endDate": "2026-11-06",
    "notes": "Side gate code is on the key safe.",
    "customFields": {
      "contract-number": "CN-1042"
    }
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "name": "Harbourside Dental",
  "description": "Side gate code is on the key safe.",
  "startDate": "2026-11-06",
  "endDate": "2026-11-06",
  "notes": "Side gate code is on the key safe.",
  "status": "active",
  "logoUrl": "https://example.co.uk",
  "clientLogoUrl": "https://example.co.uk",
  "customFields": {
    "contract-number": "CN-1042"
  }
}

One project

GET/v1/projects/{id}

Permission
project.view
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • namestringrequired
  • descriptionstringrequiredcan be null
  • startDatedaterequiredcan be null

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • notesstringrequiredcan be null
  • statusenumrequired

    One of "active", "archived"

  • logoUrlstringrequiredcan be null
  • clientLogoUrlstringrequiredcan be null
  • customFieldsobjectrequired
curl "https://app.workscope.co.uk/v1/projects/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "name": "Harbourside Dental",
  "description": "Side gate code is on the key safe.",
  "startDate": "2026-11-06",
  "endDate": "2026-11-06",
  "notes": "Side gate code is on the key safe.",
  "status": "active",
  "logoUrl": "https://example.co.uk",
  "clientLogoUrl": "https://example.co.uk",
  "customFields": {
    "contract-number": "CN-1042"
  }
}

Change or archive a project

PATCH/v1/projects/{id}

Permission
project.manage
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • namestringoptional

    1–200 characters

  • descriptionstringoptionalcan be null

    Up to 5000 characters

  • startDatedateoptionalcan be null

    YYYY-MM-DD

  • endDatedateoptionalcan be null

    YYYY-MM-DD

  • notesstringoptionalcan be null

    Up to 5000 characters

  • statusenumoptional

    One of "active", "archived"

  • customFieldsobjectoptional

Response object

  • iduuidrequired
  • clientIduuidrequired
  • clientNamestringrequired
  • namestringrequired
  • descriptionstringrequiredcan be null
  • startDatedaterequiredcan be null

    YYYY-MM-DD

  • endDatedaterequiredcan be null

    YYYY-MM-DD

  • notesstringrequiredcan be null
  • statusenumrequired

    One of "active", "archived"

  • logoUrlstringrequiredcan be null
  • clientLogoUrlstringrequiredcan be null
  • customFieldsobjectrequired
curl -X PATCH "https://app.workscope.co.uk/v1/projects/ID" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Harbourside Dental",
    "description": "Side gate code is on the key safe.",
    "startDate": "2026-11-06",
    "endDate": "2026-11-06",
    "notes": "Side gate code is on the key safe.",
    "status": "active",
    "customFields": {
      "contract-number": "CN-1042"
    }
  }'

Example response

{
  "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
  "clientId": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "clientName": "Harbourside Dental",
  "name": "Harbourside Dental",
  "description": "Side gate code is on the key safe.",
  "startDate": "2026-11-06",
  "endDate": "2026-11-06",
  "notes": "Side gate code is on the key safe.",
  "status": "active",
  "logoUrl": "https://example.co.uk",
  "clientLogoUrl": "https://example.co.uk",
  "customFields": {
    "contract-number": "CN-1042"
  }
}

A project's brief: text and images (and whether its public report link is on)

GET/v1/projects/{id}/brief

Permission
project.view
Answers
200

Parameters

NameInKind
idpathuuidrequired

Response object

  • textstringrequiredcan be null
  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • createdAtstringrequired
    • thumbUrlstringrequired
    • fullUrlstringrequired
  • publicTokenstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/projects/ID/brief" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "text": "text",
  "images": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "createdAt": "2026-11-06T09:30:00.000Z",
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "publicToken": "wsk_example"
}

Change a project's brief text

PATCH/v1/projects/{id}/brief

Permission
project.manage
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • textstringoptionalcan be null

    Up to 20000 characters

Response object

  • textstringrequiredcan be null
  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • createdAtstringrequired
    • thumbUrlstringrequired
    • fullUrlstringrequired
  • publicTokenstringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/projects/ID/brief" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "text"
  }'

Example response

{
  "text": "text",
  "images": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "createdAt": "2026-11-06T09:30:00.000Z",
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "publicToken": "wsk_example"
}

Add an image to the brief: send the image itself (JPEG, PNG, WebP; up to 15 MB). Location and other metadata are removed.

POST/v1/projects/{id}/brief/images

Permission
project.manage
Answers
201

Parameters

NameInKind
idpathuuidrequired

Request body the file itself

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

Response object

  • textstringrequiredcan be null
  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • createdAtstringrequired
    • thumbUrlstringrequired
    • fullUrlstringrequired
  • publicTokenstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/projects/ID/brief/images" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg

Example response

{
  "text": "text",
  "images": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "createdAt": "2026-11-06T09:30:00.000Z",
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "publicToken": "wsk_example"
}

Remove a brief image

DELETE/v1/projects/{id}/brief/images/{imageId}

Permission
project.manage
Answers
200

Parameters

NameInKind
idpathuuidrequired
imageIdpathuuidrequired

Response object

  • textstringrequiredcan be null
  • imagesarray of objectrequired
    • iduuidrequired
    • widthintegerrequired

      -9007199254740991 to 9007199254740991

    • heightintegerrequired

      -9007199254740991 to 9007199254740991

    • createdAtstringrequired
    • thumbUrlstringrequired
    • fullUrlstringrequired
  • publicTokenstringrequiredcan be null
curl -X DELETE "https://app.workscope.co.uk/v1/projects/ID/brief/images/ID" \
  -H "Authorization: Bearer wsk_your_key_here"

Example response

{
  "text": "text",
  "images": [
    {
      "id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
      "width": -9007199254740991,
      "height": -9007199254740991,
      "createdAt": "2026-11-06T09:30:00.000Z",
      "thumbUrl": "https://example.co.uk",
      "fullUrl": "https://example.co.uk"
    }
  ],
  "publicToken": "wsk_example"
}

A brief image (thumb or full size)

GET/v1/projects/{id}/brief/images/{imageId}/{size}

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

Parameters

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

Turn on the project's public report link, or make a new one (the old link stops working)

POST/v1/projects/{id}/public-link

Permission
project.manage
Answers
200

Parameters

NameInKind
idpathuuidrequired

Request body JSON

  • actionenumoptional

    One of "create", "regenerate" · Default "create"

Response object

  • publicTokenstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/projects/ID/public-link" \
  -H "Authorization: Bearer wsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "create"
  }'

Example response

{
  "publicToken": "wsk_example"
}