Skip to content

Get personal shifts

GET
/v1/users/{userId}/shifts
curl --request GET \
--url https://api.roundrobinbot.eu/v1/users/example/shifts \
--header 'Authorization: Bearer <token>'

Requires read:oncall. Returns recorded and projected shifts for a Slack user in the API key’s workspace. Request a range of at most 31 days. Workspaces with more than 1000 rotations or callers with more than 100 accessible rotations are refused. Read every page and inspect each rotation’s completion and projection limitations before concluding that no duty exists. Each rotation has its own asOfUtc. Pages are fresh reads and do not share a fixed snapshot.

userId
required
string

The Slack user identifier.

from
string format: date-time

Required inclusive range start as an RFC 3339 timestamp.

to
string format: date-time

Required exclusive range end, after from and at most 31 days later.

page
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/

Page number, starting at 1. Defaults to 1. Values beyond the last page return the last page; an empty result returns page 1.

pageSize
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/

Rows per page, from 1 to 100. Defaults to 25.

OK

Media typeapplication/json

A page of a person’s recorded and projected shifts across accessible rotations.

object
rotations

Read states for all accessible rotations examined for this request, including rotations with no matching shifts.

Array<object>

A rotation’s read state and limits on its projected shifts.

object
failureReason

projectionUnavailable when the rotation could not be projected on this page.

null | string
rotationId

The Round Robin rotation identifier.

string
asOfUtc

The instant separating this rotation’s history from projected duty. Other rotations may use different instants.

string format: date-time
completion

incomplete when future external duty is requested without a successful provider read; otherwise complete. Check projection limitations separately.

string
providerReach

read, unreachable or notAsked for the external schedule provider. This is not availability-source freshness.

string
projectionLimitations

randomFutureUnknown for unknown randomized future duty; manualFutureContingent for duty dependent on a manual change.

Array<string>
nominalProvenance

unsupported: this response does not identify the nominal holder beneath a substitution.

string
availabilityFreshness

unknown: this response does not establish the freshness of availability sources.

string
data
Array<object>

A recorded or projected duty interval for the requested person.

object
actions
One of:
null
rotationId

The Round Robin rotation identifier.

string
rotationName

The rotation name.

string
cellId

The cell identifier, when available.

null | string
laneId

The lane identifier, when available.

null | string
windowId

The coverage-window identifier, when available.

null | string
displayRowId

The Plan display-row identifier, when available.

null | string
start

The inclusive interval start. Clip the displayed interval to the requested range.

string format: date-time
end

The exclusive interval end. Null means no end is known.

null | string format: date-time
userId

The Slack user identifier of the person assigned to this interval.

string
source

history for recorded duty or projected for projected duty.

string
page
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
pageSize
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
totalItems
integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
totalPages
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
Examplegenerated
{
"rotations": [
{
"failureReason": "example",
"rotationId": "example",
"asOfUtc": "2026-04-15T12:00:00Z",
"completion": "example",
"providerReach": "example",
"projectionLimitations": [
"example"
]
}
],
"nominalProvenance": "example",
"availabilityFreshness": "example",
"data": [
{
"actions": {
"canRequestCover": true,
"canChangeAssignment": true
},
"rotationId": "example",
"rotationName": "example",
"cellId": "example",
"laneId": "example",
"windowId": "example",
"displayRowId": "example",
"start": "2026-04-15T12:00:00Z",
"end": "2026-04-15T12:00:00Z",
"userId": "example",
"source": "example"
}
],
"page": 1,
"pageSize": 1,
"totalItems": 1,
"totalPages": 1
}