Get a rotation's activity
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Get, RequestUri = new Uri("https://api.roundrobinbot.eu/v1/rotations/example/activity?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z"), Headers = { { "Authorization", "Bearer <token>" }, },};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "net/http" "io")
func main() {
url := "https://api.roundrobinbot.eu/v1/rotations/example/activity?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder() .url("https://api.roundrobinbot.eu/v1/rotations/example/activity?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z") .get() .addHeader("Authorization", "Bearer <token>") .build();
Response response = client.newCall(request).execute();import axios from 'axios';
const options = { method: 'GET', url: 'https://api.roundrobinbot.eu/v1/rotations/example/activity', params: {from: '2026-04-15T12:00:00Z', to: '2026-04-15T12:00:00Z'}, headers: {Authorization: 'Bearer <token>'}};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.roundrobinbot.eu/v1/rotations/example/activity?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”OK
The envelope every /v1 collection comes back in.
object
One change somebody made to a rotation: what changed, when, and who did it.
object
The entry’s own id, stable forever, so a client polling this can tell a repeat from a new one.
When it happened.
What was done, as a stable code: created, enabled, disabled, name-changed, owners-changed, members-reordered, list-added, coverage-changed, schedule-changed, timezone-changed, channels-changed, rotated-manually, duty-set-explicitly, duty-cleared, external-schedule-connected and others in the same shape.
Which parts of a composite setting moved, for the verbs that audit several fields as one entry (the cadence, the covered week, the channel topic). Empty on every other verb.
What the rotation was called at the time, which is the only name a deleted rotation has left.
Who did it.
object
What kind of principal acted: user for a person, bot for the Slack app acting on somebody’s behalf, mcpClient for an AI client, apiKey for a team API key, or system when nothing with a caller behind it did: the cadence coming round, a scheduled job, a clean-up.
The Slack user id of the person behind the change, where there is one. Absent on system, and on anything the product did without a person asking.
The id of the API key that made the change, set only when type is apiKey.
Examplegenerated
{ "data": [ { "id": "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
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"}