Skip to content

Log an activity against a site contact

POST
/v1/clients/{clientId}/sites/{siteId}/contact-persons/{contactPersonId}/activities
curl --request POST \
--url https://api2.recruso.co.uk/v1/clients/1/sites/1/contact-persons/1/activities \
--header 'Authorization: <Authorization>' \
--header 'Content-Type: application/json' \
--data '{ "activityDate": "2026-05-14T10:30:00", "description": "Called to confirm cover for the bank holiday weekend.", "actionTaken": "Agreed 6 pickers for Saturday, confirmed by email.", "nextCallDate": "2026-05-21T09:00:00", "lastVisited": "2026-05-02T13:15:00", "activityTypeId": 4, "eventId": "cal-2026-05-14-0930" }'

Records an activity — a call, a visit, an email — against a contact at one of your own agency’s sites. Activities are the contact history behind a site: what was discussed, what was agreed, and when to follow up.

Only activityDate is required. activityTypeId, when given, must belong to your agency’s Activity types lookup; one that does not returns 400.

eventId is accepted here and cannot be changed afterwards — it is absent from UpdateSiteActivity. Set it on creation or not at all.

The client, site and contact in the route must line up — the site must belong to the client and the contact to the site — and any mismatch returns 404 rather than 403.

On success the response carries the new siteActivityId and a Location header pointing at GetSiteActivityById.

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

siteId
required
integer format: int32

The siteId path parameter

contactPersonId
required
integer format: int32

The contactPersonId path parameter

Media typeapplication/json

The activity to log against a site contact.

object
activityDate

When the activity took place, in UK local time (GMT/BST). Required.

string format: date-time
Example
2026-05-14T10:30:00
description

What the activity was — the call, visit or email being recorded.

string
nullable
Example
Called to confirm cover for the bank holiday weekend.
actionTaken

What was done or agreed as a result.

string
nullable
Example
Agreed 6 pickers for Saturday, confirmed by email.
nextCallDate

When to follow up next, in UK local time (GMT/BST).

string format: date-time
nullable
Example
2026-05-21T09:00:00
lastVisited

When the site was last visited, in UK local time (GMT/BST).

string format: date-time
nullable
Example
2026-05-02T13:15:00
activityTypeId

The kind of activity, as an id from your agency’s Activity types lookup. An id that does not belong to your agency returns 400.

integer format: int16
nullable
Example
4
eventId

Your own reference for the activity, such as a calendar event id. Set when the activity is created and cannot be changed afterwards.

string
nullable
Example
cal-2026-05-14-0930

Created

Media typeapplication/json

A newly logged site activity.

object
siteActivityId

The activity’s unique identifier, assigned by Recruso.

integer format: int32
siteContactPersonId

The site contact this activity was logged against.

integer format: int32
activityDate

When the activity took place, in UK local time (GMT/BST). Required.

string format: date-time
description

What the activity was — the call, visit or email being recorded.

string
nullable
actionTaken

What was done or agreed as a result.

string
nullable
activityTypeId

The kind of activity, as an id from your agency’s Activity types lookup. An id that does not belong to your agency returns 400.

integer format: int16
nullable
eventId

Your own reference for the activity, such as a calendar event id. Set when the activity is created and cannot be changed afterwards.

string
nullable
Example
{
"siteActivityId": 7420,
"siteContactPersonId": 88,
"activityDate": "2026-05-14T10:30:00",
"description": "Called to confirm cover for the bank holiday weekend.",
"actionTaken": "Agreed 6 pickers for Saturday, confirmed by email.",
"activityTypeId": 4,
"eventId": "cal-2026-05-14-0930"
}

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