> ## Documentation Index
> Fetch the complete documentation index at: https://docs.happyuptime.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Timeline

Project who's on call across a time window with reasons.

# Timeline

The timeline projects who's on call for any future window, with the reason each segment was assigned (override / fixed shift / rotation).

## Get timeline

GET `/oncall/schedules/{schedule_id}/timeline`

ISO 8601 start.

ISO 8601 end. Max range: 90 days.

Restrict to one layer. Omit for all layers.

```bash
curl "https://happyuptime.com/api/v1/oncall/schedules/sch_abc/timeline?from=2026-04-17T00:00:00Z&to=2026-04-24T00:00:00Z" \
  -H "Authorization: Bearer hu_..."
```

```json
{
  "data": [
    {
      "layer_id": "lyr_primary",
      "layer_name": "Primary",
      "segments": [
        {
          "user": { "id": "usr_alice", "name": "Alice", "slack_id": "U01ABCD" },
          "starts_at": "2026-04-17T00:00:00Z",
          "ends_at": "2026-04-17T20:00:00Z",
          "reason": "rotation"
        },
        {
          "user": { "id": "usr_carol", "name": "Carol" },
          "starts_at": "2026-04-17T20:00:00Z",
          "ends_at": "2026-04-17T22:00:00Z",
          "reason": "override",
          "note": "Covering for Alice"
        },
        {
          "user": { "id": "usr_alice", "name": "Alice" },
          "starts_at": "2026-04-17T22:00:00Z",
          "ends_at": "2026-04-22T13:00:00Z",
          "reason": "rotation"
        }
      ]
    }
  ]
}
```

## Reason values

| Reason | Meaning |
| --- | --- |
| `rotation` | Standard rotation (ungated by restriction) |
| `fixed_shift` | Fixed shift assigned this slot |
| `override` | Override active for this window |
| `none` | Layer is unmanned (restriction in effect with no fallback) |

## Use cases

- Render a Gantt-style schedule view
- Validate "is anyone covering 2 AM Saturday?" before going to bed
- Power external integrations (e.g. an internal status board showing tonight's on-call)