Create a site contact
const url = 'https://api2.recruso.co.uk/v1/clients/1/sites/1/contact-persons';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"siteId":512,"department":"Warehouse operations","position":"Shift Manager","title":"Ms","forename":"Priya","surname":"Raman","telephone1":"0161 872 4415","telephone2":"0161 872 4416","mobile":"07700 900318","email":"p.raman@example-northgate.co.uk","fax":"0161 872 4417","notes":"Best reached on the early shift, 06:00-14:00.","canUseClientApp":true,"sector":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api2.recruso.co.uk/v1/clients/1/sites/1/contact-persons \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "siteId": 512, "department": "Warehouse operations", "position": "Shift Manager", "title": "Ms", "forename": "Priya", "surname": "Raman", "telephone1": "0161 872 4415", "telephone2": "0161 872 4416", "mobile": "07700 900318", "email": "p.raman@example-northgate.co.uk", "fax": "0161 872 4417", "notes": "Best reached on the early shift, 06:00-14:00.", "canUseClientApp": true, "sector": "example" }'Adds a contact person to one of your own agency’s sites. Site contacts are who the agency deals with day to day — they raise the work, and activities and cost-centre links hang off them.
Only forename is required. siteId in the body must match the siteId in the route, otherwise the request returns 400.
title is a title name, not an id — one of the values published by the titles vocabulary. An unrecognised name returns 400 listing the accepted values.
Contacts are not name-checked for uniqueness: a site can hold two contacts with the same name. The site must belong to the client named in the route, otherwise 404. On success the response carries the new contactPersonId and a Location header pointing at GetSiteContactPersonById.
Access. Requires a client-credentials access token. Tokens issued through the interactive user login are rejected.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The clientId path parameter
The siteId path parameter
Request Bodyrequired
Section titled “Request Bodyrequired”The contact person to add to a site.
object
The site the contact belongs to. Must match the site id in the route.
Example
512The contact’s department at the site. Up to 100 characters.
Example
Warehouse operationsThe contact’s job title at the site. Up to 100 characters.
Example
Shift ManagerThe contact’s title, given by name rather than by id. Must be one of the names published by the titles vocabulary; an unrecognised name returns 400 listing the accepted values.
Example
MsThe contact’s forename. Required, up to 50 characters.
Example
PriyaThe contact’s surname. Up to 50 characters.
Example
RamanThe contact’s main telephone number. Up to 50 characters.
Example
0161 872 4415A second telephone number for the contact. Up to 50 characters.
Example
0161 872 4416The contact’s mobile number. Up to 50 characters.
Example
07700 900318The contact’s email address. Up to 150 characters.
Example
p.raman@example-northgate.co.ukThe contact’s fax number. Up to 50 characters.
Example
0161 872 4417Free-text notes about the contact. Up to 550 characters.
Example
Best reached on the early shift, 06:00-14:00.Whether this contact may sign in to the client portal.
Example
trueResponses
Section titled “Responses”Created
A newly created site contact.
object
The contact’s unique identifier, assigned by Recruso.
The site this contact belongs to.
The contact’s department at the site. Up to 100 characters.
The contact’s job title at the site. Up to 100 characters.
The contact’s title, given by name rather than by id. Must be one of the names published by the titles vocabulary; an unrecognised name returns 400 listing the accepted values.
The contact’s forename. Required, up to 50 characters.
The contact’s surname. Up to 50 characters.
The contact’s main telephone number. Up to 50 characters.
A second telephone number for the contact. Up to 50 characters.
The contact’s mobile number. Up to 50 characters.
The contact’s email address. Up to 150 characters.
The contact’s fax number. Up to 50 characters.
Free-text notes about the contact. Up to 550 characters.
Whether the contact is deleted. Always false here — a deleted contact returns 404 from every read operation until it is restored.
The Recruso user who created the contact.
When the contact was created, in UK local time (GMT/BST) — not UTC.
The Recruso user who last updated the contact. Null until the contact is first updated.
When the contact was last updated, in UK local time (GMT/BST) — not UTC. Null until the contact is first updated.
Whether this contact may sign in to the client portal.
Example
{ "contactPersonId": 88, "siteId": 512, "department": "Warehouse operations", "position": "Shift Manager", "title": "Ms", "forename": "Priya", "surname": "Raman", "telephone1": "0161 872 4415", "telephone2": "0161 872 4416", "mobile": "07700 900318", "email": "p.raman@example-northgate.co.uk", "fax": "0161 872 4417", "notes": "Best reached on the early shift, 06:00-14:00.", "isDeleted": false, "createdBy": 12, "createdOn": "2026-03-09T11:24:07", "modifiedBy": 12, "modifiedOn": "2026-06-11T14:02:09", "canUseClientApp": true}Bad Request
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Unauthorized
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Forbidden
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Not Found
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}
