MovieRecorder REST API

MovieRecorder's REST API allows you to retrieve MovieRecorder's inputs and outputs, control the playback, create clips, etc... If you have additional needs, don't hesitate to reach out to us.
MovieRecorder uses port 8080 by default, but this can be configured in the preferences of MovieRecorder.

This API is meant to be RESTful, then, using different verbs on requests leads to different behaviour on request processing.
In general manner, consider theses verbs to have the described behaviour:

    GET -> Retrieve data of a processable entity.
    POST -> Create a new entity.
    PUT -> Update a specified entity.
    DELETE -> Delete an entity.

When you modify or retrieving data, be sure to handle properly the return code that is returned by the API as it indicates if the operation was successfull or not.
For POST & PUT requests you MUST supply the 'Content-Type' header with value 'application/json'.
Here is a short list common codes returned by the API:

Code Meaning Description
200 OK The request was succesfully processed.
201 Created A new resource has been created on server side.
202 Accepted The resquest was accepted but was not processed.
400 Bad Request The resquest was not well formed.
401 Unauthorized The request needs an access token to proceed. See Authorization
403 Forbidden The token provided doesn't have sufficient privileges/permissions. See Authorization
404Not found The resquest couldn't be processed. The path is not recognized.
422 Unprocessable entity The resquest is well formed but is sementically incorrect

To know if your request succeded; command, update, create and delete requests are followed with this kind of response:

Command response object:

{
  "success" : boolean,
  "error" : string OPTIONAL
}

"success": Indicates if the request was accepted and processed or not by MovieRecorder.
"error": In case of success false, indicates what was wrong when processing the request.


NOTE:
OPTIONAL marked parameters indicates that these parameters can be or not be present in the response object, this is due to internal logics.
However for requests that require a body, like PUT or POST, it means that it can be passed but they are not mandatory.

Authorization

Since controlling your ingest can be sensitive content at a time, an authorization mechanism will be required if you decide to enable it in MovieRecorder's preferences. (General -> HTTP Remote Control -> Require Password).

If this feature is enabled, it implies that you have to send the password defined in MovieRecorder and send the password with each request.

So for example if your password is "1234", you will have to add it to your request:

GET /sources?password=1234

Unique ID, or Index?

Each source, destination or scheduled recording can be addressed using either its unique_id or its index.

Getting information about the MovieRecorder Instance

Get info about MovieRecorder

You can get some info about the application itself

GET /info
Response:
{
  "time_zone": string, eg: "Europe\/Brussels" 
  "computer_name": string, eg: "Admin's computer" 
  "application_name": string, eg: "MovieRecorder" 
  "application_build_number": string, eg: "402090" 
  "mac_os_version": string, eg: "14.1" 
  "application_in_demo": boolean ,
  "application_version": string eg: "4.2" 
}

Working with Destinations

Retrieve an array of available destinations

This request will list all the destinations available, as well as potential warnings that are not related to the source itself.

GET /destinations
Response (array):
[
  {
	"warning_messages" : {
	  "NotRelatedToSource" : [
		{
		  "message" : "DEMO Mode: Make sure you have a valid 'Softron Streaming Pack' license and that it is activated in the application 'Streaming Center'.",
		  "warningMessageType" : 10
		}
	  ]
	},
	"unique_id" : "61DE90E2-0FB4-4129-86DD-1C21D91A7D0A",
	"name" : "Streaming Destination",
	"streaming_preset_unique_id" : "9AF70DED-29E3-4928-8EE9-304760F8CCAA"
  },
  {
	"path" : "\/Users\/pierre\/Movies",
	"preset_display_name" : "Apple ProRes 422",
	"unique_id" : "705F99B0-5F62-4758-BB65-8BF55E520E1F",
	"name" : "QuickTime Destination",
	"warning_messages" : {
	}
  }
]

Retrieve the info of a specific destinations

GET /destinations/{n}/
Response:
{
  "path" : "\/Volumes\/SharedVolume\/MR",
  "preset_display_name" : "ProREs",
  "unique_id" : "122A4FAC-44B5-4547-862C-660EA142BE65",
  "name" : "QuickTime Destination",
  "warning_messages" : {
  }
}

Working with Sources

Like other items, each source can be addressed by unique_id (stable) or by index (its position in the list).
By default, an index is evaluated among enabled sources only. To evaluate indices among all sources (including disabled), append the URL parameter include_disabled_sources=YES.
You may pass this parameter on any request that uses a source index — both when listing sources and on per‑source endpoints (e.g. /sources/{n}, /sources/{n}/info, /sources/{n}/thumbnail, /sources/{n}/destinations, etc.).

Important — be consistent: if you choose to include disabled sources, append include_disabled_sources=YES to every related request that uses an index; otherwise the same index may refer to a different source. Prefer unique_id when possible.

Retrieve an array of sources

GET /sources

Optional parameters:

Response (array):
[
  {
	"recording_name" : "My Recording Name",
	"recording_start_date" : "",
	"is_paused" : false,
	"is_locked" : false,
	"enabled_destinations" : [
	  {
	  "destination_name" : "QuickTime Destination",
	  "destination_unique_id" : "122A4FAC-44B5-4547-862C-660EA142BE65"
	  }
  ],
	"can_be_paused" : true,
	"unique_id" : "2745338660-0",
	"device_name" : "UltraStudio 4K Mini",
	"display_name" : "My UltraStudio",
	"reel_name" : "001",
	"frame_rate" : 59.94,
	"video_format" : "2160p59.94",
	"is_recording" : false,
	"recording_end_date" : "",
	"is_enabled" : true
  },
  {
	"recording_name" : "My Recording Name",
	"recording_start_date" : "",
	"is_paused" : false,
	"is_locked" : false,
	"enabled_destinations" : [
	  {
		"destination_name" : "QuickTime Destination",
		"destination_unique_id" : "122A4FAC-44B5-4547-862C-660EA142BE65"
	  }
	],
	"can_be_paused" : true,
	"unique_id" : "135568746543",
	"device_name" : "AJ Io X3",
	"display_name" : "AJ Io X3",
	"reel_name" : "001",
	"frame_rate" : 59.94,
	"video_format" : "2160p59.94",
	"is_recording" : false,
	"recording_end_date" : "",
	"is_enabled" : true
  }
]

Retrieve the info of a specific source

GET /sources/{n}/

Optional parameters:

Response:
{
  "recording_name" : "Untitled Recording",
  "recording_start_date" : "",
  "is_paused" : false,
  "is_locked" : false,
  "enabled_destinations" : [
	{
	  "destination_name" : "QuickTime Destination",
	  "destination_unique_id" : "122A4FAC-44B5-4547-862C-660EA142BE65"
	}
  ],
  "can_be_paused" : true,
  "unique_id" : "2745338660-0",
  "device_name" : "UltraStudio 4K Mini",
  "display_name" : "My UltraStudio",
  "reel_name" : "001",
  "frame_rate" : 29.969999999999999,
  "video_format" : "525i59.94 NTSC",
  "is_recording" : false,
  "recording_end_date" : "",
  "is_enabled" : true
}

Retrieve the status of a specific source

The following request returns information about the source feed: last received timecode (string), if it is recording (bool), last warning (string), vuMeterLevels (array of values from 0 to 1.0).

GET /sources/{n}/info

Optional parameters:

Response:
{
  "elapsed_seconds" : 0,
  "timecode" : "13:15:09;08",
  "vu_meter_levels" : [
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	0
  ],
  "is_recording" : false,
  "timecode_frame_rate" : 29.970029970029969,
  "timecode_is_drop_frame" : true,
  "is_paused" : false
}

Retrieve a JPEG thumbnail of the last received image

GET /sources/{n}/thumbnail

Optional parameters:

Response: jpeg data

Controlling the enabled destinations of a source

Check which destinations are enabled on the source. You will receive a list of destination unique ids

GET /sources/{n}/destinations

Optional parameters:

Response:
[
  "122A4FAC-44B5-4547-862C-660EA142BE65",
  "E0EDC89D-0988-4F70-8E71-AC659DD3E042"
]

To set which destinations are enabled for a source, pass an array with their unique ids to the source

PUT /sources/{n}/destinations

Optional parameters:

Body:
[
  "122A4FAC-44B5-4547-862C-660EA142BE65",
  "E0EDC89D-0988-4F70-8E71-AC659DD3E042"
]

Controlling the recording name of a source

The following request returns the recording name of the source.

GET /sources/{n}/recording_name

Optional parameters:

Response:
{
  "recording_name": "My Recording Name"
}

To set the recording name of a source:

PUT /sources/{n}/recording_name

Optional parameters:

Body:
{
  "recording_name": "My Recording Name"
}

Controlling the "reel" name of a source

The following request returns the reel name of the source.

GET /sources/{n}/reel_name

Optional parameters:

Response:
{
  "reel_name": "001"
}

To set the reel name of a source:

PUT /sources/{n}/reel_name

Optional parameters:

Body:
{
  "reel_name": "001"
}

Change Recording Settings

Pass a dictionary with the keys recording_name and destinations where recording name is a string and destinations is an array of destination unique ids. This method is there for your convenience and groups destinations and recording_name methods into one.

PUT /sources/{n}/recording_settings

Optional parameters:

Body:
{
  "recording_name": "Recording Name",
  "destinations": [
	"B0271E68-68CF-4382-9DA5-93502305D333",
	"A5A762A9-6128-4A4C-9CA4-6CCF720D5DBD"
  ]
}

Control the Recording

Note: For any per‑source control endpoint addressed by index — /sources/{n}/record, /stop, /pause, /resume, /manual_split, /lock, /unlock — append ?include_disabled_sources=YES if you want indices evaluated among all sources (enabled + disabled). Be consistent across related requests to avoid addressing a different source.

Record

GET /sources/{n}/record

Optional parameters:

Stop

Stops the recording of the source identified by the unique id or the index.

GET /sources/{n}/stop

Optional parameters:

Other Controls

Pauses the recording of the source identified by the unique id or the index.

GET /sources/{n}/pause

Optional parameters:

Resumes (after a pause) the recording of the source identified by the unique id or the index.

GET /sources/{n}/resume

Optional parameters:

Continues the recording in a new file.

GET /sources/{n}/manual_split

Optional parameters:

Disables/Enables the ability to start/pause/resume/stop recording on the source identified by the unique id or the index.

GET /sources/{n}/lock

Optional parameters:

GET /sources/{n}/unlock

Optional parameters:

Gang Controls

Instead of controlling each source individually, you can control them together by simply sending an array of sources that you want to control. You simply pass an array of unique ids or indexes of sources to control. If you don't pass any array, you will control all sources.
You can also pass a parameter in the url to set if you want to control all enabled sources, or just the ones selected.

Note: When sending an array of indexes (instead of unique IDs) to gang endpoints, you can control how those indexes are resolved by adding ?include_disabled_sources=YES to the URL to evaluate among all sources. Use this parameter consistently anywhere you rely on indexes.

Gang Record

PUT /sources/record

Optional parameters:

Body:
[
  "UltraStudio 4K Mini",
  "AJA Io X3",
  "Deltacast 12G-4C"
]

Gang Pause

PUT /sources/pause

Optional parameters:

Body:
[
  "UltraStudio 4K Mini",
  "AJA Io X3",
  "Deltacast 12G-4C"
]

Gang Resume

PUT /sources/resume

Optional parameters:

Body:
[
  "UltraStudio 4K Mini",
  "AJA Io X3",
  "Deltacast 12G-4C"
]

Gang Stop

PUT /sources/stop
Body:
[
  "UltraStudio 4K Mini",
  "AJA Io X3",
  "Deltacast 12G-4C"
]

Working with Scheduled Recordings

Getting info of scheduled recordings

The following request returns a list of scheduled recordings

GET /scheduled_recordings
Response:
[
  {
	"weekly_repeated" : true,
	"is_enabled" : true,
	"unique_id" : "FE99AA1E-52CD-460D-BB55-4669A3C8D1C0",
	"destination_unique_ids" : [
	  "E0EDC89D-0988-4F70-8E71-AC659DD3E042"
	],
	"start_time" : 0,
	"stopped_by_user" : false,
	"source_name" : "My UltraStudio",
	"duration" : 60,
	"recording_days" : [
	  1
	],
	"source_unique_id" : "2745338660-0",
	"name" : "Scheduled Recording 1"
  },
  {
	"weekly_repeated" : false,
	"is_enabled" : true,
	"unique_id" : "92D7911A-23F9-43CE-9434-A616305882CA",
	"destination_unique_ids" : [
	  "122A4FAC-44B5-4547-862C-660EA142BE65"
	],
	"start_time" : 900,
	"stopped_by_user" : false,
	"source_name" : "My UltraStudio",
	"duration" : 60,
	"date" : "2024-05-29T22:00:00.000Z",
	"source_unique_id" : "2745338660-0",
	"name" : "Scheduled Recording 2"
  }
]

The following request returns the info of a specific scheduled recording

GET /scheduled_recordings/{n}
Response:
{
  "weekly_repeated" : true,
  "is_enabled" : true,
  "unique_id" : "FE99AA1E-52CD-460D-BB55-4669A3C8D1C0",
  "destination_unique_ids" : [
	"E0EDC89D-0988-4F70-8E71-AC659DD3E042"
  ],
  "start_time" : 0,
  "stopped_by_user" : false,
  "source_name" : "My UltraStudio",
  "duration" : 60,
  "recording_days" : [
	1
  ],
  "source_unique_id" : "2745338660-0",
  "name" : "Scheduled Recording 1"
}

Create new scheduled recording

The following request will create a new repeated event

POST /scheduled_recordings
Body:
{
  "weekly_repeated": true,
  "is_enabled": false,
  "destination_unique_ids": [
	"C2844CBE-5038-49CE-A599-3B736E0777B1"
  ],
  "start_time": 845,
  "duration": 800,
  "recording_days": [
	0,
	1,
	2,
	5,
	6
  ],
  "source_unique_id": "GG-MACBOOK-PRO-2018.LOCAL (NDI ScanConverter):127.0.0.1",
  "name": "Repeated Scheduled Recording 4"
}

The following request will create a new fixed event

POST /scheduled_recordings
Body:
{
  "weekly_repeated": false,
  "is_enabled": false,
  "destination_unique_ids": [
	"928BEB6F-5342-4223-8CB9-5C4629B00288"
  ],
  "start_time": 60,
  "date": "2017-06-22T22:00:00.000Z",
  "duration": 30,
  "source_unique_id": "OnTheAir Video",
  "name": "My Recording 1"
}

The following is the response to the creation of a new scheduled recording. It confirms and returns the UID of the scheduled recording that was created.

Response:
{
  "success" : true,
  "unique_id" : "0F3F4E08-6AB0-4D7F-8947-F4785EB5F1BC"
}

Modify scheduled recordings

The following request will modify an event. You can pass any of the keys, except its UID.

PUT /scheduled_recordings/{n}
Body:
{
  "weekly_repeated": true,
  "is_enabled": false,
  "destination_unique_ids": [
	"C2844CBE-5038-49CE-A599-3B736E0777B1"
  ],
  "start_time": 845,
  "duration": 800,
  "recording_days": [
	0,
	1,
	2,
	5,
	6
  ],
  "source_unique_id": "GG-MACBOOK-PRO-2018.LOCAL (NDI ScanConverter):127.0.0.1",
  "name": "Repeated Scheduled Recording 4"
}

Working with Metadata

The API allows you to manipulate the metadata sets.

Please note that metadata sets can be used on sources and some keys/values of metadata fields are only relevant when the set is being used on a source. See the documentation of the source object for the usage of sets on sources.

Valid values for the type key are: Boolean, Text, Number, Date/Time and Multiple Choice

Working with Metadata Sets

The following request will retrieve all the metadata sets available for MovieRecorder.

GET /metadata_sets
Response:
[
  {
   "fields" : [
	  {
		"default_value" : [
		  "$$Year.yyyy",
		  "$$Month.MM",
		  "$$Day.dd",
		  "_A Default Value"
		],
		"key" : "com.softronmedia.Key",
		"display_name" : "A \"Text\" Metadata",
		"unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
		"type" : "Text"
	  },
	  {
		 "default_value" : "First Value",
		 "key" : "com.softronmedia.Key-1",
		 "display_name" : "A \"Multiple Choice\" Metadata",
		 "unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
		 "type" : "Multiple Choice",
		 "possible_values" : [
		   "First Value",
		   "Second Value"
		 ]
	  },
	  {
		 "default_value" : 1,
		 "key" : "com.softronmedia.Key-2",
		 "display_name" : "A \"Number\" Metadata ",
		 "unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
		 "type" : "Number"
	  },
	  {
		 "default_value" : "2024-05-30T14:16:57.415Z",
		 "current_date_by_default" : true,
		 "key" : "com.softronmedia.Key-3",
		 "display_name" : "A \"Date\" Metadata",
		 "unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
		 "type" : "Date\/Time"
	  },
	  {
		 "default_value" : true,
		 "key" : "com.softronmedia.Key-4",
		 "display_name" : "A \"Boolean\" Metadata",
		 "unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
		 "type" : "Boolean"
	  }
	],
	"name" : "MyMetadataSet",
	"unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
	"movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
  }
]

The following request will retrieve a specific metadata set.

GET /metadata_sets/{n}
Response:
[
  {
	"fields" : [
	  {
		 "default_value" : [
		   "$$Year.yyyy",
		   "$$Month.MM",
		   "$$Day.dd",
		   "_A Default Value"
		 ],
		 "key" : "com.softronmedia.Key",
		 "display_name" : "A \"Text\" Metadata",
		 "unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
		 "type" : "Text"
	  },
	  {
		"default_value" : "First Value",
		"key" : "com.softronmedia.Key-1",
		"display_name" : "A \"Multiple Choice\" Metadata",
		"unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
		"type" : "Multiple Choice",
		"possible_values" : [
		  "First Value",
		  "Second Value"
		]
	  },
	  {
		"default_value" : 1,
		"key" : "com.softronmedia.Key-2",
		"display_name" : "A \"Number\" Metadata ",
		"unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
		"type" : "Number"
	  },
	  {
		"default_value" : "2024-05-30T14:16:57.415Z",
		"current_date_by_default" : true,
		"key" : "com.softronmedia.Key-3",
		"display_name" : "A \"Date\" Metadata",
		"unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
		"type" : "Date\/Time"
	  },
	  {
		"default_value" : true,
		"key" : "com.softronmedia.Key-4",
		"display_name" : "A \"Boolean\" Metadata",
		"unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
		"type" : "Boolean"
	  }
	],
	"name" : "MyMetadataSet",
	"unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
	"movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
  }
]

To create a new metadata set.

POST /metadata_sets/{n}
Body:
[
  {
	 "fields" : [
	   {
		"default_value" : [
		  "$$Year.yyyy",
		  "$$Month.MM",
		  "$$Day.dd",
		  "_A Default Value"
		],
		"key" : "com.softronmedia.Key",
		"display_name" : "A \"Text\" Metadata",
		"unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
		"type" : "Text"
	   },
	   {
		"default_value" : "First Value",
		"key" : "com.softronmedia.Key-1",
		"display_name" : "A \"Multiple Choice\" Metadata",
		"unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
		"type" : "Multiple Choice",
		"possible_values" : [
		  "First Value",
		  "Second Value"
		]
	   },
	   {
		 "default_value" : 1,
		 "key" : "com.softronmedia.Key-2",
		 "display_name" : "A \"Number\" Metadata ",
		 "unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
		 "type" : "Number"
	   },
	   {
		 "default_value" : "2024-05-30T14:16:57.415Z",
		 "current_date_by_default" : true,
		 "key" : "com.softronmedia.Key-3",
		 "display_name" : "A \"Date\" Metadata",
		 "unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
		 "type" : "Date\/Time"
	   },
	   {
		 "default_value" : true,
		 "key" : "com.softronmedia.Key-4",
		 "display_name" : "A \"Boolean\" Metadata",
		 "unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
		 "type" : "Boolean"
	   }
	 ],
	 "name" : "MyMetadataSet",
	 "unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
	 "movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
  }
]

To modify a metadata set.

PUT /metadata_sets/{n}
Body:
[
  {
	 "fields" : [
	   {
		 "default_value" : [
		   "$$Year.yyyy",
		   "$$Month.MM",
		   "$$Day.dd",
		   "_A Default Value"
		 ],
		 "key" : "com.softronmedia.Key",
		 "display_name" : "A \"Text\" Metadata",
		 "unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
		 "type" : "Text"
	   },
	   {
		 "default_value" : "First Value",
		 "key" : "com.softronmedia.Key-1",
		 "display_name" : "A \"Multiple Choice\" Metadata",
		 "unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
		 "type" : "Multiple Choice",
		 "possible_values" : [
		   "First Value",
		   "Second Value"
		 ]
	   },
	   {
		 "default_value" : 1,
		 "key" : "com.softronmedia.Key-2",
		 "display_name" : "A \"Number\" Metadata ",
		 "unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
		 "type" : "Number"
	   },
	   {
		 "default_value" : "2024-05-30T14:16:57.415Z",
		 "current_date_by_default" : true,
		 "key" : "com.softronmedia.Key-3",
		 "display_name" : "A \"Date\" Metadata",
		 "unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
		 "type" : "Date\/Time"
	   },
	   {
		 "default_value" : true,
		 "key" : "com.softronmedia.Key-4",
		 "display_name" : "A \"Boolean\" Metadata",
		 "unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
		 "type" : "Boolean"
	   }
	 ],
	 "name" : "MyMetadataSet",
	 "unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
	 "movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
  }
]

To delete a metadata set.

DELETE /metadata_sets/{n}
Response:
{
	 "success" : true
  }

Working with Metadata on Sources

The following request will get the info of the metadata set assigned toa specific source. WARNING: this does not return the current values of the metadata, but the metadata set itself, see the next request to get the metadata values set on the source.

GET /sources/{n}/metadata_set
Response:
{
"fields" : [
	 {
	   "unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
	   "use_manual_value" : true,
	   "value" : [
		 "Changing the value"
	   ],
	   "default_value" : [
		 "$$Year.yyyy",
		 "$$Month.MM",
		 "$$Day.dd",
		 "_A Default Value"
	   ],
	   "key" : "com.softronmedia.Key",
	   "display_name" : "A \"Text\" Metadata",
	   "type" : "Text"
	 },
	 {
	   "type" : "Multiple Choice",
	   "unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
	   "use_manual_value" : true,
	   "value" : "Second Value",
	   "default_value" : "First Value",
	   "key" : "com.softronmedia.Key-1",
	   "possible_values" : [
		 "First Value",
		 "Second Value"
	   ],
	   "display_name" : "A \"Multiple Choice\" Metadata"
	 },
	 {
	   "unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
	   "use_manual_value" : true,
	   "value" : "3",
	   "default_value" : 1,
	   "key" : "com.softronmedia.Key-2",
	   "display_name" : "A \"Number\" Metadata ",
	   "type" : "Number"
	 },
	 {
	   "type" : "Date\/Time",
	   "unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
	   "use_manual_value" : true,
	   "value" : "2024-05-30T16:16:11.480Z",
	   "default_value" : "2024-05-30T14:16:11.470Z",
	   "key" : "com.softronmedia.Key-3",
	   "display_name" : "A \"Date\" Metadata",
	   "current_date_by_default" : false
	 },
	 {
	   "unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
	   "use_manual_value" : true,
	   "value" : false,
	   "default_value" : true,
	   "key" : "com.softronmedia.Key-4",
	   "display_name" : "A \"Boolean\" Metadata",
	   "type" : "Boolean"
	 }
   ],
   "name" : "MyMetadataSet",
   "unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
   "movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
 }

This is the request to get the metadata values set on the source.

GET /sources/{n}/metadata
Response:
{
"fields" : [
	 {
	   "unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
	   "use_manual_value" : true,
	   "value" : [
		 "Changing the value"
	   ],
	   "default_value" : [
		 "$$Year.yyyy",
		 "$$Month.MM",
		 "$$Day.dd",
		 "_A Default Value"
	   ],
	   "key" : "com.softronmedia.Key",
	   "display_name" : "A \"Text\" Metadata",
	   "type" : "Text"
	 },
	 {
	   "type" : "Multiple Choice",
	   "unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
	   "use_manual_value" : true,
	   "value" : "Second Value",
	   "default_value" : "First Value",
	   "key" : "com.softronmedia.Key-1",
	   "possible_values" : [
		 "First Value",
		 "Second Value"
	   ],
	   "display_name" : "A \"Multiple Choice\" Metadata"
	 },
	 {
	   "unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
	   "use_manual_value" : true,
	   "value" : "3",
	   "default_value" : 1,
	   "key" : "com.softronmedia.Key-2",
	   "display_name" : "A \"Number\" Metadata ",
	   "type" : "Number"
	 },
	 {
	   "type" : "Date\/Time",
	   "unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
	   "use_manual_value" : true,
	   "value" : "2024-05-30T16:16:11.480Z",
	   "default_value" : "2024-05-30T14:16:11.470Z",
	   "key" : "com.softronmedia.Key-3",
	   "display_name" : "A \"Date\" Metadata",
	   "current_date_by_default" : false
	 },
	 {
	   "unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
	   "use_manual_value" : true,
	   "value" : false,
	   "default_value" : true,
	   "key" : "com.softronmedia.Key-4",
	   "display_name" : "A \"Boolean\" Metadata",
	   "type" : "Boolean"
	 }
   ],
   "name" : "MyMetadataSet",
   "unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
   "movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
 }

If you want to modify the metadata values on a source, use a PUT request.

PUT /sources/{n}/metadata
Response:
{
"fields" : [
	 {
	   "unique_id" : "AFA9C51E-CDB0-4431-AF3F-5FBF71721E57",
	   "use_manual_value" : true,
	   "value" : [
		 "Changing the value"
	   ],
	   "default_value" : [
		 "$$Year.yyyy",
		 "$$Month.MM",
		 "$$Day.dd",
		 "_A Default Value"
	   ],
	   "key" : "com.softronmedia.Key",
	   "display_name" : "A \"Text\" Metadata",
	   "type" : "Text"
	 },
	 {
	   "type" : "Multiple Choice",
	   "unique_id" : "AE38480D-F095-4D21-AE92-EB9935C12BE0",
	   "use_manual_value" : true,
	   "value" : "Second Value",
	   "default_value" : "First Value",
	   "key" : "com.softronmedia.Key-1",
	   "possible_values" : [
		 "First Value",
		 "Second Value"
	   ],
	   "display_name" : "A \"Multiple Choice\" Metadata"
	 },
	 {
	   "unique_id" : "7A3C1B7A-EC18-4FF6-8F13-F3C29A8664A0",
	   "use_manual_value" : true,
	   "value" : "3",
	   "default_value" : 1,
	   "key" : "com.softronmedia.Key-2",
	   "display_name" : "A \"Number\" Metadata ",
	   "type" : "Number"
	 },
	 {
	   "type" : "Date\/Time",
	   "unique_id" : "344662BA-C237-4CBE-BC28-8039BC786A0E",
	   "use_manual_value" : true,
	   "value" : "2024-05-30T16:16:11.480Z",
	   "default_value" : "2024-05-30T14:16:11.470Z",
	   "key" : "com.softronmedia.Key-3",
	   "display_name" : "A \"Date\" Metadata",
	   "current_date_by_default" : false
	 },
	 {
	   "unique_id" : "BE205661-0BC5-4EB2-A1C4-C757CC0C565B",
	   "use_manual_value" : true,
	   "value" : false,
	   "default_value" : true,
	   "key" : "com.softronmedia.Key-4",
	   "display_name" : "A \"Boolean\" Metadata",
	   "type" : "Boolean"
	 }
   ],
   "name" : "MyMetadataSet",
   "unique_id" : "B1ECBD2E-CC24-41A2-9C0E-1492A1DB781F",
   "movieRecorderInstanceUniqueID" : "B49C21FA-8C3D-574D-81AF-7CBFE11B0FFE"
 }

Save and Restore Configurations

Retrieve the list of Configurations available

GET /configurations
Response:
[
  "My First Configuration",
  "My Second Configuration"
]

Restore a saved configuration

Once you know which configurations are available, you can simply restore them.

PUT /restore_configurations
Body:
{
  "restore_vtr_bach_list": true,
  "restore_sources": true,
  "restore_av_presets": true,
  "restore_destinations": true,
  "restore_schedule": true,
  "restore_layout": true,
  "name": "Recorder"
}

About Websockets

You have 2 options with our APIs to know the status of a recording:
  • Using the REST api: You would be regularly polling the sources to know their status. This enables you to check the signal format but for dropped frames it would be less accurate. Indeed, as you can only get the last warning, you could miss one in between two polls.
  • Using the WebSockets: This is much better to work with as the websockets will send you the notifications. There are 2 sockets. One main containing all the changes regarding the sources and destinations, and a second one with all the information for the activity & logs.
The advantage of the WebSockets is that every update is pushed live to it so you would be notified immediately and you won't miss any update. Contact us if you need more information about the WebSockets. You can also have a look at the sample webpage that we have created (it uses websockets). On the Mac that is running MovieRecorder, you can take a look at:
http://localhost:8080/index.html

For more Information

If you need more info or support about MovieRecorder, you can find it on our support desk. And if you need additional information on the API and/or the websockets, submit a ticket and we'll be happy to guide you.