Skip to content

Get a rotation's activity

GET
/v1/rotations/{rotationId}/activity
curl --request GET \
--url 'https://api.roundrobinbot.eu/v1/rotations/example/activity?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z' \
--header 'Authorization: Bearer <token>'

What was changed on this rotation inside a window you name, and who changed it: a person by their Slack user id, an API key by its key id, or the product itself when the cadence came round and nobody asked for anything. Each entry names the change as a code (coverage-changed, rotated-manually, owners-changed) and, for the settings that are audited as one entry, which parts of them moved. It does not carry before-and-after values: what a rotation records for those is a rendered string in a format meant for a screen. Read the rotation to see where it stands now. Refused calls are not here. A refusal is evidence about a credential rather than a change to your workspace, and nothing in this feed says what anybody authenticated with. from and to are both required, inclusive at both ends, and no more than 90 days apart. No ETag, as on every collection here.

rotationId
required
string
from
required
string format: date-time
to
required
string format: date-time
page
integer format: int32
pageSize
integer format: int32
sort
string

OK

Media typeapplication/json

The envelope every /v1 collection comes back in.

object
data
Array<object>

A recorded change to a rotation, including its time and actor.

object
id

The stable entry identifier. Use it to deduplicate polling results.

string
dutyChange
One of:
null
at

The recorded time of the operation or change, in UTC.

string format: date-time
verb

The action code, such as created, coverage-changed or duty-change. Treat unrecognized values as opaque.

string
parts

Codes identifying changed parts of a composite setting, such as timezone or week. Empty when no parts are recorded.

Array<string>
rotationName

The rotation name recorded at the time of the change, when available.

null | string
actor

The person, application or system responsible for the change.

object
type

The actor type: user, bot, mcpClient, apiKey or system.

string
userId

The actor’s Slack user identifier, when available. Resolve it through GET /v1/users/{userId}.

null | string
keyId

The API key identifier when Type is apiKey. This is not the key secret.

null | string
page
integer format: int32
pageSize
integer format: int32
totalItems
integer format: int64
totalPages
integer format: int32
Examplegenerated
{
"data": [
{
"id": "example",
"dutyChange": {
"operationId": "example",
"kind": "example",
"action": "example",
"state": "example",
"requestId": "example",
"requesterUserId": "example",
"recipientUserIds": [
"example"
],
"intervals": [
{
"cellId": "example",
"from": "2026-04-15T12:00:00Z",
"to": "2026-04-15T12:00:00Z",
"beforeUserIds": [
"example"
],
"afterUserIds": [
"example"
],
"beforeResolved": true,
"afterResolved": true,
"laneName": "example",
"windowName": "example"
}
],
"acceptedUserId": "example"
},
"at": "2026-04-15T12:00:00Z",
"verb": "example",
"parts": [
"example"
],
"rotationName": "example",
"actor": {
"type": "example",
"userId": "example",
"keyId": "example"
}
}
],
"page": 1,
"pageSize": 1,
"totalItems": 1,
"totalPages": 1
}

Bad Request

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Unauthorized

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Forbidden

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Not Found

Media typeapplication/json
object
type
null | string
title
null | string
status
null | integer format: int32
detail
null | string
instance
null | string
Examplegenerated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}