API reference
Team
17 requests. Each shows the permission a key needs, what to send and what comes back.
On this page
My own team member record (the app)
GET/v1/me/team-member
- Permission
team.self- Answers
200
Response object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nulladdressstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredcustomFieldsobjectrequired
curl "https://app.workscope.co.uk/v1/me/team-member" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"address": "1 Harbour Road, Bristol",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"customFields": {
"contract-number": "CN-1042"
}
}Change my own contact details: name, phone, address, job title (the app)
PATCH/v1/me/team-member
- Permission
team.self- Answers
200
Request body JSON
namestringoptional1–200 characters
surnamestringoptionalcan be nullUp to 200 characters
phonestringoptionalcan be nullUp to 50 characters
addressstringoptionalcan be nullUp to 500 characters
jobTitlestringoptionalcan be nullUp to 200 characters
Response object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nulladdressstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredcustomFieldsobjectrequired
curl -X PATCH "https://app.workscope.co.uk/v1/me/team-member" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"phone": "0117 496 0123",
"address": "1 Harbour Road, Bristol",
"jobTitle": "text"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"address": "1 Harbour Road, Bristol",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"customFields": {
"contract-number": "CN-1042"
}
}Team members
GET/v1/team-members
- Permission
team.view- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
status | query | enum | One of active, archived, all · Default "active" |
q | query | string | |
access | query | enum | One of login, invited, none |
Response array of object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nullnotesstringrequiredcan be nullemploymentStartDatedaterequiredcan be nullYYYY-MM-DD
employmentEndDatedaterequiredcan be nullYYYY-MM-DD
addressstringrequiredcan be nulldateOfBirthdaterequiredcan be nullYYYY-MM-DD
niNumberMaskedstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredhasLoginbooleanrequiredaccessobjectrequiredstateenumrequiredOne of
"login","invited","none"lastSeenAtstringrequiredcan be nullinvitationIduuidrequiredcan be nullinvitedAtstringrequiredcan be null
archivedbooleanrequiredcustomFieldsobjectrequiredpayBasisenumrequiredOne of
"hourly","salaried"accrualRatePercentnumberrequiredcan be nullsalariedAllowanceDaysnumberrequiredcan be nullworkingWeekdaysarray of integerrequiredminutesPerDayintegerrequired-9007199254740991 to 9007199254740991
breaksPaidbooleanrequiredhoursFromenumrequiredOne of
"bookings","timesheets"inPayrollbooleanrequiredonTrialbooleanrequiredemergencyContactobjectrequiredcan be nullnamestringrequiredrelationshipstringrequiredcan be nullphonestringrequired
bankMaskedstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/team-members" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumberMasked": "text",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"hasLogin": false,
"access": {
"state": "login",
"lastSeenAt": "2026-11-06T09:30:00.000Z",
"invitationId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invitedAt": "2026-11-06T09:30:00.000Z"
},
"archived": false,
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 1,
"salariedAllowanceDays": 1,
"workingWeekdays": [
0
],
"minutesPerDay": -9007199254740991,
"breaksPaid": false,
"hoursFrom": "bookings",
"inPayroll": false,
"onTrial": false,
"emergencyContact": {
"name": "Harbourside Dental",
"relationship": "text",
"phone": "0117 496 0123"
},
"bankMasked": "text"
}
]Add a team member
POST/v1/team-members
- Permission
team.manage- Answers
201
Request body JSON
namestringrequired1–200 characters
surnamestringoptionalcan be nullUp to 200 characters
emailconstant or stringoptionalcan be nullphonestringoptionalcan be nullUp to 50 characters
jobTitlestringoptionalcan be nullUp to 200 characters
notesstringoptionalcan be nullUp to 5000 characters
employmentStartDatedateoptionalcan be nullYYYY-MM-DD
employmentEndDatedateoptionalcan be nullYYYY-MM-DD
addressstringoptionalcan be nullUp to 500 characters
dateOfBirthdateoptionalcan be nullYYYY-MM-DD
niNumberstringoptionalcan be nullUp to 20 characters
teamIdsarray of uuidoptionalUp to 100 items · Default
[]customFieldsobjectoptionalpayBasisenumoptionalOne of
"hourly","salaried"accrualRatePercentnumberoptionalcan be null0 to 50
salariedAllowanceDaysnumberoptionalcan be null0 to 366
workingWeekdaysarray of integeroptionalUp to 7 items
minutesPerDayintegeroptional15 to 1440
breaksPaidbooleanoptionalinPayrollbooleanoptionalhoursFromenumoptionalOne of
"bookings","timesheets"hoursFromStartsOndateoptionalYYYY-MM-DD
Response object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nullnotesstringrequiredcan be nullemploymentStartDatedaterequiredcan be nullYYYY-MM-DD
employmentEndDatedaterequiredcan be nullYYYY-MM-DD
addressstringrequiredcan be nulldateOfBirthdaterequiredcan be nullYYYY-MM-DD
niNumberMaskedstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredhasLoginbooleanrequiredaccessobjectrequiredstateenumrequiredOne of
"login","invited","none"lastSeenAtstringrequiredcan be nullinvitationIduuidrequiredcan be nullinvitedAtstringrequiredcan be null
archivedbooleanrequiredcustomFieldsobjectrequiredpayBasisenumrequiredOne of
"hourly","salaried"accrualRatePercentnumberrequiredcan be nullsalariedAllowanceDaysnumberrequiredcan be nullworkingWeekdaysarray of integerrequiredminutesPerDayintegerrequired-9007199254740991 to 9007199254740991
breaksPaidbooleanrequiredhoursFromenumrequiredOne of
"bookings","timesheets"inPayrollbooleanrequiredonTrialbooleanrequiredemergencyContactobjectrequiredcan be nullnamestringrequiredrelationshipstringrequiredcan be nullphonestringrequired
bankMaskedstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/team-members" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumber": "text",
"teamIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 0,
"salariedAllowanceDays": 0,
"workingWeekdays": [
0
],
"minutesPerDay": 15,
"breaksPaid": false,
"inPayroll": false,
"hoursFrom": "bookings",
"hoursFromStartsOn": "2026-11-06"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumberMasked": "text",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"hasLogin": false,
"access": {
"state": "login",
"lastSeenAt": "2026-11-06T09:30:00.000Z",
"invitationId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invitedAt": "2026-11-06T09:30:00.000Z"
},
"archived": false,
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 1,
"salariedAllowanceDays": 1,
"workingWeekdays": [
0
],
"minutesPerDay": -9007199254740991,
"breaksPaid": false,
"hoursFrom": "bookings",
"inPayroll": false,
"onTrial": false,
"emergencyContact": {
"name": "Harbourside Dental",
"relationship": "text",
"phone": "0117 496 0123"
},
"bankMasked": "text"
}One team member
GET/v1/team-members/{id}
- Permission
team.view- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nullnotesstringrequiredcan be nullemploymentStartDatedaterequiredcan be nullYYYY-MM-DD
employmentEndDatedaterequiredcan be nullYYYY-MM-DD
addressstringrequiredcan be nulldateOfBirthdaterequiredcan be nullYYYY-MM-DD
niNumberMaskedstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredhasLoginbooleanrequiredaccessobjectrequiredstateenumrequiredOne of
"login","invited","none"lastSeenAtstringrequiredcan be nullinvitationIduuidrequiredcan be nullinvitedAtstringrequiredcan be null
archivedbooleanrequiredcustomFieldsobjectrequiredpayBasisenumrequiredOne of
"hourly","salaried"accrualRatePercentnumberrequiredcan be nullsalariedAllowanceDaysnumberrequiredcan be nullworkingWeekdaysarray of integerrequiredminutesPerDayintegerrequired-9007199254740991 to 9007199254740991
breaksPaidbooleanrequiredhoursFromenumrequiredOne of
"bookings","timesheets"inPayrollbooleanrequiredonTrialbooleanrequiredemergencyContactobjectrequiredcan be nullnamestringrequiredrelationshipstringrequiredcan be nullphonestringrequired
bankMaskedstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/team-members/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumberMasked": "text",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"hasLogin": false,
"access": {
"state": "login",
"lastSeenAt": "2026-11-06T09:30:00.000Z",
"invitationId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invitedAt": "2026-11-06T09:30:00.000Z"
},
"archived": false,
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 1,
"salariedAllowanceDays": 1,
"workingWeekdays": [
0
],
"minutesPerDay": -9007199254740991,
"breaksPaid": false,
"hoursFrom": "bookings",
"inPayroll": false,
"onTrial": false,
"emergencyContact": {
"name": "Harbourside Dental",
"relationship": "text",
"phone": "0117 496 0123"
},
"bankMasked": "text"
}Change or archive a team member
PATCH/v1/team-members/{id}
- Permission
team.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
namestringoptional1–200 characters
surnamestringoptionalcan be nullUp to 200 characters
emailconstant or stringoptionalcan be nullphonestringoptionalcan be nullUp to 50 characters
jobTitlestringoptionalcan be nullUp to 200 characters
notesstringoptionalcan be nullUp to 5000 characters
employmentStartDatedateoptionalcan be nullYYYY-MM-DD
employmentEndDatedateoptionalcan be nullYYYY-MM-DD
addressstringoptionalcan be nullUp to 500 characters
dateOfBirthdateoptionalcan be nullYYYY-MM-DD
niNumberstringoptionalcan be nullUp to 20 characters
teamIdsarray of uuidoptionalUp to 100 items
customFieldsobjectoptionalpayBasisenumoptionalOne of
"hourly","salaried"accrualRatePercentnumberoptionalcan be null0 to 50
salariedAllowanceDaysnumberoptionalcan be null0 to 366
workingWeekdaysarray of integeroptionalUp to 7 items
minutesPerDayintegeroptional15 to 1440
breaksPaidbooleanoptionalinPayrollbooleanoptionalhoursFromenumoptionalOne of
"bookings","timesheets"hoursFromStartsOndateoptionalYYYY-MM-DD
archivedbooleanoptional
Response object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nullnotesstringrequiredcan be nullemploymentStartDatedaterequiredcan be nullYYYY-MM-DD
employmentEndDatedaterequiredcan be nullYYYY-MM-DD
addressstringrequiredcan be nulldateOfBirthdaterequiredcan be nullYYYY-MM-DD
niNumberMaskedstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredhasLoginbooleanrequiredaccessobjectrequiredstateenumrequiredOne of
"login","invited","none"lastSeenAtstringrequiredcan be nullinvitationIduuidrequiredcan be nullinvitedAtstringrequiredcan be null
archivedbooleanrequiredcustomFieldsobjectrequiredpayBasisenumrequiredOne of
"hourly","salaried"accrualRatePercentnumberrequiredcan be nullsalariedAllowanceDaysnumberrequiredcan be nullworkingWeekdaysarray of integerrequiredminutesPerDayintegerrequired-9007199254740991 to 9007199254740991
breaksPaidbooleanrequiredhoursFromenumrequiredOne of
"bookings","timesheets"inPayrollbooleanrequiredonTrialbooleanrequiredemergencyContactobjectrequiredcan be nullnamestringrequiredrelationshipstringrequiredcan be nullphonestringrequired
bankMaskedstringrequiredcan be null
curl -X PATCH "https://app.workscope.co.uk/v1/team-members/ID" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumber": "text",
"teamIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
],
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 0,
"salariedAllowanceDays": 0,
"workingWeekdays": [
0
],
"minutesPerDay": 15,
"breaksPaid": false,
"inPayroll": false,
"hoursFrom": "bookings",
"hoursFromStartsOn": "2026-11-06",
"archived": false
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumberMasked": "text",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"hasLogin": false,
"access": {
"state": "login",
"lastSeenAt": "2026-11-06T09:30:00.000Z",
"invitationId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invitedAt": "2026-11-06T09:30:00.000Z"
},
"archived": false,
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 1,
"salariedAllowanceDays": 1,
"workingWeekdays": [
0
],
"minutesPerDay": -9007199254740991,
"breaksPaid": false,
"hoursFrom": "bookings",
"inPayroll": false,
"onTrial": false,
"emergencyContact": {
"name": "Harbourside Dental",
"relationship": "text",
"phone": "0117 496 0123"
},
"bankMasked": "text"
}A team member's login and any open invitation
GET/v1/team-members/{id}/access
- Permission
users.view- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
loginobjectrequiredcan be nulluserIduuidrequirednamestringrequiredemailstringrequiredroleenumrequiredOne of
"owner","admin","operative","client"joinedAtstringrequired
invitationobjectrequiredcan be nulliduuidrequiredemailstringrequiredroleenumrequiredOne of
"owner","admin","operative","client"expiresAtstringrequired
linkablearray of objectrequireduserIduuidrequirednamestringrequiredemailstringrequiredroleenumrequiredOne of
"owner","admin","operative","client"
curl "https://app.workscope.co.uk/v1/team-members/ID/access" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"login": {
"userId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"email": "office@example.co.uk",
"role": "owner",
"joinedAt": "2026-11-06T09:30:00.000Z"
},
"invitation": {
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"email": "office@example.co.uk",
"role": "owner",
"expiresAt": "2026-11-06T09:30:00.000Z"
},
"linkable": [
{
"userId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"name": "Harbourside Dental",
"email": "office@example.co.uk",
"role": "owner"
}
]
}A team member's whole NI number (owners and admins; everywhere else it is masked)
GET/v1/team-members/{id}/ni-number
- Permission
team.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
niNumberstringrequiredcan be null
curl "https://app.workscope.co.uk/v1/team-members/ID/ni-number" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"niNumber": "text"
}A team member's photo (JPEG)
GET/v1/team-members/{id}/photo
- Permission
team.photo- Answers
200with a file (image/jpeg)
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
curl "https://app.workscope.co.uk/v1/team-members/ID/photo" \
-H "Authorization: Bearer wsk_your_key_here"Set a team member's photo: send the image itself (JPEG, PNG, WebP; up to 5 MB). A team member may set their own.
POST/v1/team-members/{id}/photo
- Permission
team.manage or team.self- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body the file itself
Send the file as the body, with Content-Type one of image/jpeg, image/png, image/webp. See Files and photos.
Response object
photoUrlstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/team-members/ID/photo" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: image/jpeg" \
--data-binary @photo.jpgExample response
{
"photoUrl": "https://example.co.uk"
}Remove a team member's photo. A team member may remove their own.
DELETE/v1/team-members/{id}/photo
- Permission
team.manage or team.self- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
photoUrlstringrequiredcan be null
curl -X DELETE "https://app.workscope.co.uk/v1/team-members/ID/photo" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"photoUrl": "https://example.co.uk"
}Put an owner or admin on the schedule: a team member record made from their login (name and email) and linked to it. Their role doesn't change, and they are left out of pay runs until someone includes them.
POST/v1/team-members/for-login
- Permission
team.manage- Answers
201
Request body JSON
userIduuidrequired
Response object
iduuidrequirednamestringrequiredsurnamestringrequiredcan be nullemailstringrequiredcan be nullphonestringrequiredcan be nulljobTitlestringrequiredcan be nullnotesstringrequiredcan be nullemploymentStartDatedaterequiredcan be nullYYYY-MM-DD
employmentEndDatedaterequiredcan be nullYYYY-MM-DD
addressstringrequiredcan be nulldateOfBirthdaterequiredcan be nullYYYY-MM-DD
niNumberMaskedstringrequiredcan be nullphotoUrlstringrequiredcan be nullteamIdsarray of uuidrequiredhasLoginbooleanrequiredaccessobjectrequiredstateenumrequiredOne of
"login","invited","none"lastSeenAtstringrequiredcan be nullinvitationIduuidrequiredcan be nullinvitedAtstringrequiredcan be null
archivedbooleanrequiredcustomFieldsobjectrequiredpayBasisenumrequiredOne of
"hourly","salaried"accrualRatePercentnumberrequiredcan be nullsalariedAllowanceDaysnumberrequiredcan be nullworkingWeekdaysarray of integerrequiredminutesPerDayintegerrequired-9007199254740991 to 9007199254740991
breaksPaidbooleanrequiredhoursFromenumrequiredOne of
"bookings","timesheets"inPayrollbooleanrequiredonTrialbooleanrequiredemergencyContactobjectrequiredcan be nullnamestringrequiredrelationshipstringrequiredcan be nullphonestringrequired
bankMaskedstringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/team-members/for-login" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"userId": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"surname": "Harbourside Dental",
"email": "office@example.co.uk",
"phone": "0117 496 0123",
"jobTitle": "text",
"notes": "Side gate code is on the key safe.",
"employmentStartDate": "2026-11-06",
"employmentEndDate": "2026-11-06",
"address": "1 Harbour Road, Bristol",
"dateOfBirth": "2026-11-06",
"niNumberMasked": "text",
"photoUrl": "https://example.co.uk",
"teamIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
],
"hasLogin": false,
"access": {
"state": "login",
"lastSeenAt": "2026-11-06T09:30:00.000Z",
"invitationId": "b7e6d5c4-3b2a-4190-8f7e-6d5c4b3a2918",
"invitedAt": "2026-11-06T09:30:00.000Z"
},
"archived": false,
"customFields": {
"contract-number": "CN-1042"
},
"payBasis": "hourly",
"accrualRatePercent": 1,
"salariedAllowanceDays": 1,
"workingWeekdays": [
0
],
"minutesPerDay": -9007199254740991,
"breaksPaid": false,
"hoursFrom": "bookings",
"inPayroll": false,
"onTrial": false,
"emergencyContact": {
"name": "Harbourside Dental",
"relationship": "text",
"phone": "0117 496 0123"
},
"bankMasked": "text"
}Import team members from spreadsheet rows, already matched to fields; dryRun says what would happen
POST/v1/team-members/import
- Permission
team.manage- Answers
200
Request body JSON
rowsarray of objectrequired1–2000 items
rowNumberintegerrequired1 to 9007199254740991
valuesobjectrequired
onDuplicateenumoptionalOne of
"skip","update"· Default"skip"dryRunbooleanoptionalDefault
false
Response object
dryRunbooleanrequiredcreatedintegerrequired-9007199254740991 to 9007199254740991
updatedintegerrequired-9007199254740991 to 9007199254740991
skippedintegerrequired-9007199254740991 to 9007199254740991
failedintegerrequired-9007199254740991 to 9007199254740991
rowsarray of objectrequiredrowNumberintegerrequired-9007199254740991 to 9007199254740991
namestringrequiredoutcomeenumrequiredOne of
"created","updated","skipped","failed"messagestringrequiredcan be null
curl -X POST "https://app.workscope.co.uk/v1/team-members/import" \
-H "Authorization: Bearer wsk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"rows": [
{
"rowNumber": 1,
"values": {}
}
],
"onDuplicate": "skip",
"dryRun": false
}'Example response
{
"dryRun": false,
"created": -9007199254740991,
"updated": -9007199254740991,
"skipped": -9007199254740991,
"failed": -9007199254740991,
"rows": [
{
"rowNumber": -9007199254740991,
"name": "Harbourside Dental",
"outcome": "created",
"message": "text"
}
]
}Teams
GET/v1/teams
- Permission
team.view- Answers
200
Response array of object
iduuidrequirednamestringrequireddescriptionstringrequiredcan be nullteamMemberIdsarray of uuidrequired
curl "https://app.workscope.co.uk/v1/teams" \
-H "Authorization: Bearer wsk_your_key_here"Example response
[
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
]
}
]Add a team
POST/v1/teams
- Permission
team.manage- Answers
201
Request body JSON
namestringrequired1–200 characters
descriptionstringoptionalcan be nullUp to 5000 characters
teamMemberIdsarray of uuidoptionalUp to 500 items · Default
[]
Response object
iduuidrequirednamestringrequireddescriptionstringrequiredcan be nullteamMemberIdsarray of uuidrequired
curl -X POST "https://app.workscope.co.uk/v1/teams" \
-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.",
"teamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
]
}Change a team
PATCH/v1/teams/{id}
- Permission
team.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Request body JSON
namestringoptional1–200 characters
descriptionstringoptionalcan be nullUp to 5000 characters
teamMemberIdsarray of uuidoptionalUp to 500 items
Response object
iduuidrequirednamestringrequireddescriptionstringrequiredcan be nullteamMemberIdsarray of uuidrequired
curl -X PATCH "https://app.workscope.co.uk/v1/teams/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.",
"teamMemberIds": [
"3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41"
]
}'Example response
{
"id": "3f2a9c1e-6b4d-4e8a-9f1c-2d7b5a0e8c41",
"name": "Harbourside Dental",
"description": "Side gate code is on the key safe.",
"teamMemberIds": [
"8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
]
}Remove a team
DELETE/v1/teams/{id}
- Permission
team.manage- Answers
200
Parameters
| Name | In | Kind | |
|---|---|---|---|
id | path | uuidrequired |
Response object
okconstantrequiredAlways
true
curl -X DELETE "https://app.workscope.co.uk/v1/teams/ID" \
-H "Authorization: Bearer wsk_your_key_here"Example response
{
"ok": true
}