Act on air
Take a frame/<id> to air (goFrame, with a transition), cue one so the take is instant (next), set a control (setControl), replace a table’s rows (setData), or move a playlist source on (skip). streamId may be left out when one stream plays the scene. Checked first, in this order: the body (422 INVALID_INPUT: an unknown op, a field the op doesn’t take, a missing target or controlId, a transition that isn’t one of its kinds or has an ms that isn’t a whole number ≥ 0 or a field besides kind and ms, a streamId that isn’t a string; the op from before frames, goScene, is refused naming goFrame), then against the published version (422 INVALID_INPUT: a frame/<id>, control, table or playlist source it doesn’t have, or a control value of the wrong type — a toggle takes true or false; 409 NOT_PUBLISHED when nothing is published); only then 409 SCENE_OFFLINE when nothing plays it.
A 504 SCENE_TIMEOUT may or may not have been applied. Send an Idempotency-Key (one per action, kept by you): a repeat with the same key and body is applied at most once — its first answer is replayed (Idempotency-Replayed: true), and after a SCENE_TIMEOUT the retry reaches the stream with the same key, which applies it only if the first did not arrive. Without a key, do not retry an action that is not idempotent (skip, a button) blind: read GET /scenes//live first.
Authorizations
A Streamloop API key (sl_…). It carries no workspace: send X-Workspace-Id too (400 WORKSPACE_REQUIRED otherwise).
Headers
Retry safely: the key (per caller, workspace, method and path) is taken before the request runs, and its first answer is replayed for 24 hours, with Idempotency-Replayed: true — a repeat sent while the first still runs waits for it. The same key with a different body is 422 IDEMPOTENCY_KEY_REUSED. A 5xx is not kept: the retry runs.
200The workspace to act in. Required with an API key; otherwise the session's own.
Path Parameters
The scene's id (scn_…)
^scn_Body
The same names as the MCP's control_scene. Checked before anything else (422 INVALID_INPUT for an unknown op, a field the op doesn't take, a missing target, controlId or sourceId, a value of the wrong type): goFrame { target, transition? }, next { target? }, setControl { controlId, value? }, setData { sourceId, rows }, skip { sourceId? }; any of them with streamId.
goFrame, setControl, setData, next, skip Which stream (stream_…), when more than one plays the scene
goFrame (required), next: which one to take or cue, by the id in its path frame/<id>; next without it clears the cue
goFrame: a kind, or { kind, ms } (default: the frame's own)
cut, fade, slide, wipe, dip setControl: the control's id (as in control/<id>)
setControl: its new value (a toggle true or false, a select one of its options; none for a button)
setData: the table's id (as in source/data/<id>); skip: the playlist source's id (default: the first)
setData: the table's rows
Response
Applied
The response is of type object.