Preview a duty arrangement
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.roundrobinbot.eu/v1/rotations/example/duty-arrangements/preview"), Headers = { { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"acknowledgedConflictIds\": [ \"example\" ], \"cellId\": \"example\", \"expectedRevision\": 1, \"from\": \"2026-04-15T12:00:00Z\", \"operationId\": \"example\", \"to\": \"2026-04-15T12:00:00Z\", \"turnSelection\": { \"from\": \"2026-04-15T12:00:00Z\", \"kind\": \"example\", \"to\": \"2026-04-15T12:00:00Z\" }, \"userId\": \"example\" }") { Headers = { ContentType = new MediaTypeHeaderValue("application/*+json") } }};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.roundrobinbot.eu/v1/rotations/example/duty-arrangements/preview"
payload := strings.NewReader("{ \"acknowledgedConflictIds\": [ \"example\" ], \"cellId\": \"example\", \"expectedRevision\": 1, \"from\": \"2026-04-15T12:00:00Z\", \"operationId\": \"example\", \"to\": \"2026-04-15T12:00:00Z\", \"turnSelection\": { \"from\": \"2026-04-15T12:00:00Z\", \"kind\": \"example\", \"to\": \"2026-04-15T12:00:00Z\" }, \"userId\": \"example\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/*+json")
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();
MediaType mediaType = MediaType.parse("application/*+json");RequestBody body = RequestBody.create(mediaType, "{ \"acknowledgedConflictIds\": [ \"example\" ], \"cellId\": \"example\", \"expectedRevision\": 1, \"from\": \"2026-04-15T12:00:00Z\", \"operationId\": \"example\", \"to\": \"2026-04-15T12:00:00Z\", \"turnSelection\": { \"from\": \"2026-04-15T12:00:00Z\", \"kind\": \"example\", \"to\": \"2026-04-15T12:00:00Z\" }, \"userId\": \"example\" }");Request request = new Request.Builder() .url("https://api.roundrobinbot.eu/v1/rotations/example/duty-arrangements/preview") .post(body) .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/*+json") .build();
Response response = client.newCall(request).execute();import axios from 'axios';
const options = { method: 'POST', url: 'https://api.roundrobinbot.eu/v1/rotations/example/duty-arrangements/preview', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/*+json'}, data: '{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example" }'};
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/preview';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/*+json'}, body: '{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example" }'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.roundrobinbot.eu/v1/rotations/example/duty-arrangements/preview \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/*+json' \ --data '{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example" }'Requires read:oncall and permission to assign duty for the selected cell. No duty changes. Send UTC terms and the editor’s acknowledged conflict identifiers. Inspect canCommit and conflicts. For a change, include arrangementId and its current expectedRevision. The write rechecks authority, terms and conflicts; preview does not reserve the interval.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The rotation identifier.
Query Parameters
Section titled “Query Parameters”The existing direct assignment when previewing a change; omit for a new assignment.
Request Bodyrequired
Section titled “Request Bodyrequired”Request cancellation.
Terms for a direct assignment or its preview.
object
Conflict identifiers explicitly acknowledged by the rotation editor.
The rotation cell receiving the assignment.
The current arrangement revision when changing an existing assignment or previewing that change.
The requested inclusive UTC start. A current assignment begins at the actual transition time.
A nonempty operation identifier of at most 128 characters, required for writes. Reuse it only to retry the same write.
The exclusive UTC end, later than both the start and the write’s transition time.
Optional turn selection returned by the assignment preview.
object
The inclusive UTC start of the original turn, including any part already served.
fullTurn or remainingTurn, as returned by the preview.
The exclusive UTC end of the original turn.
The Slack user identifier of a person in the cell’s lane.
Examplegenerated
{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example"}Terms for a direct assignment or its preview.
object
Conflict identifiers explicitly acknowledged by the rotation editor.
The rotation cell receiving the assignment.
The current arrangement revision when changing an existing assignment or previewing that change.
The requested inclusive UTC start. A current assignment begins at the actual transition time.
A nonempty operation identifier of at most 128 characters, required for writes. Reuse it only to retry the same write.
The exclusive UTC end, later than both the start and the write’s transition time.
Optional turn selection returned by the assignment preview.
object
The inclusive UTC start of the original turn, including any part already served.
fullTurn or remainingTurn, as returned by the preview.
The exclusive UTC end of the original turn.
The Slack user identifier of a person in the cell’s lane.
Examplegenerated
{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example"}Terms for a direct assignment or its preview.
object
Conflict identifiers explicitly acknowledged by the rotation editor.
The rotation cell receiving the assignment.
The current arrangement revision when changing an existing assignment or previewing that change.
The requested inclusive UTC start. A current assignment begins at the actual transition time.
A nonempty operation identifier of at most 128 characters, required for writes. Reuse it only to retry the same write.
The exclusive UTC end, later than both the start and the write’s transition time.
Optional turn selection returned by the assignment preview.
object
The inclusive UTC start of the original turn, including any part already served.
fullTurn or remainingTurn, as returned by the preview.
The exclusive UTC end of the original turn.
The Slack user identifier of a person in the cell’s lane.
Examplegenerated
{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example"}Terms for a direct assignment or its preview.
object
Conflict identifiers explicitly acknowledged by the rotation editor.
The rotation cell receiving the assignment.
The current arrangement revision when changing an existing assignment or previewing that change.
The requested inclusive UTC start. A current assignment begins at the actual transition time.
A nonempty operation identifier of at most 128 characters, required for writes. Reuse it only to retry the same write.
The exclusive UTC end, later than both the start and the write’s transition time.
Optional turn selection returned by the assignment preview.
object
The inclusive UTC start of the original turn, including any part already served.
fullTurn or remainingTurn, as returned by the preview.
The exclusive UTC end of the original turn.
The Slack user identifier of a person in the cell’s lane.
Examplegenerated
{ "acknowledgedConflictIds": [ "example" ], "cellId": "example", "expectedRevision": 1, "from": "2026-04-15T12:00:00Z", "operationId": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }, "userId": "example"}Responses
Section titled “Responses”OK
Conflict evaluation for the proposed terms. A preview does not change duty.
object
Whether every observed conflict permits acknowledgment and has been acknowledged. The write rechecks current state.
Observed conflicts and source uncertainties.
A conflict or an uncertainty affecting the proposed assignment.
object
Whether explicit acknowledgment permits proceeding with this conflict. False means the conflict blocks the write.
The inclusive UTC start of the conflict intersection with the requested interval.
The acknowledgment identifier for this conflict and the previewed terms.
arrangement, manualAvailability, googleCalendar or slackStatus.
The exclusive UTC end of the conflict intersection with the requested interval.
absence, sameCellArrangement or unknownAvailability.
The affected person’s Slack user identifier.
The later of the requested start and preview time. The actual write can begin later.
On a cover acceptance preview only: allowed when the acceptance can be committed from one action, unavailable when the caller cannot accept, conflictReview when conflicts need review first. Null on every other preview.
The requested exclusive UTC end.
The verified full or remaining turn for these terms, or null when the interval does not identify one. Copy this value into the write to record the selection.
object
The inclusive UTC start of the original turn, including any part already served.
fullTurn or remainingTurn.
The exclusive UTC end of the original turn.
Examplegenerated
{ "canCommit": true, "conflicts": [ { "canAcknowledge": true, "from": "2026-04-15T12:00:00Z", "id": "example", "source": "example", "to": "2026-04-15T12:00:00Z", "type": "example", "userId": "example" } ], "effectiveFrom": "2026-04-15T12:00:00Z", "oneClick": "example", "to": "2026-04-15T12:00:00Z", "turnSelection": { "from": "2026-04-15T12:00:00Z", "kind": "example", "to": "2026-04-15T12:00:00Z" }}