Call POST /v1/breaks with the studio key.
{
"channelId": "ch_demo",
"type": "cue-out",
"eventId": 42,
"durationMs": 30000,
"placementId": "plc_ms_stream_midroll",
"seq": 4,
"source": "manual",
"splice": { "group": 1842, "wallMs": 1762800000000, "pts": 1620000 },
"decide": true,
"context": { "eventId": 42, "mode": "live", "program": "demo/program.hang", "nowMs": 1762800000000, "breakIndex": 0, "placementId": "plc_ms_stream_midroll", "programInfo": { "codec": "h264", "audioCodec": "aac", "width": 1920, "height": 1080, "frameRate": 30 }, "viewer": { "sessionId": "ses_studio", "country": "US" }, "content": { "kind": "live" } }
}
The response includes cue and, when asked, decision. Publish cue as the next object on @moq/json track ads in <base>/ads.hang. Do not splice media in the relay. The player switches at splice.group. eventId is a number, and scte35 is filled in so it matches the JSON.
A cue-in or cancel uses the same call with "type": "cue-in" or "cancel" and the same breakId.