Skip to content

Correct one of a worker's availability entries

PUT
/v1/workers/{workerId}/availability/{availabilityId}
curl --request PUT \
--url https://api2.recruso.co.uk/v1/workers/1/availability/1 \
--header 'Authorization: <Authorization>' \
--header 'Content-Type: application/json' \
--data '{ "date": "2026-11-03", "startTime": "07:00:00", "finishTime": "19:00:00", "availabilityStatusId": 3 }'

Corrects an availability entry of a worker in your own agency.

This is a full replacement of the entry’s date, times and status, not a partial merge: a time you omit is cleared, and times are kept to the nearest minute. doNotAccrue and createdOn are kept as they were; modifiedOn is set to the current UK local time.

Both the entry as stored and the entry as sent must fall within the window — no more than 20 days before today and no more than a year after it — and neither may hold a status that affects a worker’s AWR parity: an entry that already does cannot be changed through this API, nor can one whose stored status is not one of your agency’s. Moving an entry to a date that is already full returns 400; correcting it on its own date does not count against the limit. Each of these returns 400.

An entry that belongs to a different worker returns 404, as does a worker in another agency, under a branch the Recruso user behind your API app cannot reach, or deleted under data-protection law — never 403, so existence is never disclosed.

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

workerId
required
integer format: int32

The workerId path parameter

availabilityId
required
integer format: int32

The availabilityId path parameter

Media typeapplication/json

The entry’s new date, times and status: a full replacement, so a time you omit is cleared. The worker and the entry come from the route.

object
date

The day the entry is for, in the UK. Required. No more than 20 days before today and no more than a year after it.

string format: date
nullable
Example
2026-11-03
startTime

When the worker becomes available or unavailable that day, as a time of day, kept to the nearest minute. Optional, and independent of finishTime.

string format: time
nullable
Example
07:00:00
finishTime

When it ends, as a time of day, kept to the nearest minute. Optional. A finish earlier than the start means the entry passes midnight.

string format: time
nullable
Example
19:00:00
availabilityStatusId

One of your agency’s availability statuses. Required. A status that affects a worker’s AWR parity cannot be used here.

integer format: int16
nullable
Example
3

OK

Media typeapplication/json

The entry as corrected.

object
availabilityId

The entry’s identifier.

integer format: int32
workerId

The worker the entry belongs to.

integer format: int32
date

The day the entry is for, in the UK.

string format: date
startTime

When the worker becomes available or unavailable that day, as a time of day; null when not set.

string format: time
nullable
finishTime

When it ends, as a time of day; null when not set. Earlier than startTime means the entry passes midnight.

string format: time
nullable
availabilityStatusId

The status, as an id from your agency’s availability statuses.

integer format: int16
doNotAccrue

Read only. Whether the day stops holiday accrual for the worker: your agency’s setting for the worker’s type when the entry was created, kept as it was then. Null means the entry carries no accrual instruction, which is always so for workers other than limited-company and PSC types.

boolean
nullable
createdOn

When the entry was created, in UK local time; null for entries that predate the column.

string format: date-time
nullable
modifiedOn

When the entry was last changed, in UK local time; null when it never has been.

string format: date-time
nullable
Example
{
"availabilityId": 51207,
"workerId": 4821,
"date": "2026-11-03",
"startTime": "07:00:00",
"finishTime": "19:00:00",
"availabilityStatusId": 3,
"doNotAccrue": false,
"createdOn": "2026-10-20T09:14:52",
"modifiedOn": "2026-10-21T16:02:10"
}

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