Skip to content

Create or replace a site's information sheet

PUT
/v1/clients/{clientId}/sites/{id}/information
curl --request PUT \
--url https://api2.recruso.co.uk/v1/clients/1/sites/1/information \
--header 'Authorization: <Authorization>' \
--header 'Content-Type: application/json' \
--data '{ "information": "Chilled distribution centre serving 42 stores across the north west.", "staffRequirements": "Pickers and pallet truck drivers; own safety boots essential.", "actionToTake": "Call the shift supervisor before 05:30 for same-day cover.", "tempsUsed": 60, "peakPeriods": "October to early January, and Easter week.", "companySize": "250-500 employees", "noOfEmployees": "310", "minimumAge": 18, "safetyBoots": true, "hiViz": true, "smokingArea": true, "canteen": true, "agenciesUsed": "Two other suppliers on a shared rota.", "otherSites": "Shares a transport yard with the Salford depot.", "tempsDepartment": "Chilled picking", "assessmentRequired": true, "workersCanLogHoursViaApp": true, "importantSiteNotes": "No lone working after 22:00; gatehouse closes 23:00.", "workerAppRadius": 0.5 }'

Creates the information sheet for one of your own agency’s sites, or replaces it if one already exists. A site has at most one sheet, so there is no separate create and update.

This is a full replacement, not a partial merge: every field is written from the request, so a field you omit is set to null. Read the current sheet with GetSiteInformation and send it back with your changes applied, rather than sending only the fields you are changing.

Both outcomes return 200, never 201 — a create and a replace are not distinguished by status. The response’s isNewlyCreated tells you which happened.

The site must belong to the client named in the route, otherwise 404.

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

clientId
required
integer format: int32

The clientId path parameter

id
required
integer format: int32

The id path parameter

Media typeapplication/json

The site information sheet to create or replace. Every field is written, so an omitted field is set to null.

object
information

General information about the site and what it does.

string
nullable
Example
Chilled distribution centre serving 42 stores across the north west.
staffRequirements

What the site requires of the workers placed there.

string
nullable
Example
Pickers and pallet truck drivers; own safety boots essential.
actionToTake

What to do when placing workers here, or when something goes wrong.

string
nullable
Example
Call the shift supervisor before 05:30 for same-day cover.
tempsUsed

How many temporary workers the site typically uses.

integer format: int32
nullable
Example
60
peakPeriods

When the site is busiest.

string
nullable
Example
October to early January, and Easter week.
companySize

The size of the company operating the site.

string
nullable
Example
250-500 employees
noOfEmployees

How many people the site employs directly.

string
nullable
Example
310
minimumAge

The minimum age for a worker placed at this site.

number format: float
nullable
Example
18
safetyBoots

Whether safety boots are required on site.

boolean
nullable
Example
true
hiViz

Whether a hi-vis vest is required on site.

boolean
nullable
Example
true
smokingArea

Whether the site has a designated smoking area.

boolean
nullable
Example
true
canteen

Whether the site has a canteen.

boolean
nullable
Example
true
agenciesUsed

Which other agencies supply this site.

string
nullable
Example
Two other suppliers on a shared rota.
otherSites

Other sites the client operates that relate to this one.

string
nullable
Example
Shares a transport yard with the Salford depot.
tempsDepartment

Which department the temporary workers are placed into.

string
nullable
Example
Chilled picking
assessmentRequired

Whether a worker must complete an assessment before being placed at this site.

boolean
nullable
Example
true
workersCanLogHoursViaApp

Whether workers at this site may log their hours through the worker app.

boolean
nullable
Example
true
importantSiteNotes

Notes that anyone placing a worker here needs to read first.

string
nullable
Example
No lone working after 22:00; gatehouse closes 23:00.
workerAppRadius

How far from the site, in the app’s own units, a worker may be when logging hours through the worker app.

number format: double
nullable
Example
0.5

OK

Media typeapplication/json

A site information sheet as it stands after the upsert.

object
siteId

The site this information sheet describes. A site has at most one sheet.

integer format: int32
isNewlyCreated

Whether this request created the sheet rather than replacing an existing one. Both outcomes return 200, so this is how you tell them apart.

boolean
information

General information about the site and what it does.

string
nullable
staffRequirements

What the site requires of the workers placed there.

string
nullable
actionToTake

What to do when placing workers here, or when something goes wrong.

string
nullable
tempsUsed

How many temporary workers the site typically uses.

integer format: int32
nullable
peakPeriods

When the site is busiest.

string
nullable
companySize

The size of the company operating the site.

string
nullable
noOfEmployees

How many people the site employs directly.

string
nullable
minimumAge

The minimum age for a worker placed at this site.

number format: float
nullable
safetyBoots

Whether safety boots are required on site.

boolean
nullable
hiViz

Whether a hi-vis vest is required on site.

boolean
nullable
smokingArea

Whether the site has a designated smoking area.

boolean
nullable
canteen

Whether the site has a canteen.

boolean
nullable
agenciesUsed

Which other agencies supply this site.

string
nullable
otherSites

Other sites the client operates that relate to this one.

string
nullable
tempsDepartment

Which department the temporary workers are placed into.

string
nullable
assessmentRequired

Whether a worker must complete an assessment before being placed at this site.

boolean
nullable
workersCanLogHoursViaApp

Whether workers at this site may log their hours through the worker app.

boolean
nullable
importantSiteNotes

Notes that anyone placing a worker here needs to read first.

string
nullable
workerAppRadius

How far from the site, in the app’s own units, a worker may be when logging hours through the worker app.

number format: double
nullable
loggedBy

The Recruso user who first logged the information sheet. Set when the sheet is created and not changed by later replacements.

integer format: int16
nullable
createdBy

The Recruso user who created the information sheet.

integer format: int16
nullable
createdOn

When the information sheet was created, in UK local time (GMT/BST) - not UTC.

string format: date-time
nullable
modifiedBy

The Recruso user who last replaced the information sheet. Null until it is first replaced.

integer format: int16
nullable
modifiedOn

When the information sheet was last replaced, in UK local time (GMT/BST) - not UTC. Null until it is first replaced.

string format: date-time
nullable
Example
{
"siteId": 512,
"isNewlyCreated": false,
"information": "Chilled distribution centre serving 42 stores across the north west.",
"staffRequirements": "Pickers and pallet truck drivers; own safety boots essential.",
"actionToTake": "Call the shift supervisor before 05:30 for same-day cover.",
"tempsUsed": 60,
"peakPeriods": "October to early January, and Easter week.",
"companySize": "250-500 employees",
"noOfEmployees": "310",
"minimumAge": 18,
"safetyBoots": true,
"hiViz": true,
"smokingArea": true,
"canteen": true,
"agenciesUsed": "Two other suppliers on a shared rota.",
"otherSites": "Shares a transport yard with the Salford depot.",
"tempsDepartment": "Chilled picking",
"assessmentRequired": true,
"workersCanLogHoursViaApp": true,
"importantSiteNotes": "No lone working after 22:00; gatehouse closes 23:00.",
"workerAppRadius": 0.5,
"loggedBy": 12,
"createdBy": 12,
"createdOn": "2026-03-18T09:55:41",
"modifiedBy": 12,
"modifiedOn": "2026-06-11T14:02:09"
}

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"
}

Not Found

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"
}