Skip to content

Create a worker

POST
/v1/workers
curl --request POST \
--url https://api2.recruso.co.uk/v1/workers \
--header 'Authorization: <Authorization>' \
--header 'Content-Type: application/json' \
--data '{ "branchId": 4, "compliances": [ { "complianceId": 3, "startDate": "2026-01-15", "endDate": "2031-01-14" } ], "titleId": 2, "forename": "Alice", "surname": "Baker", "knownAs": "Ali", "initials": "AB", "birthDate": "1990-04-12", "genderId": 2, "maritalStatusId": 1, "ethnicOriginId": 3, "nationalityId": 14, "address1": "12 High Street", "address2": "Flat 2", "town": "Manchester", "county": "Greater Manchester", "country": "United Kingdom", "postalCode": "M1 1AA", "telephone1": "0161 496 0123", "mobile": "07700 900123", "email": "alice.baker@example.co.uk", "nextOfKinFullName": "Jane Baker", "nextOfKinContactNumber": "07700 900456", "nextOfKinEmailAddress": "jane.baker@example.co.uk", "niNumber": "AB123456C", "formId": 1, "niCategoryId": 1, "statementA": true, "statementB": false, "statementC": false, "noStatement": false, "employeeTaxCode": "1257L", "week1BasisFlag": false, "paymentMethodId": 1, "dni": false, "hiWiz": false, "safetyBoots": true, "digitalTacho": false, "wtdOptout": false, "isStudent": false, "canNotSendSmsEmail": false, "workerRating": 8, "costCentreId": 3, "workerTypeId": 1, "transportId": 2, "recruitmentSourceId": 6, "workRadius": 25, "minimumHourlyRate": 12.21, "minimumDailyRate": 97.68, "rtwShareCode": "W3K 9QP 7ZB", "subContractorId": 55, "bankDetails": { "bankAccountTypeId": 1, "accountName": "A Baker", "accountNumber": "12345678", "sortCode": "01-02-03", "buildingSoc": "Skipton" }, "additionalDetails": { "memo": "Prefers early shifts; will travel to Salford at short notice.", "experience": "Three years warehouse picking, counterbalance FLT since 2023.", "notes": "Registered in branch; documents seen in person.", "blacklistReason": "Left a shift without notice at Trafford Park, 14 August 2026.", "assessment": "Assessed on counterbalance FLT 12 May 2026 — competent, no retraining needed.", "bookingAvailabilityNotes": "Not available Thursdays; college day." }, "jobCategoryIds": [ 1 ], "vehicleCategoryIds": [ 1 ], "suitableAtSiteIds": [ 1 ], "notSuitableAtSiteIds": [ 1 ], "assessedAtSiteIds": [ 1 ], "bannedAtSiteIds": [ 1 ] }'

Registers a worker against one of your branches and returns the created record, including the worker number allocated from your agency’s sequence.

Several fields are conditionally required rather than always required:

  • Bank details are required for every payment method except Cheque. A building society account additionally requires the society name.
  • SubContractorId is required when the worker type is a subcontractor type.
  • Starter-checklist statements are ignored for tax forms that do not use them, and the tax code is overridden when the form is None or Not Required.

Unset fields fall back to your agency’s defaults — the default tax code, the default worker status, and weekly payment frequency. BranchId must be a branch you can access. At least one JobCategoryIds entry is required, and every one of them must belong to your agency. VehicleCategoryIds are ids from the platform Vehicle categories vocabulary — the same for every agency — and are optional, as are the four site lists, whose ids must be sites of your own agency.

BranchId and the compliance documents are only settable here: UpdateWorker changes neither.

AdditionalDetails — the free-text notes — is optional here and on UpdateWorker. Most workers are registered without any, and the record is only written when the object is sent.

Access. Requires a client-credentials access token. Tokens issued through the interactive user login are rejected.

Media typeapplication/json

A new worker: the fields shared with an edit, plus the two that only a registration carries — the branch the worker is registered against and the compliance documents that clear them to start work.

object
branchId

The branch to register the worker against. Must be a branch the Recruso user behind your API app can access. Set once — a worker cannot be moved between branches through the worker endpoints.

integer format: int16
Example
4
compliances

Compliance documents. At least one is required.

Array<object>

A single compliance document held for the worker.

object
complianceId

The kind of document, as an id from your agency’s Compliance lookup.

integer format: int16
Example
3
startDate

The date the document takes effect.

string format: date
nullable
Example
2026-01-15
endDate

The date the document expires. Must not be before the start date.

string format: date
nullable
Example
2031-01-14
titleId

The worker’s title, as an id from the platform Titles vocabulary. Required.

integer format: int16
nullable
Example
2
forename

The worker’s first name. Required, up to 100 characters.

string
Example
Alice
surname

The worker’s family name. Required, up to 50 characters.

string
Example
Baker
knownAs

What the worker prefers to be called, when it differs from their forename.

string
nullable
Example
Ali
initials

The worker’s initials, up to 7 characters.

string
nullable
Example
AB
birthDate

The worker’s date of birth. Required, and they must be at least 16 years old.

string format: date
Example
1990-04-12
genderId

The worker’s gender, as an id from the platform Genders vocabulary.

integer format: int16
nullable
Example
2
maritalStatusId

The worker’s marital status, as an id from the platform vocabulary.

integer format: int16
nullable
Example
1
ethnicOriginId

The worker’s ethnic origin, as an id from the platform vocabulary.

integer format: int16
nullable
Example
3
nationalityId

The worker’s nationality, as an id from the platform Nationalities vocabulary.

integer format: int16
nullable
Example
14
address1

The first line of the worker’s home address. Required, up to 100 characters.

string
nullable
Example
12 High Street
address2

The second line of the worker’s home address, up to 50 characters.

string
nullable
Example
Flat 2
town

The town or city of the worker’s home address.

string
nullable
Example
Manchester
county

The county of the worker’s home address.

string
nullable
Example
Greater Manchester
country

The country of the worker’s home address.

string
nullable
Example
United Kingdom
postalCode

The postcode of the worker’s home address. Required, up to 50 characters.

string
nullable
Example
M1 1AA
telephone1

The worker’s landline number, up to 50 characters.

string
nullable
Example
0161 496 0123
mobile

The worker’s mobile number. Required, up to 50 characters.

string
nullable
Example
07700 900123
email

The worker’s email address. Required, and must be a valid address.

string
nullable
Example
alice.baker@example.co.uk
nextOfKinFullName

Who to contact in an emergency, up to 150 characters.

string
nullable
Example
Jane Baker
nextOfKinContactNumber

The emergency contact’s telephone number, up to 50 characters.

string
nullable
Example
07700 900456
nextOfKinEmailAddress

The emergency contact’s email address. Must be a valid address when supplied.

string
nullable
Example
jane.baker@example.co.uk
niNumber

The worker’s National Insurance number. Required, up to 50 characters.

string
nullable
Example
AB123456C
formId

The tax form the worker provided, as an id from the platform Forms provided vocabulary. Required. The form decides whether the starter-checklist statements below carry any meaning, and for two of the forms it overrides the tax code outright.

integer format: int16
nullable
Example
1
niCategoryId

The worker’s National Insurance category letter, as an id from the platform vocabulary. Required.

integer format: int16
nullable
Example
1
statementA

Starter-checklist statement A: this is their first job since 6 April. Cleared for forms that do not use the starter checklist.

boolean
nullable
Example
true
statementB

Starter-checklist statement B: this is now their only job. Defaults to true when omitted, and cleared for forms that do not use the starter checklist.

boolean
nullable
Example
false
statementC

Starter-checklist statement C: they have another job or a pension. Cleared for forms that do not use the starter checklist.

boolean
nullable
Example
false
noStatement

The starter-checklist “none of the above” statement. Cleared for forms that do not use the starter checklist.

boolean
nullable
Example
false
employeeTaxCode

The worker’s tax code, up to 50 characters. Left unset, this falls back to your agency’s default tax code. A tax form of None applies the emergency code instead, and Not Required leaves the worker without one.

string
nullable
Example
1257L
week1BasisFlag

Whether tax is calculated on a week-1/month-1 basis rather than cumulatively. Defaults to false when omitted, and forced to false when the tax form is None or Not Required.

boolean
nullable
Example
false
paymentMethodId

How the worker is paid, as an id from the platform Payment methods vocabulary. Required. Bank details must accompany every method except Cheque.

integer format: int16
nullable
Example
1
dni

Whether the worker is flagged Do Not Import.

boolean
nullable
Example
false
hiWiz

Whether the worker uses HiWiz.

boolean
nullable
Example
false
safetyBoots

Whether the worker holds their own safety boots.

boolean
nullable
Example
true
digitalTacho

Whether the worker holds a digital tachograph card.

boolean
nullable
Example
false
wtdOptout

Whether the worker has opted out of the Working Time Directive.

boolean
nullable
Example
false
isStudent

Whether the worker is a student.

boolean
nullable
Example
false
canNotSendSmsEmail

Do not send SMS/Email. Defaults to false when omitted.

boolean
nullable
Example
false
workerRating

Worker rating from 1 to 10.

integer format: int16
nullable
Example
8
costCentreId

The cost centre the worker is booked against, as an id from your agency’s Cost centres. Required.

integer format: int16
nullable
Example
3
workerTypeId

How the worker is engaged, as an id from the platform Worker types vocabulary. Required. Subcontractor types additionally require .

integer format: int16
nullable
Example
1
transportId

How the worker travels to work, as an id from your agency’s Transports lookup.

integer format: int16
nullable
Example
2
recruitmentSourceId

Where the worker came from, as an id from your agency’s Recruitment sources lookup.

integer format: int16
nullable
Example
6
workRadius

How far the worker is willing to travel, in miles, from 1 to 100.

integer format: int16
nullable
Example
25
minimumHourlyRate

The lowest hourly rate the worker will accept. Cannot be negative.

number format: float
nullable
Example
12.21
minimumDailyRate

The lowest daily rate the worker will accept. Cannot be negative.

number format: float
nullable
Example
97.68
rtwShareCode

The worker’s Home Office right-to-work share code, up to 20 characters.

string
nullable
Example
W3K 9QP 7ZB
subContractorId

The subcontractor the worker is engaged through. Required when the worker type is Limited, PSC-In Scope or PSC-Out of Scope.

integer format: int32
nullable
Example
55
bankDetails

Where the worker’s pay is sent. Required unless the payment method is Cheque; the mandatory fields within depend on the account type — see .

object
bankAccountTypeId

The kind of account, as an id from the platform Bank account types vocabulary — a bank account or a building society account. It decides which of the fields below are mandatory.

integer format: int16
nullable
Example
1
accountName

The name the account is held in, up to 75 characters.

string
nullable
Example
A Baker
accountNumber

The account number, up to 12 characters.

string
nullable
Example
12345678
sortCode

The sort code, up to 8 characters.

string
nullable
Example
01-02-03
buildingSoc

The building society name or roll number, up to 50 characters. Required for a building society account.

string
nullable
Example
Skipton
additionalDetails

Free-text notes about the worker. Optional, and the one part of this request that is not a replacement: omit it and the notes already on file are left exactly as they are. Send it and every field within it is written, so a field you leave out of a sent object is cleared.

object
memo

A short note about the worker, up to 550 characters.

string
nullable
Example
Prefers early shifts; will travel to Salford at short notice.
experience

The work the worker has done before, up to 600 characters.

string
nullable
Example
Three years warehouse picking, counterbalance FLT since 2023.
notes

General notes, up to 650 characters.

string
nullable
Example
Registered in branch; documents seen in person.
blacklistReason

Why the worker is blacklisted, up to 1000 characters. Recording a reason here does not itself blacklist anyone — the worker’s status is a separate matter.

string
nullable
Example
Left a shift without notice at Trafford Park, 14 August 2026.
assessment

The outcome of assessing the worker, up to 1500 characters.

string
nullable
Example
Assessed on counterbalance FLT 12 May 2026 — competent, no retraining needed.
bookingAvailabilityNotes

Notes about when the worker can be booked, up to 1000 characters.

string
nullable
Example
Not available Thursdays; college day.
jobCategoryIds

Job categories the worker can be booked for, as ids from your agency’s Job categories lookup. Required — at least one and at most 500, with no duplicates. The first entry is recorded as the worker’s default category.

Array<integer>
vehicleCategoryIds

The vehicle classes the worker is licensed to drive, as ids from the platform Vehicle categories vocabulary. At most 500, with no duplicates. Optional — most workers drive nothing. On an update, omit it to keep the list held and send an empty list to clear it.

Array<integer>
nullable
suitableAtSiteIds

Sites the worker is approved to work at, as ids of your agency’s own sites. At most 500, with no duplicates. On an update, omit it to keep the list held and send an empty list to clear it.

Array<integer>
nullable
notSuitableAtSiteIds

Sites the worker is not to be sent to, as ids of your agency’s own sites. At most 500, with no duplicates. A site can appear here and in at once — nothing rejects the combination, because the legacy data already contains it. On an update, omit it to keep the list held and send an empty list to clear it.

Array<integer>
nullable
assessedAtSiteIds

Sites the worker has been assessed at, as ids of your agency’s own sites. At most 500, with no duplicates. On an update, omit it to keep the list held and send an empty list to clear it.

Array<integer>
nullable
bannedAtSiteIds

Sites that have banned the worker, as ids of your agency’s own sites. At most 500, with no duplicates. On an update, omit it to keep the bans held and send an empty list to lift them all: a ban is not historised, so one lifted by mistake cannot be recovered.

Array<integer>
nullable

Created

Media typeapplication/json
object
workerId

The worker’s surrogate identifier. Use this on subsequent worker endpoints.

integer format: int32
workerNumber

The worker’s human-facing reference, allocated from your agency’s own worker number sequence at creation. Unique within the agency, not across the platform.

integer format: int32
branchId

The branch the worker is registered against. Fixed at registration.

integer format: int16
titleId

The worker’s title, as an id from the platform Titles vocabulary.

integer format: int16
nullable
forename

The worker’s first name.

string
surname

The worker’s family name.

string
knownAs

What the worker prefers to be called, when it differs from their forename.

string
nullable
initials

The worker’s initials.

string
nullable
birthDate

The worker’s date of birth.

string format: date
genderId

The worker’s gender, as an id from the platform Genders vocabulary.

integer format: int16
nullable
maritalStatusId

The worker’s marital status, as an id from the platform vocabulary.

integer format: int16
nullable
ethnicOriginId

The worker’s ethnic origin, as an id from the platform vocabulary.

integer format: int16
nullable
nationalityId

The worker’s nationality, as an id from the platform Nationalities vocabulary.

integer format: int16
nullable
address1

The first line of the worker’s home address.

string
nullable
address2

The second line of the worker’s home address.

string
nullable
town

The town or city of the worker’s home address.

string
nullable
county

The county of the worker’s home address.

string
nullable
country

The country of the worker’s home address.

string
nullable
postalCode

The postcode of the worker’s home address.

string
nullable
telephone1

The worker’s landline number.

string
nullable
mobile

The worker’s mobile number.

string
nullable
email

The worker’s email address.

string
nullable
nextOfKinFullName

Who to contact in an emergency.

string
nullable
nextOfKinContactNumber

The emergency contact’s telephone number.

string
nullable
nextOfKinEmailAddress

The emergency contact’s email address.

string
nullable
dni

Whether the worker is flagged Do Not Import.

boolean
nullable
hiWiz

Whether the worker uses HiWiz.

boolean
nullable
safetyBoots

Whether the worker holds their own safety boots.

boolean
nullable
digitalTacho

Whether the worker holds a digital tachograph card.

boolean
nullable
wtdOptout

Whether the worker has opted out of the Working Time Directive.

boolean
nullable
isStudent

Whether the worker is a student.

boolean
nullable
canNotSendSmsEmail

Whether the worker has asked not to be sent SMS or email.

boolean
workerRating

The worker’s rating, on a 1-10 scale.

integer format: int16
nullable
costCentreId

The cost centre the worker is booked against.

integer format: int16
nullable
workerTypeId

The worker’s engagement type. Subcontractor types additionally require to be set.

integer format: int16
nullable
transportId

How the worker travels to work.

integer format: int16
nullable
recruitmentSourceId

Where the worker came from, as an id from your agency’s Recruitment sources lookup.

integer format: int16
nullable
workRadius

How far the worker is willing to travel, in miles.

integer format: int16
nullable
minimumHourlyRate

The lowest hourly rate the worker will accept.

number format: float
nullable
minimumDailyRate

The lowest daily rate the worker will accept.

number format: float
nullable
rtwShareCode

The worker’s Home Office right-to-work share code.

string
nullable
subContractorId

The subcontractor the worker is engaged through, when the worker type requires one.

integer format: int32
nullable
registeredDate

The date the worker was registered, in UK local time. Fixed at registration.

string format: date
nullable
userId

The Recruso user the worker is registered under.

integer format: int16
nullable
createdBy

The Recruso user id (tblUsers.UserID) that created the worker, not the ASP.NET Identity id.

integer format: int16
nullable
createdOn

When the worker was created, in UK local time.

string format: date-time
nullable
modifiedBy

The Recruso user id (tblUsers.UserID) that last updated the worker, not the ASP.NET Identity id. Null until the worker has been updated.

integer format: int16
nullable
modifiedOn

When the worker was last updated, in UK local time. Null until the worker has been updated.

string format: date-time
nullable
workerStatusTypeId

The worker’s current status. Assigned from the agency default at registration, when one is configured; updating a worker’s details does not change it.

integer format: int16
nullable
taxDetails

The worker’s tax and payment setup.

object
niNumber

The worker’s National Insurance number.

string
nullable
formId

The tax form the worker provided. Forms that do not use the starter checklist clear the statement fields below; a form of None or Not Required also overrides .

integer format: int16
nullable
niCategoryId

The worker’s National Insurance category letter.

integer format: int16
nullable
statementA

Starter-checklist statement A: this is their first job since 6 April.

boolean
nullable
statementB

Starter-checklist statement B: this is now their only job. Defaults to true.

boolean
nullable
statementC

Starter-checklist statement C: they have another job or a pension.

boolean
nullable
noStatement

The starter-checklist “none of the above” statement.

boolean
nullable
employeeTaxCode

The worker’s tax code. Falls back to the agency’s default tax code when the request does not supply one.

string
nullable
week1BasisFlag

When true, tax is calculated on a week-1/month-1 basis rather than cumulatively.

boolean
paymentMethodId

How the worker is paid. Every method other than Cheque requires to be present.

integer format: int16
nullable
paymentFrequencyId

How often the worker is paid. New workers default to weekly, and an update keeps whatever they are already on.

integer format: int16
nullable
bankDetails

Where the worker’s pay is sent. Absent for a worker who has never had an account on file.

object
bankAccountTypeId

The kind of account. A building society account additionally requires .

integer format: int16
nullable
accountName

The name the account is held in.

string
nullable
accountNumber

The account number.

string
nullable
sortCode

The sort code.

string
nullable
buildingSoc

The building society name, required for building society accounts.

string
nullable
additionalDetails

Free-text notes about the worker. Absent for a worker nobody has written a note about.

object
memo

A short note about the worker.

string
nullable
experience

The work the worker has done before.

string
nullable
notes

General notes.

string
nullable
blacklistReason

Why the worker is blacklisted, where a reason has been recorded.

string
nullable
assessment

The outcome of assessing the worker.

string
nullable
bookingAvailabilityNotes

Notes about when the worker can be booked.

string
nullable
compliances

The compliance documents held for the worker. Set at registration; updating a worker’s details leaves them untouched.

Array<object>

A compliance document held for the worker.

object
workerComplianceId

The record’s identifier.

integer format: int32
complianceId

The kind of document, as an id from your agency’s Compliance lookup.

integer format: int16
startDate

The date the document takes effect.

string format: date
nullable
endDate

The date the document expires.

string format: date
nullable
vehicleCategoryIds

The vehicle classes the worker is licensed to drive, as ids from the platform Vehicle categories vocabulary.

Array<integer>
suitableAtSiteIds

Sites the worker is approved to work at.

Array<integer>
notSuitableAtSiteIds

Sites the worker is not to be sent to.

Array<integer>
assessedAtSiteIds

Sites the worker has been assessed at.

Array<integer>
bannedAtSiteIds

Sites that have banned the worker.

Array<integer>
jobCategories

The job categories the worker can be booked for.

Array<object>

A job category the worker can be booked for.

object
workerJobCategoryId

The record’s identifier. Stable across updates that keep the category.

integer format: int32
jobCategoryId

The job category, as an id from your agency’s Job categories lookup.

integer format: int32
isDefault

Whether this is the worker’s default category — the first one sent on a write.

boolean
nullable
Example
{
"workerId": 4821,
"workerNumber": 10432,
"branchId": 4,
"titleId": 2,
"forename": "Alice",
"surname": "Baker",
"knownAs": "Ali",
"initials": "AB",
"birthDate": "1990-04-12",
"genderId": 2,
"maritalStatusId": 1,
"ethnicOriginId": 3,
"nationalityId": 14,
"address1": "12 High Street",
"address2": "Flat 2",
"town": "Manchester",
"county": "Greater Manchester",
"country": "United Kingdom",
"postalCode": "M1 1AA",
"telephone1": "0161 496 0123",
"mobile": "07700 900123",
"email": "alice.baker@example.co.uk",
"nextOfKinFullName": "Jane Baker",
"nextOfKinContactNumber": "07700 900456",
"nextOfKinEmailAddress": "jane.baker@example.co.uk",
"dni": false,
"hiWiz": false,
"safetyBoots": true,
"digitalTacho": false,
"wtdOptout": false,
"isStudent": false,
"canNotSendSmsEmail": false,
"workerRating": 8,
"costCentreId": 3,
"workerTypeId": 1,
"transportId": 2,
"recruitmentSourceId": 6,
"workRadius": 25,
"minimumHourlyRate": 12.21,
"minimumDailyRate": 97.68,
"rtwShareCode": "W3K 9QP 7ZB",
"subContractorId": 55,
"registeredDate": "2026-08-14",
"userId": 100,
"createdBy": 100,
"createdOn": "2026-08-14T09:41:02",
"modifiedBy": 100,
"modifiedOn": "2026-09-02T15:08:47",
"workerStatusTypeId": 3,
"taxDetails": {
"niNumber": "AB123456C",
"formId": 1,
"niCategoryId": 1,
"statementA": true,
"statementB": false,
"statementC": false,
"noStatement": false,
"employeeTaxCode": "1257L",
"week1BasisFlag": false,
"paymentMethodId": 1,
"paymentFrequencyId": 1
},
"bankDetails": {
"bankAccountTypeId": 1,
"accountName": "A Baker",
"accountNumber": "12345678",
"sortCode": "01-02-03",
"buildingSoc": "Skipton"
},
"additionalDetails": {
"memo": "Prefers early shifts; will travel to Salford at short notice.",
"experience": "Three years warehouse picking, counterbalance FLT since 2023.",
"notes": "Registered in branch; documents seen in person.",
"blacklistReason": "Left a shift without notice at Trafford Park, 14 August 2026.",
"assessment": "Assessed on counterbalance FLT 12 May 2026 — competent, no retraining needed.",
"bookingAvailabilityNotes": "Not available Thursdays; college day."
},
"compliances": [
{
"workerComplianceId": 7311,
"complianceId": 3,
"startDate": "2026-01-15",
"endDate": "2031-01-14"
}
],
"jobCategories": [
{
"workerJobCategoryId": 9014,
"jobCategoryId": 27,
"isDefault": true
}
]
}

Bad Request

Media typeapplication/problem+json
object
type
string
nullable
title
string
nullable
status
integer format: int32
nullable
detail
string
nullable
instance
string
nullable
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Unauthorized

Media typeapplication/problem+json
object
type
string
nullable
title
string
nullable
status
integer format: int32
nullable
detail
string
nullable
instance
string
nullable
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Forbidden

Media typeapplication/problem+json
object
type
string
nullable
title
string
nullable
status
integer format: int32
nullable
detail
string
nullable
instance
string
nullable
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}