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:
Main/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 it on a separate machine and configure it to connect to both main and backup. Then you can 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 that will be available after enabling the Mosart REST API.
Explore interactively: Swagger UI (local instance).
GET /api/v1/assets/graphics (since v5.13.0)
Get a list of all the overlay graphics in the rundown.
POST /api/v1/assets/graphics/{mosartItemId}/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 of the overlay graphic you want to take out. 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.
PATCH /api/v1/devices/{type} (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/{type}/{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}/{controllerId}/{deviceId} (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.
GET /api/v1/rundown (since v5.13.0)
Get the rundown that is currently loaded.
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} (since v5.10.0)
Load a specific rundown in Mosart.
rundowm-id: Either the name or id of 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: Default, Continue, 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 the 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 the 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)
Takes the template by its type and variant (name) as well as optionally, which bus (Preview or Program) and, for Preview bus, the insert option (if the template should be inserted in front of or overwrite an existing manual item). If an optional parameter is not used, the defaults are program (for bus) and false for insert.
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 number of the desired template.
GET /api/v1/command/controlcommand/{command}?params… (since v5.10.0)
Trigger a control command in Mosart.
See also
section Keyboard-based Control Command Categories in the Viz Mosart User Guide (Viz Mosart User Interface > Keyboard Shortcuts > Control Command Keys) and
section Command Values and Parameters in the Viz Mosart Administration Guide (Show Design and Template Editor > Working with Templates > Control Commands in Templates).
Here is a list of the control commands supported by the API along with the parameters the command takes.
Control command | Parameters (case sensitive) |
|---|
start_from_top | |
switch_rehearsal_mode | Action=TOGGLE | ACTIVATE | DEACTIVATE If no Action parameter is passed, it will DEACTIVATE. |
autotake | Action=TRUE | ACTIVATE | FALSE | DEACTIVATE | TOGGLE If no Action parameter is passed, it will TOGGLE |
play_story | Story Name=string |
videowallmode | MixEffect=string |
release_background | CueOnly=TRUE | FALSE |
overlay_graphics | Render=string Action=CONTINUE | TAKE_MANUAL_OUT | TAKE_ALL_OUT | TAKE_LAST_OUT | PRETAKE_NEXT | CLEAR | MACRO | TAKE_NAMED_OVERLAY Parameter=string Value=string |
directtake | Template=number |
accessories | |
ncs | Action=START_STATUS | STOP_STATUS Parameter=string |
rundown_ncs_resync | |
user_message | Message=string |
overlay_to_manual | Target=SELECTED | ONAIR | PREVIEW Handlers=string TakeOutMethod=AUTOMATIC | MANUAL storyid=string |
gui | |
asrunlog_event | 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 |
engine_switcher | 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 |
fullscreen_graphics | Engine=string Action=CONTINUE | MACRO Parameter=string |
audio | 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 |
light | 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_TA= VideoPort=string Parameter=string |
get_player_status | VideoPort: string |
weather | 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 Bus=A | B | C | D | KEY1 | KEY2 | KEY3 | KEY4 CrossPoint=string |
transition_type | TransitionType=MIX | WIPE | EFFECT | Default | Toggle | Cut | None Value=number |
record | Command=PREPARE | START | STOP | STOP_AND_DETACH | DELETE | GETSOM ClipName=string PortName=string Group=string Recorder=string Duration=number IgnoreClipNamePattern=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): Anchor=string Category=string Speed=string |
set_videoserver_salvo | Salvo=string |
switch_videoserver_mirroring | |
reset_overunder | |