Stream Music Schedule

Replace music schedule

PUT
https://api.tunio.ai/v1/stream-music-schedule/{stream_id}

Replaces every music slot of the stream with the given set, atomically. Every playlist and jingle bundle must belong to the caller's library, and no two slots of the set may overlap on the same day (the rule of the single-slot endpoint, applied to the whole set). With dry_run=true nothing is written: the response says whether the set is valid, lists the conflicts and the diff against the current schedule. With dry_run=false a conflicting set is refused with 409 and nothing is written. A valid set is applied after the stream's current schedule (music and content) is saved as a private schedule profile, returned as snapshot_profile_id; apply it with POST /v1/schedule-profiles/{profile_id}/apply to roll back. The last 20 automatic snapshots per stream are kept. Slots that do not change keep their slot_id.

Path parameters

NameTypeDescription
stream_idRequiredstringStream ID

Request body

Complete new schedule

NameTypeDescription
dry_runboolean
DryRun validates and reports the diff without writing anything.
slotsarray
Slots is the complete new schedule; an empty array clears it.
[item]Requiredobject
-
Request example
01{
02 "dry_run": true,
03 "slots": [
04 {
05 "day_of_week": 1,
06 "duration_min": 180,
07 "end_time": "12:00",
08 "jingle_playlist_id": "string",
09 "jingles_tracks_interval": 2,
10 "let_static_finish": false,
11 "playlist_id": "6f1d1d4c-8c47-4b9f-a1f4-7c1f0b2f9a11",
12 "start_at": "2026-10-12T09:00:00+03:00",
13 "start_time": "09:00",
14 "transition": "string",
15 "volume": 1
16 }
17 ]
18}

Responses

NameTypeDescription
conflictsarray
Conflicts lists every overlapping pair of requested slots.
[item]Requiredobject
-
diffobject
Diff compares the request with the current schedule.
addedarray
Added lists the slots that are not in the current schedule.
removedarray
Removed lists the current slots that the request does not keep.
unchanged_countinteger
UnchangedCount is how many current slots stay as they are (and keep their slot_id).
dry_runboolean
DryRun echoes the request.
messagestring
Message is schedule_conflict on a 409.
snapshot_profile_idstring
SnapshotProfileID is the private schedule profile holding the stream's schedule (music and content) as it was before this write; apply it with POST /v1/schedule-profiles/{profile_id}/apply to roll back. Null on dry runs.
successboolean
-
validboolean
Valid is false when slots of the request overlap each other.
NameTypeDescription
messagestring
Message contains human readable error details.
successboolean
Success is always false for error payloads.
NameTypeDescription
messagestring
Message contains human readable error details.
successboolean
Success is always false for error payloads.
NameTypeDescription
messagestring
Message contains human readable error details.
successboolean
Success is always false for error payloads.
NameTypeDescription
messagestring
Message contains human readable error details.
successboolean
Success is always false for error payloads.
NameTypeDescription
conflictsarray
Conflicts lists every overlapping pair of requested slots.
[item]Requiredobject
-
diffobject
Diff compares the request with the current schedule.
addedarray
Added lists the slots that are not in the current schedule.
removedarray
Removed lists the current slots that the request does not keep.
unchanged_countinteger
UnchangedCount is how many current slots stay as they are (and keep their slot_id).
dry_runboolean
DryRun echoes the request.
messagestring
Message is schedule_conflict on a 409.
snapshot_profile_idstring
SnapshotProfileID is the private schedule profile holding the stream's schedule (music and content) as it was before this write; apply it with POST /v1/schedule-profiles/{profile_id}/apply to roll back. Null on dry runs.
successboolean
-
validboolean
Valid is false when slots of the request overlap each other.
NameTypeDescription
messagestring
Message contains human readable error details.
successboolean
Success is always false for error payloads.