Streaming & Targets
Requires: the status / audio-level readouts (
/api/inputs/get/status,/api/targets/get/status,/api/inputs/get/srt,/api/targets/get/srt,/api/targets/get/rtmp,/scene/audio/getaudiolevellastsecond,/api/audio/getpeaklevels) need read (viewer+). The mutating endpoints —/api/target/executecommandand/scene/disablerender— need control (operator+). See each endpoint's note.
GET /api/inputs/get/status
Requires: read (viewer+)
Returns status for all inputs regardless of type. Common fields are always present; type-specific properties are resolved via reflection and omitted when not applicable.
When to use: Reach for this endpoint first — it covers every input type in a single call and is what dashboards and monitoring agents normally poll. Use the type-specific variants (/api/inputs/get/srt, etc.) only when you want a tighter, type-narrowed payload (smaller and with extra fields like Width/Height/StreamTime that don't apply to other input types).
Parameters: None
Response:
200 OK— JSON array (see below)500 Internal Server Error— Exception while gathering input status (e.g. mid-load state). Caller may retry.
[
{
"Id": "guid",
"Name": "SRT Input 1",
"Type": "SrtInput",
"RunningIndicatorState": "Running",
"ExpectedState": "Running",
"WarningActive": false,
"LastWarningMessage": "",
"SourceUrl": null,
"SrtInputStreamState": "Connected",
"ListenerStatus": "Listening"
}
]
Every entry carries two different notions of state, and monitoring needs both. RunningIndicatorState is what the component is actually doing. ExpectedState is what it was last asked to do — Running after somebody started it, Stopped after somebody stopped it, and Unknown until one of them happens, which is also what every component reports while no project is running. A component configured to start with the project counts as asked: the project's autostart records Running on it, the same as an operator would — provided the project had something to act on. One configured to autostart that it could not start at all, such as an input with no source selected, stays Unknown. The pair is what separates a component nobody started from one that was started and has since failed; on its own, neither field can tell those apart.
Some entries carry no ExpectedState field at all: the inputs that are never started or stopped. Nothing commands them, so the only value they could ever report is Unknown, and on an input that can be commanded Unknown means "nobody has started this yet" — a temporary answer, and one worth investigating if it persists. The field is omitted rather than answered, the same as the type-specific fields below.
The inputs with no ExpectedState are:
- Scenes — a scene is an input, which is how scene-in-scene works.
- The ones Composer simply draws: Still image input, Rectangle, Text input.
- The control surfaces that act on other components rather than carrying a feed of their own: Switcher, Batch Processor, Interactive Button.
- The internal audio buses: Audio Channel Strip, and the channel splits generated for an input's extra stereo pairs.
Everything else in the array carries the field. The targets inside a scene carry theirs too; read them from /api/targets/get/status.
Type-specific fields (null when not applicable): SourceUrl, DecklinkInputChannel, SelectedSource, SrtInputStreamState, ListenerStatus, WebPageRendererUrl, MediaPlayerState, PlaybackState, RemoteServerAddress.
GET /api/targets/get/status
Requires: read (viewer+)
Returns status for all targets across all scenes. Common fields are always present; type-specific properties are resolved via reflection and omitted when not applicable.
When to use: This is the general-purpose status endpoint for targets — preferred for cross-type monitoring. Use the type-specific variants (/api/targets/get/srt, etc.) when you only care about one transport family and want extra type-specific fields without reflection-based filtering on the client side.
Parameters: None
Response:
200 OK— JSON array (see below)500 Internal Server Error— Exception while gathering target status (e.g. mid-load state). Caller may retry.
[
{
"Id": "guid",
"Name": "SRT Output 1",
"Type": "SrtTarget",
"RunningIndicatorState": "Running",
"ExpectedState": "Running",
"WarningActive": false,
"LastWarningMessage": "",
"ConnectionStatus": "Connected",
"SrtConnectionString": "srt://host:port"
}
]
ExpectedState is what the target was last explicitly asked to do, against RunningIndicatorState's account of what it is doing; see /api/inputs/get/status above for what the pair is for.
Type-specific fields (null when not applicable): DecklinkOutputChannel, PlaybackState, ConnectionStatus, RunningServerAddress, OutgoingBitRate, SrtConnectionString.
GET /api/inputs/get/srt
Requires: read (viewer+)
Lists all SRT inputs and their status, including both the standard SrtInput and the 16-channel-audio variant SrtInput16ChannelAudio. Inputs of any other type are omitted.
When to use: Use this when you only care about SRT inputs and want extra SRT-specific fields (ListenerAddress, RunningListenerAddress, Width, Height, StreamTime) without filtering the cross-type response client-side. For dashboards covering every input type, prefer /api/inputs/get/status.
Parameters: None
Response:
200 OK— JSON array (see below)500 Internal Server Error— Exception while gathering SRT input status (e.g. mid-load state). Caller may retry.
[
{
"Id": "guid",
"Name": "SRT Input 1",
"ListenerAddress": "srt://:4900",
"RunningListenerAddress": "srt://0.0.0.0:4900",
"SrtInputStreamState": "Connected",
"ListenerStatus": "Listening",
"RunningIndicatorState": "Running",
"ExpectedState": "Running",
"Width": 1920,
"Height": 1080,
"StreamTime": "00:05:30"
}
]
GET /api/targets/get/srt
Requires: read (viewer+)
Lists all SRT targets and their status, including both the standard SrtTarget and the 16-channel-audio variant SrtTarget16ChannelAudio. Targets of any other type are omitted.
When to use: Use this when you only care about SRT outputs and want SRT-specific fields (CurrentSrtEndPoint, UpTimeSinceStart) front-and-centre. For dashboards covering every target type, prefer /api/targets/get/status.
Parameters: None
Response:
200 OK— JSON array (see below)500 Internal Server Error— Exception while gathering SRT target status (e.g. mid-load state). Caller may retry.
[
{
"Id": "guid",
"Name": "SRT Output 1",
"SrtConnectionString": "srt://host:port",
"CurrentSrtEndPoint": "srt://host:port",
"ConnectionStatus": "Connected",
"RunningIndicatorState": "Running",
"ExpectedState": "Running",
"UpTimeSinceStart": "01:23:45"
}
]
GET /api/targets/get/rtmp
Requires: read (viewer+)
Lists all RTMP targets and their status.
Parameters: None
Response:
200 OK— JSON array (see below)500 Internal Server Error— Exception while gathering RTMP target status (e.g. mid-load state). Caller may retry.
[
{
"Id": "guid",
"Name": "RTMP Output 1",
"RunningServerAddress": "rtmp://host/app",
"CurrentRTMPEndPoint": "rtmp://host/app/stream",
"ConnectionStatus": "Connected",
"RunningIndicatorState": "Running",
"ExpectedState": "Running"
}
]
GET /api/target/executecommand
Requires: control (operator+)
Executes a command on a specific target within a scene.
Parameters:
| Parameter | Required | Description |
|---|---|---|
scene |
Yes | Scene name |
target |
Yes | Target name within the scene |
command |
Yes | Command property name (e.g. StartCommand, StopCommand) |
Example:
/api/target/executecommand?scene=Scene 1&target=SRT Output&command=StartCommand
Response:
200 OK—Command '{command}' executed successfully on target '{target}' in scene '{scene}'400 Bad Request— Missing parameters, command not valid403 Forbidden— Command is disabled404 Not Found— Scene, target, or command not found500 Internal Server Error— Execution failed
GET /scene/disablerender
Requires: control (operator+)
Enables or disables rendering for a scene at the engine level. When disabled, the scene's video compositing pipeline is skipped entirely each frame and audio is replaced with silence — any targets attached to that scene receive a black/silent feed but stay running. Render Tuning settings on the scene are bypassed while disabled.
When to use: Toggle a scene off the GPU when you need to free compositing budget without tearing down its targets, or to mute a scene's outputs without disconnecting subscribers. Re-enable to resume normal rendering. Note: this does not stop or unload inputs/operators in the scene — they continue to be ticked.
Parameters:
| Parameter | Required | Description |
|---|---|---|
target |
Yes | Scene name |
value |
Yes | true to disable rendering, false to enable |
Response:
200 OK—Scene updated500 Internal Server Error— Missing parameters or scene not found
GET /scene/audio/getaudiolevellastsecond
Requires: read (viewer+)
Returns audio peak levels from the last second for a scene.
Parameters:
| Parameter | Required | Description |
|---|---|---|
scene |
Yes | Scene name |
Response:
200 OK— JSON array of audio peak level values500 Internal Server Error— Missing parameter or scene not found
GET /api/audio/getpeaklevels
Requires: read (viewer+)
Returns the live per-channel audio peak levels for an input or a scene, measured directly from that object's rendered audio frame.
Unlike the VU-meter properties (StereoPeakLevel, AudioPeakLevels, …), this reading is not gated by the EnableInputAudioProcessing setting. The VU meters are populated inside the per-input audio-processing pass, which is skipped entirely when EnableInputAudioProcessing is false (the meters then read silent). This endpoint instead measures the rendered audio frame that is actually handed downstream to the mixer/targets, so it stays accurate even when per-input processing — and therefore the input trim, gate, EQ, compressor and limiter — is bypassed. Use it to verify the audio that is genuinely flowing, independent of the meter gate.
When to use: Confirming what level a source is contributing regardless of the audio-processing toggle — e.g. proving that disabling EnableInputAudioProcessing bypasses InputTrimDb, or sanity-checking a feed when the VU meters are intentionally off.
Parameters:
| Parameter | Required | Description |
|---|---|---|
name |
Yes | Input or scene name |
Response: 200 OK — JSON object:
{
"Name": "TestSignal",
"IsScene": false,
"EnableInputAudioProcessing": true,
"PeakLevelsLinear": [0.1, 0.1, 0, 0, 0, 0, 0, 0],
"PeakLevelsDb": [-20.0, -20.0, -144, -144, -144, -144, -144, -144],
"StereoPeakLinear": 0.1,
"StereoPeakDb": -20.0
}
PeakLevelsLinear is the per-channel linear peak amplitude (0..1+, 0 = silent), 8 entries. PeakLevelsDb is the same in dBFS (-144 represents silence). StereoPeakLinear/StereoPeakDb are the max across channels 0 and 1.
400 Bad Request— Missingname404 Not Found— No input or scene with that name