---
title: "Get a schedule's timeline"
method: GET
path: "/on-call-schedules/{schedule}/timeline"
tags: ["On-call"]
---

# Get a schedule's timeline

`GET /on-call-schedules/{schedule}/timeline`

## Request

- Base URL: `https://api.spectate.net/v1`
- URL: `https://api.spectate.net/v1/on-call-schedules/{schedule}/timeline`
- Auth: HTTP bearer

Who is on call between `from` and `to` (default: now and 14 days later; at most 62 days):
each layer's shifts, the overrides, and the result, which is who actually gets paged.

## Path parameters

- `schedule` string, uuid, required

## Query parameters

- `from` string, date-time
- `to` string, date-time

## Response `200`

The timeline of the window.

- OnCallTimeline: Who is on call over a window: each layer's shifts, the overrides, and the result.
  - `from` string, date-time, required: Start of the window
  - `to` string, date-time, required: End of the window
  - `timezone` string, required: The schedule's time zone
  - `layers` OnCallTimelineLayer[], required: Each layer's shifts, top layer first
    - `rotation_id` string, uuid, required: Rotation ID
    - `name` string, required: Rotation name
    - `position` integer, required: Layer order; 0 is the top layer
    - `shifts` OnCallShift[], required: The layer's own shifts, before overrides and higher layers
      - `member` MemberReference, required: A member of the team.
        - `id` string, uuid, required: Member (user) ID
        - `name` string, required: Name
        - `email` string, email, required: Email address
      - `starts_at` string, date-time, required: When the shift starts
      - `ends_at` string, date-time, required: When it ends
      - `source` 'rotation' | 'override', required: Where an on-call shift comes from. | | |---| | `rotation` <br/> A rotation layer's turn. | | `override` <br/> An override someone added. |
      - `rotation_id` string, uuid, nullable, required: The rotation layer, for rotation shifts
      - `override_id` string, uuid, nullable, required: The override, for override shifts
  - `overrides` OnCallShift[], required: Override shifts
    - `member` MemberReference, required: A member of the team.
      - `id` string, uuid, required: Member (user) ID
      - `name` string, required: Name
      - `email` string, email, required: Email address
    - `starts_at` string, date-time, required: When the shift starts
    - `ends_at` string, date-time, required: When it ends
    - `source` 'rotation' | 'override', required: Where an on-call shift comes from. | | |---| | `rotation` <br/> A rotation layer's turn. | | `override` <br/> An override someone added. |
    - `rotation_id` string, uuid, nullable, required: The rotation layer, for rotation shifts
    - `override_id` string, uuid, nullable, required: The override, for override shifts
  - `final` OnCallShift[], required: Who actually gets paged when: overrides first, then the highest layer. Gaps are absent
    - `member` MemberReference, required: A member of the team.
      - `id` string, uuid, required: Member (user) ID
      - `name` string, required: Name
      - `email` string, email, required: Email address
    - `starts_at` string, date-time, required: When the shift starts
    - `ends_at` string, date-time, required: When it ends
    - `source` 'rotation' | 'override', required: Where an on-call shift comes from. | | |---| | `rotation` <br/> A rotation layer's turn. | | `override` <br/> An override someone added. |
    - `rotation_id` string, uuid, nullable, required: The rotation layer, for rotation shifts
    - `override_id` string, uuid, nullable, required: The override, for override shifts

## Other responses

- `401`: `UNAUTHENTICATED`: no token was sent. `INVALID_TOKEN`: the token is unknown or revoked. `TOKEN_EXPIRED`: the token has expired.
- `403`: `FORBIDDEN`: the token lacks an ability this endpoint requires (listed in `details.required_abilities`). `TEAM_PENDING_DELETION`: the team is scheduled for deletion. `TEAM_SUSPENDED`: Spectate suspended the team.
- `404`: `RESOURCE_NOT_FOUND`: there is no such resource in this team.
- `422`: `VALIDATION_FAILED`: the request is invalid; `details.errors` lists the fields.
- `429`: `RATE_LIMITED`: too many requests for this token. Wait for the number of seconds in `Retry-After`.

---

[API](https://skmtc.dev/spectate/apis/spectate-api.md) - [All operations](https://skmtc.dev/spectate/apis/spectate-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spectate/apis/spectate-api/revisions/9b1a233997de?raw)
