Get a duty arrangement
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/duty-arrangements/example"), 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/duty-arrangements/example"
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/duty-arrangements/example") .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/duty-arrangements/example', 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/duty-arrangements/example';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/duty-arrangements/example \ --header 'Authorization: Bearer <token>'Requires read:oncall. Returns the arrangement, its current capabilities and the rotation ETag. A cancelled arrangement remains readable by identifier. An arrangement outside this rotation is not found.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The rotation identifier.
The arrangement identifier.
Responses
Section titled “Responses”OK
One arrangement and its current permitted actions.
object
The requested arrangement, including a cancelled arrangement when addressed by identifier.
object
The arrangement identifier.
The rotation identifier.
The rotation cell identifier.
The assigned person’s Slack user identifier.
The inclusive UTC start.
The exclusive UTC end.
The arrangement revision used when changing or ending it.
active or cancelled. An active record can describe an interval that has already ended.
directAssignment, acceptedCover or swapLeg. Direct-assignment writes change or end only directAssignment.
Original duty holders recorded before the first assignment, with completeness for this interval. Later edits retain that original record.
object
Distinct Slack user identifiers in the recorded portion of the arrangement interval.
Whether original duty is known throughout the interval. False includes assignments without an original record.
Original duty segments on detail reads. Null on list reads or when no original record is available.
object
The UTC time when the original duty was evaluated.
The inclusive UTC start of the returned interval.
The exclusive UTC end of the returned interval.
Whether every returned segment is resolved. An extension beyond the original recorded interval is unresolved.
Original holders by interval, including periods with no assignee and unresolved periods.
Effective duty during part of an assignment interval.
object
The inclusive UTC start.
The exclusive UTC end.
Slack user identifiers of the effective holders. An empty list means no assignee only when resolved is true.
Whether the holders or absence of duty are known for this interval.
The recorded full or remaining turn, or null when no verified selection was saved. Use the arrangement’s From and To for the affected interval.
object
fullTurn or remainingTurn.
The inclusive UTC start of the original turn, including any part already served.
The exclusive UTC end of the original turn.
The caller’s current change and end capabilities.
object
Whether the caller can change the direct assignment, subject to write validation.
Whether the caller can end the remaining direct assignment.
A refusal code when the actions are unavailable; otherwise null.
Examplegenerated
{ "arrangement": { "id": "example", "rotationId": "example", "cellId": "example", "userId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "revision": 1, "state": "example", "kind": "example", "origin": { "userIds": [ "example" ], "complete": true }, "originalSnapshot": { "asOfUtc": "2026-04-15T12:00:00Z", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "complete": true, "segments": [ { "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "userIds": [ "example" ], "resolved": true } ] }, "turnSelection": { "kind": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z" } }, "capability": { "canChange": true, "canEnd": true, "reason": "example" }}