List a schedule's shifts over a range
Every layer's turns between from and to, cut to each layer's shift
window (its weekdays and hours), as the calendar shows them. These are
the turns the layers give; overrides are not applied here — list them
with GET /api/v1/schedules/{id}/overrides. Turns are cut at from and
to, and a layer with nobody on it gives none. The range may be at most
62 days.
A schedule that belongs to a team is visible only to callers in that team (and to administrators acting in person); others get 404, as if it did not exist.
Permission (API-key scope): oncall:schedule:read.
Authorization
bearerAuth(oncall:schedule:read)apiKeyHeader(oncall:schedule:read)
Parameters
Path parameters
idstring requiredThe schedule's id.
Query parameters
fromstring (date-time) requiredStart of the range, an RFC 3339 instant.tostring (date-time) requiredEnd of the range, an RFC 3339 instant afterfromand at most 62 days later.
Responses
200
The turns, every layer's together; an empty array when there are none.
dataarray of ScheduleTurn requiredShow ScheduleTurn properties
layer_idstringThe layer giving the turn (previewfor a layer that is not stored yet).user_idstringWho holds the turn; empty in a preview with no members.startstring (date-time)endstring (date-time)
successboolean required
400
from or to is missing or not RFC 3339, or to is not after from or is more than 62 days later (VALIDATION_FAILED).
errorobject requiredcodestring requiredmessagestring requiredrequest_idstringThe request'sX-Request-ID. Quote it to support.detailsarray of object requiredfieldstringmessagestring
401
No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
403
The key lacks the scope this endpoint needs (FORBIDDEN).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
404
No schedule with this id in your organization (NOT_FOUND).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
429
Too many requests (RATE_LIMITED). Wait Retry-After seconds.
Retry-AfterintegerSeconds to wait.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
500
Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
Example request
curl -X GET 'https://evohub.io/api/v1/schedules/5b1c7d2e-8f3a-4b9c-a0d1-e2f3a4b5c6d7/shifts?from=2026-10-19T00%3A00%3A00Z&to=2026-11-16T00%3A00%3A00Z' \
-H 'Authorization: Bearer <TOKEN>'
