Skip to content

List clients with their sites

GET
/v1/clients/with-sites
curl --request GET \
--url https://api2.recruso.co.uk/v1/clients/with-sites \
--header 'Authorization: <Authorization>'

Returns a paged list of the live clients in your own agency, each with its sites embedded. This is the call to make when mirroring the client and site structure into another system: one request gives you both levels instead of a ListSites call per client.

As with ListClients, only clients under the branches the Recruso user behind your API app can access are returned.

Paging applies to clients, not sites — a page of 25 carries 25 clients and all of their sites. The client entries carry more fields than ListClients, including the invoice address block.

Filtering, sorting and paging behave exactly as in ListClients: clientName is a case-insensitive partial match, branchId an exact match, and clientStatusType a status name that returns 400 when unrecognised. 25 per page by default, capped at 100.

Archived sites are excluded, so the site list mirrors what ListSites returns for each client. A client with no active sites still appears, with an empty sites array.

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

pageNumber

Page number (1-based). Defaults to 1.

integer format: int32

Page number (1-based). Defaults to 1.

pageSize

Number of records per page. Defaults to 25, capped at 100.

integer format: int32

Number of records per page. Defaults to 25, capped at 100.

clientName

Optional case-insensitive partial match on ClientName.

string
nullable

Optional case-insensitive partial match on ClientName.

branchId

Optional exact match on BranchId.

integer format: int16
nullable

Optional exact match on BranchId.

clientStatusType

Optional client status type name filter (e.g. “Current”, “Dormant”). Resolved to ID internally via tblClientStatusTypes.

string
nullable

Optional client status type name filter (e.g. “Current”, “Dormant”). Resolved to ID internally via tblClientStatusTypes.

sortColumn

Column to sort by. Accepted values: clientname, createdon, modifiedon, town, postcode. Defaults to clientname.

string
nullable

Column to sort by. Accepted values: clientname, createdon, modifiedon, town, postcode. Defaults to clientname.

sortOrder

Sort direction: “asc” (default) or “desc”.

string
nullable

Sort direction: “asc” (default) or “desc”.

OK

Media typeapplication/json
object
data
Array<object>

A Client with its associated Sites for the “Clients with Sites” view.

object
clientId

The client’s unique identifier, assigned by Recruso.

integer format: int32
clientName

The client’s registered or trading name. Required, up to 100 characters.

string
userId

The Recruso user the client is assigned to. Set to the user behind your API app when the client is created.

integer format: int16
nullable
createdDate

When the client record was created, in UK local time (GMT/BST). A legacy column carrying the same value as createdOn.

string format: date-time
nullable
branchId

The branch the client is managed under. Must be a branch the Recruso user behind your API app can access.

integer format: int16
mediaSourceId

The recruitment source the client came from, as an id from your agency’s Recruitment sources lookup.

integer format: int16
nullable
tobReference

Your reference for the client’s signed terms of business.

string
nullable
tobIssueDate

The date the client’s terms of business were issued.

string format: date-time
nullable
tobExpiryDate

The date the client’s terms of business expire.

string format: date-time
nullable
companyRegNumber

The client’s company registration number. Required, up to 20 characters.

string
nullable
vatYn

Whether the client is VAT registered. When true, vatRegNumber is required.

boolean
nullable
vatRegNumber

The client’s VAT registration number. Required when vatYn is true.

string
nullable
terms

The payment terms agreed with the client, as free text. Required, up to 50 characters.

string
nullable
clientInvoiceType

The invoice type, given by name rather than by id. Must be one of the names published by the client invoice types vocabulary; an unrecognised name returns 400 listing the accepted values.

string
nullable
website

The client’s website.

string
nullable
createdBy

The Recruso user who created the client.

integer format: int16
nullable
createdOn

When the client was created, in UK local time (GMT/BST) — not UTC.

string format: date-time
nullable
modifiedBy

The Recruso user who last updated the client. Null until the client is first updated.

integer format: int16
nullable
modifiedOn

When the client was last updated, in UK local time (GMT/BST) — not UTC. Null until the client is first updated.

string format: date-time
nullable
address1

First line of the client’s trading address. Required, up to 100 characters.

string
nullable
address2

Second line of the client’s trading address.

string
nullable
town

Town or city of the client’s trading address. Required, up to 50 characters.

string
nullable
county

County of the client’s trading address. Required, up to 50 characters.

string
nullable
country

Country of the client’s trading address. Required, up to 50 characters.

string
nullable
postCode

Postcode of the client’s trading address. Required, up to 15 characters.

string
nullable
telephone1

The client’s main telephone number.

string
nullable
telephone2

A second telephone number for the client.

string
nullable
fax

The client’s fax number.

string
nullable
email

The client’s main email address.

string
nullable
invoiceAddress1

First line of the address invoices are sent to, when it differs from the trading address.

string
nullable
invoiceAddress2

Second line of the invoice address.

string
nullable
invoiceTown

Town or city of the invoice address.

string
nullable
invoiceCounty

County of the invoice address.

string
nullable
invoiceCountry

Country of the invoice address.

string
nullable
invoicePostCode

Postcode of the invoice address.

string
nullable
invoiceEmail

The email address invoices are sent to.

string
nullable
invoiceTo

The name invoices are addressed to. Required, up to 50 characters.

string
nullable
orderNumberRequired

Whether a purchase order number must be supplied before the client can be invoiced.

boolean
nullable
dni
boolean
nullable
loggingHoursId

The logging hours that apply to this client, as an id from your agency’s Logging hours lookup.

integer format: int16
nullable
receivingHoursId

The receiving hours that apply to this client, as an id from your agency’s Receiving hours lookup.

integer format: int16
nullable
specialInvoiceInstructions

Free-text instructions to apply when invoicing the client. Up to 550 characters.

string
nullable
dateSentToSage

When the client was sent to Sage, in UK local time (GMT/BST).

string format: date-time
nullable
sentToSageBy

The Recruso user who sent the client to Sage.

integer format: int16
nullable
sageAccountNumber

The client’s account number in Sage. Up to 10 characters.

string
nullable
lineOfBusiness

The client’s line of business. Required, up to 100 characters.

string
nullable
isFactoredClient

Whether the client’s invoices are handled by an invoice factoring provider.

boolean
nullable
factorNo

The client’s reference with the invoice factoring provider. Up to 15 characters.

string
nullable
creditCheckedOrCleared

Whether the client has been credit checked or cleared for credit.

boolean
nullable
clientBankCode
string
nullable
sites

The client’s active sites. Archived sites are excluded, so this is empty for a client whose sites have all been archived.

Array<object>

Lightweight Site DTO nested inside ClientWithSitesDto. Mirrors the existing SiteDto from Sites/List but is scoped to this slice.

object
siteId

The site’s unique identifier, assigned by Recruso.

integer format: int32
clientId

The client this site belongs to.

integer format: int32
siteName

The site’s name. Required, up to 70 characters, and unique among the client’s active sites.

string
memo

Free-text notes about the site. Up to 550 characters.

string
nullable
gre
number format: float
nullable
grn
number format: float
nullable
address1

First line of the site address. Up to 150 characters.

string
nullable
address2

Second line of the site address. Up to 50 characters.

string
nullable
town

Town or city of the site address.

string
nullable
county

County of the site address.

string
nullable
country

Country of the site address.

string
nullable
postCode

Postcode of the site address.

string
nullable
telephone1

The site’s main telephone number.

string
nullable
telephone2

A second telephone number for the site.

string
nullable
fax

The site’s fax number.

string
nullable
email

The site’s main email address.

string
nullable
invoiceMethodId

How invoices for this site are delivered, as an id from the invoice methods vocabulary.

integer format: int16
nullable
branchId

The branch this site is managed under.

integer format: int16
nullable
timesheetEmail

The address timesheets for this site are sent to.

string
nullable
createdBy

The Recruso user who created the site.

integer format: int16
nullable
createdOn

When the site was created, in UK local time (GMT/BST) — not UTC.

string format: date-time
nullable
modifiedBy

The Recruso user who last updated the site. Null until the site is first updated.

integer format: int16
nullable
modifiedOn

When the site was last updated, in UK local time (GMT/BST) — not UTC. Null until the site is first updated.

string format: date-time
nullable
siteArchivedBy

The Recruso user who archived the site. Null while the site is active.

integer format: int16
nullable
siteArchivedOn

When the site was archived, in UK local time (GMT/BST). Null while the site is active.

string format: date-time
nullable
siteRestoredBy

The Recruso user who last restored the site. Null if the site has never been archived.

integer format: int16
nullable
siteRestoredOn

When the site was last restored, in UK local time (GMT/BST). Null if the site has never been archived.

string format: date-time
nullable
pageNumber
integer format: int32
pageSize
integer format: int32
totalCount
integer format: int32
pageCount
integer format: int32
nextPage
string
nullable
previousPage
string
nullable
Example
{
"data": [
{
"clientId": 137,
"clientName": "Northgate Foods Ltd",
"userId": 12,
"createdDate": "2026-03-04T09:12:44",
"branchId": 4,
"mediaSourceId": 6,
"tobReference": "TOB-2026-0142",
"tobIssueDate": "2026-02-18",
"tobExpiryDate": "2028-02-17",
"companyRegNumber": "08841972",
"vatYn": true,
"vatRegNumber": "GB 412 8853 07",
"terms": "30 days from invoice date",
"website": "https://www.example-northgate.co.uk",
"createdBy": 12,
"createdOn": "2026-03-04T09:12:44",
"modifiedBy": 12,
"modifiedOn": "2026-06-11T14:02:09",
"address1": "Northgate House",
"address2": "22 Ashburton Road West",
"town": "Trafford Park",
"county": "Greater Manchester",
"country": "United Kingdom",
"postCode": "M17 1RU",
"telephone1": "0161 872 4400",
"telephone2": "0161 872 4401",
"fax": "0161 872 4402",
"email": "operations@example-northgate.co.uk",
"invoiceAddress1": "Finance Shared Services",
"invoiceAddress2": "PO Box 194",
"invoiceTown": "Manchester",
"invoiceCounty": "Greater Manchester",
"invoiceCountry": "United Kingdom",
"invoicePostCode": "M60 2LA",
"invoiceEmail": "accountspayable@example-northgate.co.uk",
"invoiceTo": "Accounts Payable",
"orderNumberRequired": true,
"loggingHoursId": 2,
"receivingHoursId": 3,
"specialInvoiceInstructions": "One consolidated invoice per site, weekly.",
"dateSentToSage": "2026-03-05T08:30:00",
"sentToSageBy": 12,
"sageAccountNumber": "NOR001",
"lineOfBusiness": "Food manufacturing",
"isFactoredClient": false,
"factorNo": "F-20551",
"creditCheckedOrCleared": true,
"sites": [
{
"siteId": 512,
"clientId": 137,
"siteName": "Trafford Park DC",
"memo": "Gatehouse sign-in required; ask for the shift supervisor.",
"address1": "Northgate House",
"address2": "22 Ashburton Road West",
"town": "Trafford Park",
"county": "Greater Manchester",
"country": "United Kingdom",
"postCode": "M17 1RU",
"telephone1": "0161 872 4410",
"telephone2": "0161 872 4411",
"fax": "0161 872 4412",
"email": "trafford@example-northgate.co.uk",
"invoiceMethodId": 1,
"branchId": 4,
"timesheetEmail": "timesheets@example-northgate.co.uk",
"createdBy": 12,
"createdOn": "2026-03-06T10:41:12",
"modifiedBy": 12,
"modifiedOn": "2026-06-11T14:02:09",
"siteArchivedBy": 12,
"siteArchivedOn": "2026-07-01T16:20:00",
"siteRestoredBy": 12,
"siteRestoredOn": "2026-07-14T09:05:00"
}
]
}
]
}

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