The Mosart Remote Control Service (RCS) provides a REST API for controlling Viz Mosart rundowns using REST.
Copy RemoteDispatcherServiceConfig.xml inC:\Program Files (x86)\Mosart Medialab\Mosart Server\ConfigurationFiles
to
C:\ProgramData\Mosart Medialab\ConfigurationFiles.
Open the copied file in a text editor.
Locate the <item> element with name="RestApiKey"
Set value an arbitrary string that you choose.
All API clients must include this key to authorize their requests.
For example:
Save the file.
From Windows Services, restart the Mosart Remote Control Service.
Make an HTTP request to http://[machine-name]:55167.
For example:
If you want to enable accessing the API via HTTPS, you need to edit the RemoteDispatcherServiceConfig.xml changing the following items:
/Backup setup
If you want your API calls to go to the currently active Mosart Server, you can route them through Mosart Web Applications.
Install them on a separate machine and configure connection to both main and backup. Then use the endpoint http://[web-apps-machine-name]:65152 and Web Apps will act as a proxy and redirect the call to the active server.
Mosart Server ships with an interactive Documentation page, available after enabling the Mosart REST API.
interactively: Swagger UI (local instance).
Below is a description of the various Endpoints available through this API. They are grouped according to category:
GET /api/v1/assets/graphics?onair={true|false} (since v5.13.0)
.
The optional onair parameter filters to only graphics currently on air. (since v5.14.0)
POST /api/v1/assets/graphics/{}/take (since v5.13.0)
POST /api/v1/assets/graphics/{mosartItemId}/take-out (since v5.13.0)
Take or take out an overlay graphics by its Mosart ID.
mosartItemId: The . id property from /graphics.
POST /api/v1/assets/graphics/take?name={name} (since v5.13.0)
POST /api/v1/assets/graphics/take-out?name={name} (since v5.13.0)
Take or take out an overlay graphics by its name.
name: The slug of the graphic. This is the name visible in the Viz Mosart GUI. slug property from /graphics.
POST /api/v1/assets/template/{}/take?target={program/preview}insert={true/false} (since v5.14.0)
Take a story item (“filled” template) from a rundown by its ID into which target (Preview or Program). For target Preview, an insert option governs whether the template shall be inserted in front of, or overwrite, an existing manual item.
When an optional parameter is not used, defaults are program (for target) and false for insert.
PATCH /api/v1/devices/{} (since v5.13.0)
Sets the standby status of the specified device type.
type: audio, audio-player, fullscreen-graphics, generic-rest, gpi, graphics, lights, loudness, robotic-camera, router, subtitling, switcher, video, video-wall, virtual-set, weather.-graphics, generic-rest, graphics, robotic-camera
Example of the request body
PATCH /api/v1/devices/{}/{id} (since v5.13.0)
Sets the standby state for a single device/controller identified by one ID.
type: fullscreen-graphics, generic-rest, graphics, robotic-camera
id: The device (or controller) ID. For graphics, this can be the engine ID or the destination.
Example of the request body
PATCH /api/v1/devices/{type}/{} (since v5.13.0)
Sets standby for a device addressed by controller and device IDs.
type: robotic-camera
controllerId: The controller ID
deviceId: The device ID.
Example of the request body
GET /api/v1/media/search?name={clip-name} (since v5.11.0)
Searches the video servers configured in Mosart and returns a list of clips.
clip-name: The word you want to search for.
GET /api/v1/settings/nrcs (since v5.13.0)
Get the details of how Mosart is configured to connect to the NRCS.
PATCH /api/v1/settings/nrcs (since v5.13.0)
Change the NRCS connection in Mosart. Can we used to switch between different NRCS systems. I.e. using Showmaker for certain shows.
GET /build (since v5.1.0)
GET /api/v1/build (since v5.4.0)
Information about the version of the Mosart Server.
GET /status (since v5.4.0)
GET /api/v1/status (since v5.4.0)
Get the status of the Mosart server.
Example of returned status
GET /api/v1/timeline (since v5.13.0)
Get timeline information including timeline status, current story, next story, current item and next item.
PATCH /api/v1/timeline/{target} (since v5.14.0)
Content-Type: application/json
Updates fields on the current item in preview or in program. Used to change the crosspoint assignment for a newsroom tag field.
GET /api/v1/rundown (since v5.13.0)
Get the currently loaded rundown.
Example of response.
{
"id": "a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0",
"name": "graphics",
"stories": [
{
"id": "ba6f770a-1962-47ec-bdbe-54b81b3c25a6",
"insertId": "NSID-1",
"storyDuration": 10,
"storyPlannedDuration": 0,
"storyBackTime": -1,
"pageNumber": "",
"slug": "Untitled",
"accessories": [
{
"id": "100_a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0_ba6f770a-1962-47ec-bdbe-54b81b3c25a6_5",
"type": "100",
"variant": "MANUAL-DSK",
"slug": "Mosart=L|M|O",
"storyId": "ba6f770a-1962-47ec-bdbe-54b81b3c25a6",
"status": 1,
"graphicType": "MANUAL",
"handlerName": "DSK",
"description": "(DSK) - Mosart=L|M|O",
"hasContent": true,
"in": 0,
"duration": 5,
"plannedDuration": 5,
"actualDuration": 0,
"fields": [
{
"name": "graphics_description",
"value": "Mosart=L|M|O",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "graphics_id",
"value": "13059",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "tc_dur",
"value": "00:05",
"default": "00:00",
"fieldType": "TIMECODE",
"keyList": null,
"inputMask": "mm:ss",
"servers": null
},
{
"name": "continuecount",
"value": "-2",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "payloaduri",
"value": "/dataelements/13059/payload",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "thumbnailuri",
"value": "/dataelements/13059/thumb",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "elementuri",
"value": "/dataelements/13059",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "editoruri",
"value": "/app/pilotedge/pilotedge.html?dataelement=13059&edit=",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
}
],
"hasTemplate": null,
"emptyTemplate": null,
"templatePlaceHolders": null
}
],
"items": [
{
"subItems": [
{
"id": "100_a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0_ba6f770a-1962-47ec-bdbe-54b81b3c25a6_2",
"type": "100",
"variant": "TIMECODE-DSK",
"slug": "Mosart=L|-00:00|00:29",
"storyId": "ba6f770a-1962-47ec-bdbe-54b81b3c25a6",
"status": 0,
"graphicType": "",
"handlerName": "DSK",
"description": "(DSK) - Mosart=L|-00:00|00:29",
"hasContent": true,
"in": 0,
"duration": 29,
"plannedDuration": 29,
"actualDuration": 0,
"fields": [
{
"name": "graphics_description",
"value": "Mosart=L|-00:00|00:29",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "graphics_id",
"value": "23757",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "tc_dur",
"value": "00:29",
"default": "00:00",
"fieldType": "TIMECODE",
"keyList": null,
"inputMask": "mm:ss",
"servers": null
},
{
"name": "continuecount",
"value": "0",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "payloaduri",
"value": "/dataelements/23757/payload",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "thumbnailuri",
"value": "/dataelements/23757/thumb",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "elementuri",
"value": "/dataelements/23757",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "editoruri",
"value": "/app/pilotedge/pilotedge.html?dataelement=23757&edit=",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "tc_in",
"value": "00:00",
"default": "00:00",
"fieldType": "TIMECODE",
"keyList": null,
"inputMask": "mm:ss",
"servers": null
}
],
"hasTemplate": null,
"emptyTemplate": null,
"templatePlaceHolders": null
}
],
"transition": {
"type": "Mix",
"rateOrIndex": 0
},
"bodyText": "",
"id": "0_a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0_ba6f770a-1962-47ec-bdbe-54b81b3c25a6_CAMERA1_1",
"type": "0",
"variant": "1",
"slug": "CAMERA 1",
"storyId": "ba6f770a-1962-47ec-bdbe-54b81b3c25a6",
"status": 0,
"graphicType": null,
"handlerName": null,
"description": null,
"hasContent": true,
"in": 0,
"duration": 5,
"plannedDuration": 5,
"actualDuration": 0,
"fields": [
{
"name": "xpoint",
"value": "CAM1",
"default": "CAM1",
"fieldType": "LIST",
"keyList": "mixerinputs",
"inputMask": null,
"servers": null
},
{
"name": "sr_create_story_clip",
"value": "False",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "sr_publish_story_clip",
"value": "False",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "sr_story_clip_id",
"value": "",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "sr_story_clip_slug",
"value": "",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
}
],
"hasTemplate": true,
"emptyTemplate": false,
"templatePlaceHolders": null
},
{
"subItems": [],
"transition": {
"type": "Mix",
"rateOrIndex": 0
},
"bodyText": "",
"id": "4_a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0_ba6f770a-1962-47ec-bdbe-54b81b3c25a6_Mosart=F_4",
"type": "4",
"variant": "FULL",
"slug": "Mosart=F",
"storyId": "ba6f770a-1962-47ec-bdbe-54b81b3c25a6",
"status": 0,
"graphicType": null,
"handlerName": "FULL",
"description": null,
"hasContent": true,
"in": 5,
"duration": 5,
"plannedDuration": 5,
"actualDuration": 0,
"fields": [
{
"name": "scenename",
"value": null,
"default": "",
"fieldType": "TEXT",
"keyList": "",
"inputMask": null,
"servers": null
},
{
"name": "text",
"value": null,
"default": "",
"fieldType": "TEXT",
"keyList": "",
"inputMask": null,
"servers": null
},
{
"name": "graphics_description",
"value": "Mosart=F",
"default": "",
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "graphics_id",
"value": "23661",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "tc_dur",
"value": "00:05",
"default": "00:00",
"fieldType": "TIMECODE",
"keyList": null,
"inputMask": "mm:ss",
"servers": null
},
{
"name": "continuecount",
"value": "1",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "payloaduri",
"value": "/dataelements/23661/payload",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "thumbnailuri",
"value": "/dataelements/23661/thumb",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "elementuri",
"value": "/dataelements/23661",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "editoruri",
"value": "/app/pilotedge/pilotedge.html?dataelement=23661&edit=",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
}
],
"hasTemplate": true,
"emptyTemplate": false,
"templatePlaceHolders": null
}
]
},
{
"id": "ca6a3127-48a6-42e9-814b-a79ccafa8a12",
"insertId": "ba6f770a-1962-47ec-bdbe-54b81b3c25a6",
"storyDuration": 5,
"storyPlannedDuration": 0,
"storyBackTime": -1,
"pageNumber": "",
"slug": "Untitled",
"accessories": [],
"items": [
{
"subItems": [
{
"id": "100_a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0_ca6a3127-48a6-42e9-814b-a79ccafa8a12_2",
"type": "100",
"variant": "DSK",
"slug": "A test/Mosart=L",
"storyId": "ca6a3127-48a6-42e9-814b-a79ccafa8a12",
"status": 0,
"graphicType": "",
"handlerName": "DSK",
"description": "(DSK) - A test/Mosart=L",
"hasContent": true,
"in": 0,
"duration": 5,
"plannedDuration": 5,
"actualDuration": 0,
"fields": [
{
"name": "graphics_description",
"value": "A test/Mosart=L",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "graphics_id",
"value": "14617",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "tc_dur",
"value": "00:05",
"default": "00:00",
"fieldType": "TIMECODE",
"keyList": null,
"inputMask": "mm:ss",
"servers": null
},
{
"name": "continuecount",
"value": "-2",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "payloaduri",
"value": "/dataelements/14617/payload",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "thumbnailuri",
"value": "/dataelements/14617/thumb",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "elementuri",
"value": "/dataelements/14617",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "editoruri",
"value": "/app/pilotedge/pilotedge.html?dataelement=14617&edit=",
"default": null,
"fieldType": "TEXT",
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "tc_in",
"value": "00:00",
"default": "00:00",
"fieldType": "TIMECODE",
"keyList": null,
"inputMask": "mm:ss",
"servers": null
}
],
"hasTemplate": null,
"emptyTemplate": null,
"templatePlaceHolders": null
}
],
"transition": {
"type": "Mix",
"rateOrIndex": 0
},
"bodyText": "",
"id": "0_a1e1e678-4adc-420a-bdbb-8aaa76dc6cf0_ca6a3127-48a6-42e9-814b-a79ccafa8a12_CAMERA1_1",
"type": "0",
"variant": "1",
"slug": "CAMERA 1",
"storyId": "ca6a3127-48a6-42e9-814b-a79ccafa8a12",
"status": 0,
"graphicType": null,
"handlerName": null,
"description": null,
"hasContent": true,
"in": 0,
"duration": 5,
"plannedDuration": 5,
"actualDuration": 0,
"fields": [
{
"name": "xpoint",
"value": "CAM1",
"default": "CAM1",
"fieldType": "LIST",
"keyList": "mixerinputs",
"inputMask": null,
"servers": null
},
{
"name": "sr_create_story_clip",
"value": "False",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "sr_publish_story_clip",
"value": "False",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "sr_story_clip_id",
"value": "",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
},
{
"name": "sr_story_clip_slug",
"value": "",
"default": null,
"fieldType": null,
"keyList": null,
"inputMask": null,
"servers": null
}
],
"hasTemplate": true,
"emptyTemplate": false,
"templatePlaceHolders": null
}
]
}
]
}
GET /api/v1/command/open-rundown?id={rundown-id} (s)
Load a specific rundown in Mosart.
rundowm-id: Either the name or IDof the rundown. Both can be found from the response of /rundown.
GET /api/v1/command/reload (since v5.4.0)
Reload the current rundown.
GET /api/v1/command/start-continue (since v5.4.0)
Take the next item in the rundown. Has some optional URL parameters:
option: , Mix, Wipe, Effect
rate: The transition rate for mix/wipe (integer)
effect: The effect number (integer)
delay: The delay in milliseconds for continue (integer)
GET /api/v1/command/skip-next (since v5.10.0)
Skip the next item in the rundown.
GET /api/v1/command/un-skip-next (since v5.10.0)
Unskip last skipped item in the rundown.
GET /api/v1/command/skip-next-sub-item (since v5.10.0)
Skip the next sub item in the rundown.
GET /api/v1/command/un-skip-next-sub-item (since v5.10.0)
Unskip last skipped sub item in the rundown.
GET /api/v1/command/start-from-top (since v5.4.0)
Restart the rundown from the first story.
GET /api/v1/command/set-as-next?storyid={story-id} (since v5.10.0)
Set story as next.
GET /api/v1/command/rehearsal-mode?state={state} (since v5.4.0)
Enable/disable/toggle Rehearsal mode.
state: true = enable, false = disable, no parameter = toggle.
GET /api/v1/command/template?type={template-type}&variant={variant}&bus={preview|program}&insert={true|false} (since v5.4.0)
GET /api/v1/command/template?type=Camera&variant=CAM1
This will cut the Camera template variant CAM1 directly to Program.
GET /api/v1/command/template?type=Camera&variant=CAM1&bus=PREVIEW
This will put the Camera template variant CAM1 into Preview, replacing any manual item already in Preview.
GET /api/v1/command/template?type=Camera&variant=CAM1&bus=PREVIEW&insert=true
This will put the Camera template variant CAM1 into Preview, inserted in front of the item currently in Preview, not overwriting any manual item in Preview.
GET /api/v1/command/directtake?number={number} (since v5.4.0)
Trigger a given DirectTake template. You must provide the template number.
GET /api/v1/command/controlcommand/{command}?params… (since v5.10.0)
Here is a list of the control commands supported by the API along with the parameters the command takes.
Control command | Parameters () |
|---|
start_from_top | |
switch_rehearsal_mode | Action=TOGGLE | ACTIVATE | DEACTIVATE If no Action parameter is passed, it will DEACTIVATE. |
autotake | Action= | DEACTIVATE | TOGGLE If no Action parameter is passed, it will TOGGLE |
play_story | Story Name= |
videowallmode | MixEffect=string |
release_background | CueOnly=TRUE | FALSE |
| Render=string Action=CONTINUE | TAKE_MANUAL_OUT | TAKE_ALL_OUT | | PRETAKE_NEXT | CLEAR | MACRO | TAKE_NAMED_OVERLAY Parameter=string Value=string |
directtake | Template=number |
| |
| Action=START_STATUS | STOP_STATUS Parameter=string |
| |
e | Message=string |
| Target=SELECTED | ONAIR | PREVIEW Handlers=string TakeOutMethod=AUTOMATIC | MANUAL storyid=string |
| |
| Action=RemotePanelFunctions Parameter=string |
switch_graphics_mirroring | Action=TOGGLE | ACTIVATE | DE-ACTIVATE |
enable_graphics_mirroring | Target=BOTH | OVERLAY | FULLSCREEN Action=TRUE | FALSE |
switch_genlock_mode | Action=TOGGLE | ACTIVATE | DEACTIVATE |
| Action=INIT | PRESET_STYLE | GOTO_PREV_PRESET PresetName=string Transition=CUT | TAKE |
autotrans | MixEffect=PP | PROGRAM | ME1 | ME2 | ME3 Transitionrate=string |
video_server_goto | ServerChannel=ONAIR | PREVIEW frame=number |
dve | Direction=FORWARD | FWD | REVERSE | REV | BACKWARD |
| Engine=string Action=CONTINUE | MACRO Parameter=string |
| Action=FADE_MANUAL | FADE_OUT_KEEPS | FREEZE_AUDIO | SET_LEVEL_2_PREVIEW | SET_LEVEL_2_ONAIR | FADE_DOWN_ALL_MAINS | FADE_DOWN_SECONDARY_AUDIO | FADE_UP_LAST_MAINS | FADE_UP_SECONDARY_AUDIO Faderate=number |
| Scene=number |
sequence | Action=START | STOP | LOOP | STOPLOOP |
take_server_to_program | MixEffect=PP | PROGRAM | ME1 | ME2 | ME3 Transitionrate=number |
video_port | Action=PLAY_PAUSE | STOP | CUE | RECUE | SET_LOOP | PLAY_TAIL | CUE_ VideoPort=string Parameter=string |
| VideoPort: string |
| Action=PLAY | CONTINUE | GOTO_FIRST |
graphicsprofile | Name=string |
studiosetup | Name=string |
set_aux_crosspoint | Bus=string CrossPoint=string |
set_crosspoint | MixEffect=PP | PROGRAM | ME1 | ME2 | ME3 | ME4 Bus=A | B | C | D | KEY1 | KEY2 | KEY3 | KEY4 | KEY5 | KEY6 CrossPoint=string |
transition_type | TransitionType=MIX |EF Default | Toggle | Cut | None Value=number |
record | Command=PREPARE | START | STOP | STOP_AND_D| DELETE | GETSOM ClipName=string Name=string Group=string Recorder=string
reClipNamePattern=TRUE | FALSE |
device_property | For audio mixer device properties: Parameter1=AUDIO Parameter2=string The key of the property you want to set. Parameter3=string The value of the property you want to set. For camera control device properties (format depending on robotic camera system
gory=string Speed=string |
set_videoserver_salvo | Salvo=string |
switch_videoserver_mirroring | |
reset_overunder | |
item_update_fields | Rather use the Remote Control API command "Update source item in preview or program". For description of this command, see the entry for ITEM_UPDATE_FIELDS in Control Commands in Templates | Command Values and Parameters. |