Object Management
GET /api/objects/list
Lists all named objects (inputs, operators, targets, etc.) in the project.
Parameters:
| Parameter | Required | Description |
|---|---|---|
type |
No | Filter by object type name (e.g. MediaFileInput, SrtTarget). Also matches base type names. |
Response: 200 OK — JSON array:
[
{ "Id": "guid", "Name": "Media File 1", "Type": "MediaFileInput" },
{ "Id": "guid", "Name": "SRT Output", "Type": "SrtTarget" }
]
GET /api/objects/getproperties
Returns the properties of a named object as a flat JSON object: {"PropName": value, ...}. Includes every public-getter property that is not marked [InternalProperty] (so public get / private set runtime status fields and computed read-only properties are part of the response). Property values that reference a NamedModel-derived object are rendered as a compact identity stub { "Id": ..., "Name": ..., "Type": ... } to keep the response bounded.
Meta fields (prefixed with _ to avoid collision with real property names):
_lockedProperties— array of property names currently locked at runtime viaLockProperty(). Distinct from the static[EditorLocked]attribute reported by/api/types/schema(which is fixed per type); runtime locks change over the project's lifetime. Clients should OR this list withisEditorLockedfrom the schema when deciding whether to enable editing for a property. Always emitted (empty array when nothing's locked).
Parameters:
| Parameter | Required | Description |
|---|---|---|
targetname |
Yes | Name of the object |
Response:
200 OK— JSON object with all public properties400 Bad Request— Missing parameter, multiple matches, or object not found
GET /api/setproperty
Sets a property value on a component.
Selecting the target object (exactly one of these is required):
| Parameter | Description |
|---|---|
target |
Object GUID |
targetname |
Object name (must be unique) |
targettype |
Object type name (must be unique) |
Additional parameters:
| Parameter | Required | Description |
|---|---|---|
property |
Yes | Property name (case-sensitive) |
value |
Yes | New property value |
Example:
/api/setproperty?target=00000000-0000-0000-0000-000000000001&property=Volume&value=0.8
/api/setproperty?targetname=Media File 1&property=Volume&value=0.5
Collection properties: most properties take a scalar value (number, string, enum name, true/false). A few hold a collection that has no scalar text form — currently PreFaderSendConfigurations (an input's pre-fader audio sends). For these, pass value as the JSON array returned by /api/getproperty?...&format=json (URL-encode it). Each element carries Active, TargetAudioStripId, InputAudioSendType (0 = pre-fader, 1 = post-fader) and the per-channel routing TargetCh01..TargetCh08 (0 = none, 1..8 = target channel). The four send slots are fixed per input; to clear the sends, send four slots with "Active":false rather than an empty array.
/api/setproperty?target={inputId}&property=PreFaderSendConfigurations&value=[{"Active":true,"TargetAudioStripId":"b2e5afc4-d29f-4f72-b87b-c42045e73054","InputAudioSendType":0,"TargetCh01":1,"TargetCh02":2,"TargetCh03":0,"TargetCh04":0,"TargetCh05":0,"TargetCh06":0,"TargetCh07":0,"TargetCh08":0},{"Active":false,"TargetAudioStripId":"00000000-0000-0000-0000-000000000000","InputAudioSendType":0,"TargetCh01":0,"TargetCh02":0,"TargetCh03":0,"TargetCh04":0,"TargetCh05":0,"TargetCh06":0,"TargetCh07":0,"TargetCh08":0},...]
Response:
200 OK—Set property {name} on {type} with id {id} to: {value} successfully400 Bad Request— Missing/invalid parameters, target not found, property not found, or conversion error
GET /api/getproperty
Gets a property value from a component.
Selecting the target object (exactly one of these is required):
| Parameter | Description |
|---|---|
target |
Object GUID |
targetname |
Object name (must be unique) |
targettype |
Object type name (must be unique) |
Additional parameters:
| Parameter | Required | Description |
|---|---|---|
property |
Yes | Property name (case-sensitive) |
format |
No | Set to json to receive a structured JSON response |
Example:
/api/getproperty?targetname=Media File 1&property=Volume
/api/getproperty?targetname=Media File 1&property=Volume&format=json
Response (plain):
200 OK—Get property {name} for {type} with id {id} returned: {value}
Response (format=json):
{
"property": "Volume",
"value": "0.8",
"objectId": "guid",
"objectType": "MediaFileInput"
}
The value field is always a string. For dictionary-type properties (e.g. VideoTrackInfo, AudioTrackInfo) and collection-type properties (e.g. PreFaderSendConfigurations), the value is a JSON-serialized string:
{
"property": "VideoTrackInfo",
"value": "{\"VideoCodecId\":99,\"VideoWidth\":1920,\"VideoHeight\":1080,...}",
"objectId": "guid",
"objectType": "MediaFileInput"
}
{
"property": "PreFaderSendConfigurations",
"value": "[{\"Active\":true,\"TargetAudioStripId\":\"b2e5afc4-...\",\"InputAudioSendType\":0,\"TargetCh01\":1,\"TargetCh02\":2,\"TargetCh03\":0,\"TargetCh04\":0,\"TargetCh05\":0,\"TargetCh06\":0,\"TargetCh07\":0,\"TargetCh08\":0},...]",
"objectId": "guid",
"objectType": "TestSignalGeneratorInput"
}
This is the exact shape /api/setproperty accepts back for the same property, so a get → edit → set round-trip is lossless.
GET /api/invokecommand
Invokes a command on a component.
Selecting the target object (exactly one of these is required):
| Parameter | Description |
|---|---|
target |
Object GUID |
targetname |
Object name (must be unique) |
targettype |
Object type name (must be unique) |
Additional parameters:
| Parameter | Required | Description |
|---|---|---|
command |
Yes | Command property name (case-sensitive), e.g. PlayCommand, StopCommand |
Example:
/api/invokecommand?targetname=Media File 1&command=PlayCommand
Response:
200 OK—Invoke {command} on target with id {id} invoked successfully400 Bad Request— Missing parameters, target/command not found, command disabled, or execution error