Schedule a weekly recurring broadcast
Available in: UI · API
Use this how-to when the same Live stream must go on air on a fixed cadence — every weekday at the same time, every Sunday morning, every day. The Scheduler owns the calendar; the Live stream definition owns the bound Channel, Encoding and Destination.
When to use this
When a Live stream's start and stop must be automated against a calendar (daily news, weekend matches, every-weekday bulletin). For ad-hoc one-off starts use the Start flow in On air.
Prerequisites
- A Live stream that has already been configured (Channel, Encoding and Destination bound). The Schedule references it by id.
- A user with the Operator or System Administrator role. Schedule CRUD is available to both.
The Schedule entity
Schedule carries:
| Field | Notes |
|---|---|
name | Display name. |
livestreamId | Numeric id of the bound Live stream. |
start | ISO-8601 start timestamp. |
end | ISO-8601 end timestamp. |
recurrence.type | One of none, daily, weekly, workdays, weekend. |
enabled | Disable the Schedule without deleting it. |
encoderGroupId | Optional encoder group / Device group the Schedule will run against. |
The API rejects starts earlier than 10 minutes in the past; the UI date picker greys out earlier dates accordingly.
Via UI
Navigation: Scheduler.
Open the Scheduler
Click Scheduler in the left rail, then press New Schedule.
Fill in the dialog
The dialog is grouped into three blocks:
- Information — Name, Live Stream, Enabled.
- Date and Time — Start, End.
- Recurrence — one of None, Daily, Weekly, Workdays, Weekend.
For a Monday-to-Friday news bulletin at 21:00, pick Workdays. Workdays repeats every weekday (Monday through Friday).
Submit
The Schedule is persisted. From the next start time it dispatches the bound Live stream automatically; the Live stream's row on On air shows the calendar icon next to the encoder name with the tooltip "Started by Schedule".
Via API
| Action | Method + path | operationId |
|---|---|---|
| Create a Schedule | POST /c21apiv2/schedules | addSchedule |
| Read a Schedule | GET /c21apiv2/schedules/{scheduleId} | getScheduleById |
| Update | PUT /c21apiv2/schedules/{scheduleId} | updateSchedule |
| Enable / Disable | POST /c21apiv2/schedules/{scheduleId}/{enable|disable} | enableSchedule, disableSchedule |
| Delete | DELETE /c21apiv2/schedules/{scheduleId} | deleteSchedule |
| Expand to occurrences | GET /c21apiv2/schedules/{scheduleId}/occurrences?from=…&to=… | getScheduleOccurrences |
curl -X POST "https://<your-host>/c21apiv2/schedules" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Idempotency-Key: <unique-key>" \
-H "Content-Type: application/json" \
-d '{
"name": "news-weekday-21h",
"livestreamId": <id>,
"start": "2026-05-18T21:00:00Z",
"end": "2026-05-18T21:30:00Z",
"recurrence": { "type": "workdays" },
"enabled": true
}'
Idempotency-Key is honoured on addSchedule; retries do not create duplicate Schedules.
Recording
Recording is enabled by attaching a Record-type Destination to one of the Destination groups bound to the Live stream — there is no separate recording flag on the Schedule entity. The Schedule simply starts and stops the Live stream; whatever Destinations are bound at start time, including any Record Destination, run alongside the broadcast. See Recordings.
Verify
- The Schedule appears in the Scheduler list with the expected recurrence label.
getScheduleByIdreturns the Schedule withenabled = trueand the expectedrecurrence.type.getScheduleOccurrencesover the next week returns one occurrence per weekday.- At the first occurrence's
start, the bound Live stream's row on On air flips to Live.
FAQ
recurrence.type = workdays). Weekly means "every 7 days from start" (the same weekday Start falls on), not "every working day"; that distinction is documented in the API contract.end.end, or stop the Live stream from the UI. The UI's Stop on a scheduled broadcast presents the additional dialog line "The associated Schedule will be deleted." — confirming there also removes the Schedule. To stop without losing the Schedule, edit the Schedule's end to now via updateSchedule.Protect a Live stream with multi-DRM
Register a DRM provider and attach it to a Publishing — through the UI, through the API, or both.
Cut a clip in the Editor and send it to MediaCopilot
Open a Recording in the Recordings Editor, cut a clip, and deliver it to MediaCopilot for transcription, subtitling and clip generation.