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.
bashcurl "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)