The Compass API
Overview
Compass is the platform that powers the Runner application. It exposes a set of RESTful APIs which you can use to power your applications as well.
Endpoints
There are two Compass environments that you may interact with:
The Staging environment is for users who want to test the latest features and code. A caveat for using this environment is that you may encounter bugs or system instability as it is under constant development. Occasionally the data in the Staging environment maybe cleaned out and overwritten.
The Production environment is for when you need to do real work and is always the most stable code.
The two hosts for Compass are:
- Production: Use https://sonypicturesrunner.com/ for connections on production.
- Staging: Use https://staging.sonypicturesrunner.com/ for connections on staging.
Note that you will need to be authenticated for almost all API calls.
Important: The sample requests in this guide are examples only. You should substitute call-specific parameters with your own values.
Request Headers
POST /api/v1/not_a_real_endpoint HTTP/1.1
Host: staging.sonypicturesrunner.com
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyNzQsImV4cGlyZXNfYXQiOjE3MjU5MTc2NjN9.hw6ZsLIBrEFlSKe3aH-Od3Ln_0nDr8dXs6bwRni205o
Content-Type: application/json
Accept: application/json
In order to use the Compass API, clients must set the following request headers accordingly:
AUTHORIZATION
Requests must contain valid login credentials in the header, e.g.
authorization: Bearer [access_token]
See the Authorization section for details on constructing these headers.
CONTENT-TYPE
All POST and PUT requests must contain a valid JSON body with the
content-type header set to application/json.
ACCEPT
Unless otherwise noted, all Compass APIs are JSON based. Your request should
include an accept: application/json header, however this header is optional as
any response under the /api/ namespace will return JSON.
Authorization
POST
/api/v1/authenticateSample Request
curl "https://sonypicturesrunner.com/api/v1/authenticate" \
-H "content-type: application/json" \
-X POST \
-d '{"username": "XXX", "password": "XXX"}'
Sample Response
{
"access_token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyNzQsImV4cGlyZXNfYXQiOjE3MjU5MTc2NjN9.hw6ZsLIBrEFlSKe3aH-Od3Ln_0nDr8dXs6bwRni205o",
"expires_at": 1725917663
}
Sample Authorized Request
curl "https://sonypicturesrunner.com/api/v1/not-a-real-endpoint" \
-H "content-type: application/json" \
-H "authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyNzQsImV4cGlyZXNfYXQiOjE3MjU5MTc2NjN9.hw6ZsLIBrEFlSKe3aH-Od3Ln_0nDr8dXs6bwRni205o"
}
Sample Authorized Request Response Headers
HTTP/2 200
content-type: application/json; charset=utf-8
status: 200 OK
authorization-refresh-data: {"access_token":"eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyNzQsImV4cGlyZXNfYXQiOjE3MjYwMDc5NDF9.-VnD8L-YAhDnBVt25bgpZmuh9TrNHZ7Gcz4cpIuOTpU","expires_at":1726007941}
All API requests must provide authorization. Currently, the system supports
JSON Web Tokens, and the token provided from the authentication endpoint should
be passed in the headers of HTTP request, as: authorization: Bearer [JWT].
This flow allows a user to request a token directly by providing a username and
password. Once a token has been provided, further calls to the API may be
performed via the token by adding the value of the access_token in the
response to the authorization request header.
| Parameter | Type | Description |
|---|---|---|
| username | String | Runner username |
| password | String | Runner password |
As a convenience, every API call's response will contain an
authorization-refresh-data header which includes a refreshed access_token
and its corresponding expires_at timestamp (seconds since the linux epoch).
Subsequent API calls can use the newly refreshed access token, or the original
token (assuming it has not yet expired).
Once a token has expired, a new POST request to the /api/v1/authenticate
endpoint must be made to get a new access token.
Aspera Uploads
Aspera Transfer Setup
POST
/api/v1/uploadsSample Request
{
"asset_items": [{
"folder_ids": [1234],
"name": "my_test_file.jpg",
"file_size": 1280000,
"package": false,
"gpms_ids": [12345],
"titles": [{
"gpms_id": 987,
"alpha_id": 654
}],
"custom_metadata_fields": [{
"category": "my_category",
"label": "my_field_label",
"value": "123ABC"
}]
}]
}
Sample Response
HTTP/1.1 201 Created
{
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"cookie": null,
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"remote_host": "apod.cimediacloud.com",
"remote_user": "uxassets",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "ATM2_ACsDzqxBMlMpmhTAio6GZpPlZkV1wfqxIxFlbahWdiC_e8AAK5vdZMuZd8tmAEuIzSq378_2MTA",
"paths": [
{
"source": "test_file_1.mov",
"destination": "dd30d3e56e60448583e4df11d2552ba5/test_file_1.mov"
},
{
"source": "test_file_2.wav",
"destination": "97baa30cd17b4926a4019bc58691346b/test_file_2.wav"
}
],
"direction": "send",
"create_dir": true,
"destination_root": null,
"rate_policy": "fair"
},
"ingest_batch_id": 12345,
"asset_items": [
{
"actions": {
"deletable": false,
"downloadable": false
},
"airdate": null,
"asset_class": "video",
"episode_number": null,
"gpms_id": null,
"grid_display_name": null,
"has_proxy": null,
"icon_status": "soulless",
"id": 243513,
"is_folder": false,
"name": "test_file_1.mov",
"root_title": null,
"season": null,
"show_number": null,
"size": null,
"tape_date": null,
"thumbnail_url": null,
"type": "video",
"updated_at": "2015-05-15T19:17:08.717Z"
},
{
"actions": {
"deletable": false,
"downloadable": false
},
"airdate": null,
"asset_class": "audio",
"episode_number": null,
"gpms_id": null,
"grid_display_name": null,
"has_proxy": null,
"icon_status": "soulless",
"id": 243514,
"is_folder": false,
"name": "test_file_2.wav",
"root_title": null,
"season": null,
"show_number": null,
"size": null,
"tape_date": null,
"thumbnail_url": null,
"type": "audio",
"updated_at": "2015-05-15T19:17:08.745Z"
}
]
}
A valid call to the uploads endpoint will create records of the (to-be-uploaded) assets in Runner, which will be filled out after a successful Aspera file transfer. It will respond with an Aspera file transfer configuration that the client can use to initiate the transfer via the Connect plugin, ascp command line, or Node API call. The upload will also be monitored so that an email notification can be sent once all files in the batch are uploaded successfully.
Request Endpoint
POST /api/v1/uploads
Request Parameters
Required parameters are bold
| Parameter | Type | Description |
|---|---|---|
| asset_items | AssetItem[] | Array containing details about assets to be uploaded |
AssetItem Options
| Parameter | Type | Description |
|---|---|---|
| custom_metadata_fields | Object[] | This is for storing workflow specific fields. Please consult Runner team before using. |
| folder_ids | Number[] | A list of folder IDs to upload the asset to |
| gpms_ids | Number[] | This allows titles to be associated to the asset at the time of upload by providing GPMS ID |
| ingest_type | String | This specifies which workflow this ingest is part of. Defaults to "runner" |
| name | String | The name of the asset to be uploaded (must match actual file name) |
| file_size | Number | File size, in bytes, of the asset. THIS PARAMETER IS REQUIRED FOR HTTP UPLOADS |
| package | Boolean | Whether or not the asset is a package |
| titles | Object[] | An array containing objects representing titles to associate to the asset item |
| titles[].alpha_id | Number | ODIN Alpha ID. The GPMS ID of the related title must be provided along with this parameter. |
| titles[].gpms_id | Number | GPMS ID for a title |
Response
| Parameter | Type | Description |
|---|---|---|
| asset_items | Object[] | An array of data about the Runner assets beings uploaded |
| asset_items[].asset_class | String | Type of file that Runner thinks it is expecting |
| asset_items[].id | Number | Unique asset ID for Runner |
| asset_items[].name | String | File name of the asset to be uploaded |
| connection_settings | Object | Parameters to be passed to the Connect plugin for the best user experience |
| transfer_spec | Object | Parameters that should be specified when initiating the Aspera transfer |
| transfer_spec.authentication | String | Specifies that authentication will be done via a token |
| transfer_spec.create_dir | Boolean | Specifies to create necessary directories |
| transfer_spec.fasp_port | Number | FASP UDP port for the transfer |
| transfer_spec.paths | Object[] | The list of files included in the batch and where they should be sent NOTE: This array is in the same order as the array of files sent in the request. |
| transfer_spec.remote_host | String | Destination server address |
| transfer_spec.remote_user | String | User name that the file must be uploaded as |
| transfer_spec.token | String | Authorization token that expires after a certain amount of time. Each Aspera Transfer Setup response call will respond with a unique token. |
NOTE: The response parameters listed are only what the client needs to know for a successful file transfer. Extraneous fields have been omitted for clarity.
HTTP Multipart Uploads
| Steps | |
|---|---|
| 1. | Create Asset Item |
| 2. | Initiate Upload |
| 3. | Retrieve batch of upload urls |
| 4. | Upload to the part urls |
| 5. | Complete batch of parts (signal completion of a batch of parts) |
| 6. | Complete Upload (signal completion of all parts for a given asset) |
Create Asset
POST
/api/v2/uploads/httpSame POST BODY as here.
A valid call to the uploads http endpoint will create records of the (to-be-uploaded) assets in Runner, which will be filled out after a successful multipart upload. The upload will also be monitored so that an email notification can be sent once all files in the batch are uploaded successfully.
The download_configurations and connection_settings in the response can be
disregarded for HTTP uploads.
Request Endpoint
POST /api/v2/uploads/http
Initiate Asset for Multipart
POST
/api/v2/multipart/asset_items/46/initiate
Request Endpoint
POST /api/v2/multipart/asset_items/46/initiate
Sample Request Body
{
"part_size": 5242880
}
REQUEST PARAMETERS
| Name | Required | Type | Description |
|---|---|---|---|
| part_size | Y | int | Part size, in bytes, of your multipart "chunks". Should be 5MB or greater, with exception being the last part. If you're not sure what to use here, start with 5242880(5MB) and work your way up, adjusting per your application's needs/abilities. |
Sample Response
HTTP/1.1 201 Created
{
"part_count": 10
}
Retrieve Upload URLs
POST
/api/v2/multipart/asset_items/46/retrieve_upload_urls
Request pre-signed AWS S3 URLs to upload each part to. Recommended to send this with a batch of part numbers as opposed to only sending just 1.
Sample Request Body
{
"part_numbers": [1, 2, 3, 4]
}
Request Endpoint
POST /api/v2/multipart/asset_items/46/retrieve_upload_urls
REQUEST PARAMETERS
| Name | Required | Type | Description |
|---|---|---|---|
| part_numbers | Y | array | The number of the parts to retrieve upload urls for. |
Sample Response
HTTP/1.1 201 Created
{
"retrieve_upload_urls": [
{
"part_number": 1,
"upload_url": "https://bucket-name.s3.amazonaws.com/destination-bucket-key/1?x-amz-token=123abc"
},
{
"part_number": 2,
"upload_url": "https://bucket-name.s3.amazonaws.com/destination-bucket-key/2?x-amz-token=123abc"
},
{
"part_number": 3,
"upload_url": "https://bucket-name.s3.amazonaws.com/destination-bucket-key/3?x-amz-token=123abc"
},
{
"part_number": 4,
"upload_url": "https://bucket-name.s3.amazonaws.com/destination-bucket-key/4?x-amz-token=123abc"
}
]
}
Upload to AWS S3 URL
Sample URL
PUT
https://bucket-name.s3.amazonaws.com/destination-bucket-key/1?x-amz-token=123abc
The request body should contain the raw "chunk" of the file corresponding to the part number.
Please refer to Amazon S3 documentation for error responses.
Complete Parts
POST
/api/v2/multipart/asset_items/46/complete_parts
This call signals the successful upload of 1 or more file parts. Recommended to send this with a batch of completed part numbers as opposed to only sending 1.
Request Endpoint
POST /api/v2/multipart/asset_items/46/complete_parts
Sample Request Body
{
"parts": [
{
"part_number": 1,
"checksum": "f733dff5"
},
{
"part_number": 2,
"checksum": "37a62436"
},
{
"part_number": 3,
"checksum": "9b60be80"
},
{
"part_number": 4,
"checksum": "41d077b9"
}
]
}
Sample Response
HTTP/1.1 204 No Content
REQUEST PARAMETERS
| Name | Required | Type | Description |
|---|---|---|---|
| part_number | Y | Number | Indicates the size for each part to be uploaded. |
| checksum | N | String | MD5 Checksum of the uploaded chunk |
Complete Asset
POST
/api/v2/multipart/asset_items/46/complete
This operation signals the completion of an upload.
Request Endpoint
POST /api/v2/multipart/asset_items/46/complete
Sample Response
HTTP/1.1 204 No Content
Downloads
POST
/api/v3/downloadsAsset Item, downloading source via Aspera
{
"items": [
{
"asset_item_id": 5678,
"source": true
}
],
"method": "aspera"
}
Asset Item, downloading source via HTTP
{
"items": [
{
"asset_item_id": 5678,
"source": true
}
],
"method": "http"
}
Asset Item, with custom destination name, downloading source via Aspera
{
"items": [
{
"asset_item_id": 5678,
"source": true,
"destination_name": "my-custom-filename"
}
],
"method": "aspera"
}
Asset Item revision, downloading source via Aspera
{
"items": [
{
"revision_id": 4566,
"source": true
}
],
"method": "aspera"
}
Asset Item, downloading proxies + source via Aspera
{
"items": [
{
"asset_item_id": 5678,
"source": true,
"proxies": ["small_thumbnail", "video_sd"]
}
],
"method": "aspera"
}
Asset Item, downloading proxy via HTTP
{
"items": [
{
"asset_item_id": 5678,
"proxies": ["video_mobile"]
}
],
"method": "http"
}
multiple Asset Items, downloading proxies via Aspera
{
"items": [
{
"asset_item_id": 7890,
"proxies": ["large_thumbnail", "video_hd"]
},
{
"asset_item_id": 5678,
"proxies": ["small_thumbnail", "video_sd"]
}
],
"method": "aspera"
}
multiple Asset Items, downloading best available proxy via Aspera
{
"items": [
{ "asset_item_id": 7890 },
{ "asset_item_id": 5678 }
],
"best_available_proxy": true,
"method": "aspera"
}
Asset Items + External Assets, from share, downloading best available proxy via Aspera
{
"items": [
{ "asset_item_id": 7890 },
{ "external_asset_id": 9999 }
],
"uuid": "36e06be8-a44c-42d4-96f6-4c2c8613875d",
"best_available_proxy": true,
"method": "aspera"
}
The v3 download endpoint is the single endpoint to download any asset, for all supported transfer protocols (HTTP or Aspera).
Request Endpoint
POST /api/v3/downloads
Request Body Parameters
| Key | Type | Description |
|---|---|---|
| items | DownloadItem[] | Required. An array of objects for download (see below) |
| method | String | Required. Download method; one of "aspera" or "http" |
| best_available_proxy | Boolean | Optional. Provides the highest available proxy. If no proxy is available, the source is provided. |
| uuid | String | Optional. UUID for a share recipient. Downloads will be validated against the recipient's download & view limits |
DownloadItem Options
- A
DownloadItemmust include one ofasset_item_id,external_asset_id, orrevision_id. sourceandproxiesmay not be present ifbest_available_proxyistrueon the main request body. One or both of these properties is required isbest_available_proxyis not set.destination_nameis optional. When provided for one or more proxies, the custom destination_name will be appended with the proxy type.
| Key | Type | Description |
|---|---|---|
| asset_item_id | Number | ID of a Runner asset item |
| external_asset_id | Number | ID of a runner external asset. Valid only with a UUID in the main request body |
| revision_id | Number | ID of a revision to a runner asset item |
| source | boolean | A download of the source / original asset is wanted. |
| proxies | String[] | An array of proxies wanted for download. |
| destination_name | String | A custom name to save the download as. File extensions will be ignored. |
Sample Response (Aspera)
{
"download_configurations": [{
"authentication": "token",
"cipher": "aes-128",
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": [{
"source": "cifiles/foo.mp4",
"destination": "foo.mp4",
"asset_id": "abc123"
}],
"rate_policy": "fair",
"remote_host": "apod.cimediacloud.com",
"remote_user": "dxassets",
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "abc123"
}],
"connection_settings": {
"allow_dialogs": true
}
}
Sample Response (HTTP)
{
"url": "https://cdn01.cimediacloud.com/path/to/file.ext?aws_signed_params"
}
Assets
Get Asset Data
GET
/api/v1/asset_items/42Sample Response
{
"actions": {
"can_cancel": {},
"can_copy": false,
"can_delete": true,
"can_edit": true,
"can_move": false,
"can_rename": true,
"can_restore": false,
"can_replace": true,
"can_share": false,
"can_view": true,
"can_update_thumbnail": true,
"can_watermark": false,
"can_download_original": true,
"can_download_proxy": true,
"can_download": true
},
"archive_status": "not archived",
"archived": false,
"asset_class": "video",
"asset_owner": "Digital Media Group",
"asset_subtype": "Theatrical",
"asset_type": "Trailer",
"asset_type_or_class": "Trailer",
"checksum": "3d144a0a74110e023508007cedb073ef",
"created_at": "2017-04-21T23:57:34.324Z",
"custom_metadata": {
"usage": {
"restriction": "For your eyes only"
},
"content_details": {
"version": "123abc",
"picture_version": "Alternate",
"language_original": "English",
"keywords": [
"i love keywords",
"keyword",
"other keyword"
],
"description": "This is the description of the asset item in Runner."
},
"tech_info": {
"width": "1920",
"video_four_cc": "avc1",
"video_codec": "h264",
"video_bitrate": "2607033",
"total_bitrate": "2722142",
"height": "1080",
"frame_rate": "24.0",
"frame_count": "4633",
"duration_in_ms": "193263",
"audio_channel_count": "2",
"audio_streams": [{
"index": "1",
"channel_count": "2",
"codec": "aac",
"bitrate": "112011",
"layout": "stereo",
"sample_rate": "44100"
}]
}
},
"downloadable": true,
"file_name": "Glass Half.mp4",
"folder_ids": [
59991,
51137
],
"has_proxy": true,
"icon_status": "available",
"id": 5028911,
"is_audio": false,
"is_video": true,
"linked_asset_group_id": null,
"managed_by": "Digital Media Group",
"mcs_id": "add09ed0685446d1bfb174a9787e60e7",
"metadata_deprecated": null,
"name": "Glass_Half.mp4",
"pixel_dimensions": "1920 x 1080",
"restorable": false,
"restore_hours_remaining": null,
"restore_status": "not restored",
"restored": false,
"restoring": false,
"root_title": "SKYFALL",
"scheduled_actions": [{
"asset_item_group_id": 15,
"date": "2018-01-17T18:55:13.747Z",
"folder_names": [
"destination"
],
"source_folder": "Sample Source Folder",
"type": "move",
"user": "Sample User",
},
{
"asset_item_group_id": 17,
"date": "2018-01-12T22:50:05.018Z",
"folder_names": [
"Sample Destination Folder"
],
"source_folder": "Sample Source Folder",
"type": "copy",
"user": "Sample User",
},
],
"season": [],
"series": [],
"shareable": true,
"show_identifier": null,
"size": 65761189,
"status": "complete",
"thumbnail_url": "https://really.long.thumbnail.url/filename.jpg?token=123abc",
"titles": [{
"gpms_id": 1123220,
"id": 101367,
"gpms_id_and_name": "1123220|SKYFALL",
"name": "SKYFALL",
"full_name": "SKYFALL",
"season_number": null,
"title_level": "nonepisodic",
"title_type": "feature"
}],
"uploaded_at": "2017-04-21T23:57:34.330Z",
"uploaded_by": "John Runner",
"usage_classification": "Internal Use",
"usage_restriction": "For your eyes only",
"usage_status": "Work in Progress",
"width": "1920",
"updated_at": "2017-04-26T21:26:47.675Z"
}
This endpoint will retrieve asset metadata held by Compass as well as the URL of a thumbnail image if applicable.
Request Endpoint
GET /api/v1/asset_items/:id
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| id | Number | The unique identifier of the asset in the Compass system |
Bulk Asset Details
POST
/api/v1/asset_items/batchSample Request Body
{ "ids": [123, 456, 789], "skip_actions": true },
Sample Response
{
"asset_items": [
{
"id": 123,
"name": "test_asset.jpg",
"asset_class": "image",
// ... truncated, see single asset response above for full example ...
},
{ "id": 456 ... },
{ "id": 789 ... }
]
}
This endpoint will return asset details for up to 500 assets
Request Endpoint
POST /api/v1/asset_items/batch
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| ids | Number[] | Desired asset item IDs (Required) |
| skip_actions | Boolean | Recommended for service accounts Setting this parameter to true will skip the "actions" object from each asset (Optional) |
Delete Assets from Folders
POST
/api/v1/asset_items/delete_from_foldersSample Request Body
[
{ "asset_item_id": 123, "folder_ids": [123, 456, 789] },
{ "asset_item_id": 456, "folder_ids": [999] }
]
Response
HTTP/1.1 201 Created
This endpoint removes assets from the specified folders as well as deletes those assets from the system if they no longer exist in any folder after the removal(s).
It is important to note that the asset is not physically copied to each folder when it is in multiple folders, rather a pointer to that asset exists, tied to each folder.
Request Endpoint
POST /api/v1/asset_items/delete_from_folders
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_id | Number | The unique identifier of the asset in the Compass system |
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| folder_ids | Number[] | The folder(s) from which the asset is being removed |
Preview an Asset - Audio/Video/Image
GET
/api/v1/asset_items/preview?id=1234Sample Response
{
"preview_url": "https://some_domain.com/some_absurdly_long_url.m3u8?with=a_really_long_signature"
}
GET
/api/v1/asset_items/image_preview?id=1234Sample Response
{
"runner_id": 1,
"thumbnail_url": "https://some_domain.com/some_absurdly_long_url.jpg?with=a_really_long_signature"
}
These endpoints provide access to proxies of the original source files via signed (expiring) URLs.
The preview endpoint is used for audio and video assets. For audio, it will return a link directly to the proxy file. For video it will point to a m3u8 HLS adaptive bitrate playlist from which you can stream the proxy.
The image preview endpoint can be used for both images and video and will provide a larger image proxy than a thumbnail. For video files, this image is taken from two minutes in or 30% into the content if under two minutes.
Access to the preview API is tracked in an audit trail tied to the accessing user. The image_preview endpoint is un-tracked.
Request Endpoint
- Video Preview:
GET /api/v1/asset_items/preview?id=:asset_item_id&skip_burn_in_timecode=:skip_burn_in_timecode - Image Preview:
GET /api/v1/asset_items/image_preview?id=:asset_item_id
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_id | Number | The unique identifier of the asset in the Compass system |
| skip_burn_in_timecode | Boolean | OPTIONAL Setting this parameter to true will not use burn in timecode proxies for HLS/DASH streams *Default is false |
Bulk Image Preview
POST
/api/v2/asset_items/bulk_image_previewSample Request Body
{
"ids": [1, 3],
"expiration": "2033-03-03T00:00:00Z"
}
Sample Response
HTTP/1.1 201 Created
{
"image_preview": [{
"runner_id": 3,
"thumbnail_url": "https://really.long.thumbnail/url_1"
},
{
"runner_id": 1,
"thumbnail_url": "https://really.long.thumbnail/url_2"
}
]
}
This endpoint provide access to proxies of thumbnails of multiple assets in one request.
Request Endpoint
POST /api/v2/asset_items/bulk_image_preview
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| ids | Number[] | REQUIRED An array of unique identifiers of the assets in the Compass system |
| expiration | String | OPTIONAL An ISO8601 formatted date string for when the preview images should expire. Must be less than 2038-01-01. Default is 4 hours from time of request. |
Response Body Parameters
| Parameter | Type | Description |
|---|---|---|
| image_preview | Object[] | An array containing the objects of each asset's thumbnail info |
| image_preview[].runner_id | Number | The unique identifier of the asset in the Compass system |
| image_preview[].thumbnail_url | String | The URL containing the thumbnail. |
Replace Asset
POST
api/v1/asset_items/replaceSample Request Body
{
"asset_item": {
"asset_item_id": 1052,
"filename": "bwv.jpg",
"file_size": 1280000
},
"upload_type": "http"
}
Sample Response
HTTP/1.1 201 Created
{
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"cookie": null,
"fasp_port": 33001,
"http_fallback": false,
"http_fallback_port": 443,
"remote_host": "apod.cimediacloud.com",
"remote_user": "uxassets",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"paths": [{
"source": "file",
"destination": "1428cf37d3e9494fa091ee277fe83298/file"
}],
"direction": "send",
"create_dir": true,
"destination_root": null,
"rate_policy": "fair"
},
"ingest_batch_id": 1,
"package_transfer_specs": [],
"asset_items": [{
"actions": null,
"airdate": null,
"alpha_name": null,
"alpha_names": [],
"asset_class": "image",
"episode_number": null,
"file_name": "splatoon.jpg",
"folders": [],
"gpms_id": null,
"has_playable_proxy": false,
"height": "960",
"icon_status": "replacement",
"id": 1,
"is_folder": false,
"name": "splatoon.jpg",
"restore_hours_remaining": null,
"restoring": false,
"root_title": null,
"season": null,
"show_number": null,
"size": 175076,
"subtype": null,
"tape_date": null,
"thumbnail_url": "https://really.long.thumbnail.url/bwv.jpg?token=123abc",
"title_name": null,
"title_names": [],
"type": "Image",
"uploaded_at": "2018-05-24T19:07:14.228Z",
"usage_restriction": null,
"width": "960",
"scheduled_actions": [],
"linked_asset_groups": []
}]
}
This endpoint replaces an asset with another file uploaded by the user. The replacement can be uploaded via Aspera or HTTP using the returned transfer spec.
Request Endpoint
POST /api/v1/asset_items/replace
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_id | Number | The unique identifier of the asset in the Compass system |
| filename | File | The name of the file |
| file_size | Number | File size, in bytes, of the new file. THIS PARAMETER IS REQUIRED FOR HTTP UPLOADS |
| upload_type | String | Optional. Name of transfer protocol used to upload file. Valid values: http or aspera. Default value is aspera. |
Replace Thumbnail
POST
api/v1/asset_items/:id/thumbnail_replacementsSample Response
HTTP/1.1 201 Created
Request Endpoint
POST /api/v1/asset_items/1/thumbnail_replacements
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| id | Number | The unique identifier of the asset in the Compass system |
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| name | String | The name of the thumbnail file |
| filedata | File | The thumbnail file |
Bulk Update
POST
api/v1/asset_items/bulk_updateSample Request Body
{
"asset_items": [{
"id": 12345,
"custom_metadata_fields": [{
"category": "Content Details",
"label": "Description",
"value": "lorem ipsum"
}, {
"category": "Content Details",
"label": "Keywords",
"value": ["bar", "foo"]
}, {
"category": "Content Details",
"label": "Language - Original",
"value": "English(US)"
}, {
"category": "Content Details",
"label": "Territory",
"value": ["Canada", "U.S."]
}, {
"category": "Usage",
"label": "Restriction",
"value": "for internal use only"
}],
"asset_subtype_name": "Advertising",
"asset_type_name": "Packshot",
"usage_classification_name": "Internal Use",
"usage_status_name": "Final",
"gpms_ids": [12345]
}]
}
Alternate Sample Request Body
{
"asset_items": [{
"id": 12345,
"asset_subtype_name": "Advertising",
"asset_type_name": "Packshot",
"usage_classification_name": "Internal Use",
"usage_status_name": "Final",
"gpms_ids": [12345]
}],
"metadata": [{
"category": "Content Details",
"label": "Description",
"value": "lorem ipsum"
}, {
"category": "Content Details",
"label": "Keywords",
"value": ["bar", "foo"]
}, {
"category": "Content Details",
"label": "Language - Original",
"value": "English(US)"
}, {
"category": "Content Details",
"label": "Territory",
"value": ["Canada", "U.S."]
}, {
"category": "Usage",
"label": "Restriction",
"value": "for internal use only"
}]
}
Sample Response
HTTP/1.1 201 Created
{
"bulk_update": [{
"asset_owner": null,
"asset_subtype": "Advertising",
"asset_type": "Packshot",
"checksum": "b10c07bd1725237d8014481f1d90c8da",
"custom_metadata_fields": [{
"category": "Usage",
"data_type": null,
"id": 923,
"label": "Restriction",
"value": "for internal use only"
}, {
"category": "Content Details",
"data_type": null,
"id": 922,
"label": "Territory",
"value": [
"Canada",
"U.S."
]
}, {
"category": "Content Details",
"data_type": null,
"id": 921,
"label": "Language - Original",
"value": "English(US)"
}, {
"category": "Content Details",
"data_type": null,
"id": 920,
"label": "Keywords",
"value": [
"bar",
"foo"
]
}, {
"category": "Content Details",
"data_type": null,
"id": 919,
"label": "Description",
"value": "lorem ipsum"
}],
"file_size": 477,
"has_proxy": null,
"id": 544,
"managed_by": null,
"name": "invalid_video.mov",
"naming_convention": null,
"original_file_name": "invalid_video.mov",
"titles": [{
"gpms_id": 12345,
"name": "Season #3",
"full_name": "WHEEL OF FORTUNE // Season #3"
}],
"usage_classification": "Internal Use",
"usage_status": "Final"
}]
}
The bulk update endpoint is the preferred method for updating information on an asset item. This endpoint accepts up to 500 asset items at a time.
An optional metadata parameter may be added to the request body in order to apply the same custom metadata to all of the
assets in the bulk update. In the case that both this parameter and custom_metadata_fields are present in the request
body, metadata will take precedent and overwrite custom_metadata_fields.
Request Endpoint
POST /api/v1/asset_items/bulk_update
Request Parameters
Require parameters are bold
| Parameter | Type | Description |
|---|---|---|
| asset_items | Object[] | A collection of asset items to be updated |
| asset_items[].id | Number | Required. The ID of the asset in the Compass database |
| asset_items[].asset_owner_name | String | Asset Owner to set for this record. See Vocabulary for valid values. |
| asset_items[].asset_subtype_name | String | An Asset Subtype to set for this record. See Vocabulary for valid values. |
| asset_items[].asset_type_name | String | An Asset Type to set for this record. See Vocabulary for valid values. |
| asset_items[].custom_metadata_fields | Object[] | A collection of Custom Metadata Fields |
| asset_items[].gpms_ids | Number[] | Valid GPMS Title IDs to associate with this asset |
| asset_items[].managed_by_name | String | A 'Managed By' value to set for this record. See Vocabulary for valid values. |
| asset_items[].name | String | File name. Note: If updating the file name, the new name MUST have the same extension as the original file name. |
| asset_items[].thumbnail_url | String | A valid URL pointing to a medium-sized (<500px) thumbnail JPG. This URL should NOT expire. |
| asset_items[].titles | Object[] | An array containing objects representing titles to associate to the asset item |
| asset_items[].titles[].gpms_id | Number | GPMS ID for a title |
| asset_items[].titles[].alpha_id | Number | ODIN Alpha ID. The GPMS ID of the related title must be provided along with this parameter. |
| asset_items[].usage_classification_name | String | Usage Classification to set for this record. See Vocabulary for valid values. |
| asset_items[].usage_status_name | String | Usage Status to set for this record. See Vocabulary for valid values. |
| metadata | Object[] | A collection of custom metadata fields |
Please note the only REQUIRED value is id.
Response
- bulk_update
-
An array of the asset items updated. This should include the following fields:
asset_ownerasset_subtypeasset_typechecksumcustom_metadata_fieldsfile_sizehas_proxyidmanaged_bynamenaming_conventionoriginal_file_nametitlesusage_classificationusage_status
Bulk Create (Placeholder / Shell Records)
POST
/api/v1/asset_itemsSample Request Body
{
"asset_items": [{
"name": "PlaceholderAsset.jpg",
"folder_ids": [1234],
"titles": [{
"gpms_id": 908738,
"gpms_alpha_id": 2006240
}],
"asset_type_name": "Photo",
"asset_subtype_name": "Headshot",
"usage_status_name": "Final",
"custom_metadata_fields": [{
"category": "photo",
"label": "photo_edit_type",
"value": "Publicity"
}]
}]
}
Sample Response
{
"asset_items": [{
"asset_class": "image",
"asset_owner": "Digital Media Group",
"asset_subtype": "Headshot",
"asset_type": "Photo",
"checksum": null,
"created_at": "2021-05-06T16:50:26.565Z",
"custom_metadata_fields": [{
"category": "photo",
"label": "photo_edit_type",
"value": "Publicity"
}],
"folder_ids": [1234],
"id": 10152885,
"managed_by": "Digital Media Group",
"mcs_id": null,
"name": "PlaceholderAsset.jpg",
"size": null,
"status": "created",
"titles": [{
"gpms_id": 908738,
"id": 108462,
"gpms_id_and_name": "908738|GHOSTBUSTERS (2016)",
"name": "GHOSTBUSTERS (2016)",
"alpha": {
"id": 15506,
"alpha_id": 185783,
"alpha_name": "TH",
"alpha_owner": "DCS – Title Stewardship",
"alpha_search_name": "TH",
"gmdm_id": 2668608,
"gpms_alpha_id": 2006240,
"gpms_id": 908738,
"mcm_op_unit_lookup_value": null,
"ods_id": 0,
"source_system": "GPMS"
},
"eidr": "10.5240/9060-7F54-9FBD-8FFF-C16E-A",
"gmdm_id": 3420405,
"full_name": "GHOSTBUSTERS (2016)",
"season_number": null,
"season_number_integer": null,
"season_number_prefix": null,
"season_number_suffix": null,
"title_level": "non-episodic",
"title_type": "feature",
"walker_id": "F2903400000"
}],
"usage_classification": "Internal Use",
"usage_restriction": null,
"usage_status": null
}]
}
The bulk create endpoint is used for creating "shell" or "placeholder" asset items that are not yet backed by an asset. You may create up to 500 asset items at a time.
Request Endpoint
POST /api/v1/asset_items
Request Parameters
| Property | Type | Required | Description |
|---|---|---|---|
| asset_items | Object[] | ✅ | A collection of asset items to be updated |
| asset_items[].asset_owner_name | String | Asset Owner to set for this record. See Vocabulary for valid values. | |
| asset_items[].asset_subtype_name | String | An Asset Subtype to set for this record. See Vocabulary for valid values. | |
| asset_items[].asset_type_name | String | An Asset Type to set for this record. See Vocabulary for valid values. | |
| asset_items[].custom_metadata_fields | Object[] | A collection of Custom Metadata Fields | |
| asset_items[].gpms_ids | Number[] | Valid GPMS Title IDs to associate with this asset | |
| asset_items[].managed_by_name | String | A 'Managed By' value to set for this record. See Vocabulary for valid values. | |
| asset_items[].name | String | ✅ | File name |
| asset_items[].folder_ids | Number[] | ✅ | Folder IDs that this asset is to be assigned to. NOTE: You must have "upload" access to all folders proved here. |
| asset_items[].titles | Object[] | An array containing objects representing titles to associate to the asset item | |
| asset_items[].titles[].gpms_id | Number | GPMS ID for a title | |
| asset_items[].titles[].alpha_id | Number | ODIN Alpha ID. The GPMS ID of the related title must be provided along with this parameter. | |
| asset_items[].titles[].gpms_alpha_id | Number | GPMS Alpha ID. The GPMS ID of the related title must be provided along with this parameter. | |
| asset_items[].usage_classification_name | String | Usage Classification to set for this record. See Vocabulary for valid values. | |
| asset_items[].usage_status_name | String | Usage Status to set for this record. See Vocabulary for valid values. | |
| asset_items[].asset_class | String | Class of the expected asset. Valid values:
|
Response
The response body for a successful request will contain the following:
| Property | Type | Description |
|---|---|---|
| asset_items | Object[] | An array of all records created in this request |
| asset_items[].asset_class | String | The class of the asset. This is derived from the file extension unless provided in the request body. |
| asset_items[].asset_owner | String | Asset Owner. If not provided in the request, this is derived from the first folder in the folder_ids array |
| asset_items[].asset_subtype | String/Null | Asset Subtype (Vocabulary value) |
| asset_items[].asset_type | String/Null | Asset Type (Vocabulary value) |
| asset_items[].checksum | Null | This won't be present on shell / placeholder records |
| asset_items[].created_at | ISO8601 | Date and Time of the record's creation |
| asset_items[].custom_metadata_fields | Object[] | Reflection of the same property in the request body |
| asset_items[].folder_ids | Number[] | Reflection of the same property in the request body |
| asset_items[].id | Number | Generated ID for the newly-created record |
| asset_items[].managed_by | String | Managed By (vocabulary value). Derived from first folder if not provided in request body. |
| asset_items[].mcs_id | Null | This won't be available on shell / placeholder records |
| asset_items[].name | String | The [file]name, as given in the request body |
| asset_items[].size | Null | This won't be available on shell / placeholder records |
| asset_items[].status | String | This will be 'created' on shell / placeholder records |
| asset_items[].titles | Object[] | Titles, with nested alphas, that have been associated with this reocrd |
| asset_items[].usage_classification | String | Usage Classification (vocabulary value). Defaults to 'Internal Use' unless provided in request body. |
| asset_items[].usage_restriction | String/Null | Usage Restriction (vocabulary value) |
| asset_items[].usage_status | String/Null | Usage Status (vocabulary value) |
Archive Assets
POST
/api/v1/asset_items/archivesSample Request Body
{
"deep": [123, 456],
"standard": []
}
Sample Response
{
"asset_item_ids": [123, 456]
}
This endpoint sends the specified asset items to archive.
Request Body Parameters
| Property | Type | Required | Description |
|---|---|---|---|
| standard | number[] | ✅ | An array of asset item IDs that should be put into standard (glacier) archive |
| deep | number[] | ✅ | An array of asset item IDs that should be put into deep glacier archive |
Restore from Archive
POST
/api/v1/asset_items/restoresSample Request Body
{
"asset_item_ids": [123, 456],
"permanent": false,
"expedited": false,
"notify": true,
"expiry": 7
}
Sample Response
{
"id": 1701,
"created_by_id": 74656,
"asset_items": [
{ "id": 123, "restore_minutes_remaining": 90, "restoring": true },
{ "id": 456, "restore_minutes_remaining": 90, "restoring": true }
]
}
This endpoint restores assets from an archived state, allowing for download, transcoding, and additional processing. Restores can either be temporary or permanent.
Request Body Parameters
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
| asset_item_ids | Number[] | ✅ | The IDs of assets needing restoration | |
| permanent | Boolean | false |
Setting this to true will permanently move the asset(s) to the standard storage tier and set properties archive_status: "not archived", restore_status: "not restored" |
|
| expedited | Boolean | false |
When set to true, retrieves items in a shorter timeframe. Use sparingly, as additional costs are incurred in the restore process. |
|
| notify | Boolean | false |
When set to true, an email will be sent to the email associated to the requesting User account once the restore has completed. |
|
| expiry | Number | 30 |
The number of days to keep the assets active before they are returned to archive. Not valid for permanent restores. |
Transcode Video
POST
/api/v1/asset_items/123/transcodeSample Request Body
{
"name": "new_video_filename",
"folder_ids": [456, 789],
"custom_metadata_fields": [
{ "category": "content_details", "label": "description", "value": "Wow what a cool file" }
],
"mark_in": 60000,
"mark_out": 180000
}
Sample Response
{
"archive_status": "not archived",
"archived": false,
"asset_class": "video",
"asset_owner": "Digital Media Group",
"asset_subtype": "Theatrical",
"asset_type": "Trailer",
"asset_type_or_class": "Trailer",
"checksum": null,
"created_at": "2017-04-21T23:57:34.324Z",
"custom_metadata": {
"migration_info": {
"derived_from": "123"
},
"content_details": {
"description": "Wow what a cool file"
}
},
"downloadable": true,
"file_name": "new_video_filename.mp4",
"folder_ids": [
456, 789
],
"has_proxy": false,
"icon_status": "soulless",
"id": 5028911,
"is_audio": false,
"is_video": true,
"linked_asset_group_id": null,
"managed_by": "Digital Media Group",
"mcs_id": "newMcsIdForCreatedAsset",
"name": "new_video_filename.mp4",
"pixel_dimensions": "1920 x 1080",
"restorable": false,
"restore_hours_remaining": null,
"restore_status": "not restored",
"restored": false,
"restoring": false,
"root_title": "SKYFALL",
"scheduled_actions": [],
"season": [],
"series": [],
"shareable": true,
"show_identifier": null,
"size": 65761189,
"status": "complete",
"thumbnail_url": "https://really.long.thumbnail.url/filename.jpg?token=123abc",
"titles": [{
"gpms_id": 1123220,
"id": 101367,
"gpms_id_and_name": "1123220|SKYFALL",
"name": "SKYFALL",
"full_name": "SKYFALL",
"season_number": null,
"title_level": "nonepisodic",
"title_type": "feature"
}],
"uploaded_at": "2017-04-21T23:57:34.330Z",
"uploaded_by": "John Runner",
"usage_classification": "Internal Use",
"usage_restriction": "For your eyes only",
"usage_status": "Work in Progress",
"width": "1920",
"updated_at": "2017-04-26T21:26:47.675Z"
}
This endpoint will generate a new transcoded video asset based on the given source. Only video assets can be transcoded. The resolution of the newly-generated asset will be that of the source asset's best available proxy.
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| folder_ids | Number[] | REQUIRED. The folder(s) where the new asset will be located |
| name | String | REQUIRED. Name of the new asset. File extensions will be ignored. |
| mark_in | Number | For trimming video, the time in milliseconds where the new video should start. |
| mark_out | Number | For trimming video, the time in milliseconds where the new video should end. |
| custom_metadata_fields | Object[] | Additional Custom metadata fields to add to the new asset. |
| audio_mappings | Object | Contact runner support for assistance with this property. |
Proxies
List Available Proxies
POST
/api/v2/asset_items/proxiesSample Request Body
{
"ids": [123456],
"external_assets": [{
"external_system_name": "eagl",
"external_asset_id": "987654"
}]
}
Sample Response
{
"asset_items": [{
"id": 123456,
"asset_class": "image",
"asset_name": "test.jpg",
"original_size": 379551,
"proxies": [{
"height": 203,
"width": 250,
"size": 38265,
"type": "standard_thumbnail"
}, {
"height": 203,
"width": 250,
"size": 38265,
"type": "small_thumbnail"
}, {
"height": 455,
"width": 560,
"size": 157717,
"type": "medium_thumbnail"
}, {
"height": 812,
"width": 1000,
"size": 425096,
"type": "large_thumbnail"
}]
}],
"external_assets": [{
"external_asset_id": "987654",
"external_system_name": "eagl",
"asset_class": "video",
"asset_name": "test.mp4",
"original_size": "",
"proxies": [{
"type": "large_thumbnail",
"size": 53004,
"width": 1000,
"height": 1000
}, {
"type": "small_thumbnail",
"size": 3362,
"width": 120,
"height": 120
}, {
"type": "video_mobile",
"size": 732419,
"width": 480,
"height": 360
}, {
"type": "video_sd",
"size": 2030090,
"width": 720,
"height": 480
}, {
"type": "video_hd_720",
"size": 4814744,
"width": 1280,
"height": 720
}]
}]
}
In order to download proxies from Runner, it is necessary to know which ones are available, otherwise, you will get errors while asking for proxies that are not available for a particular asset. This endpoint can be used to retrieve that list along with basic data about the available proxies.
Request Endpoint
POST /api/v2/asset_items/proxies
Request Parameters
| Key | Type | Description |
|---|---|---|
| asset_items | Number[] | An array containing the Runner IDs of the assets you need proxies for |
| external_assets | Object[] | An array of objects containing details of external assets for which proxies are needed |
| external_assets[].external_asset_id | String | ID of the asset in the external system |
| external_assets[].external_system_name | String | Name of the external system where the asset resides |
Both of these arrays are optional and can be used independently.
Response
You'll receive back corresponding arrays for Runner and external assets with separate sets showing what proxies are available including their types.
Create Additional Proxies
POST
/api/v1/asset_items/proxiesSample Request Body
{
"asset_item_ids": [
74656
],
"action_data": {
"proxies": [
{ "type": "video-hd" }
]
}
}
Sample Response
[
{
"asset_item_id": 74656,
"status": "succeeded",
"message": "Proxy job creation succeeded.",
"jobs": [
{
"id": 22458,
"system_name": "mcs",
"system_job_id": "12a3a6a3d43a4647ab405f4e38f0f41a",
"type": "video-hd",
"status": "in progress",
"error_message": null,
"number_of_retries": 2
}
]
}
]
This endpoint can be used to generate additional proxies on an asset item.
Request Endpoint
POST /api/v1/asset_items/proxies
Request Body Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_ids | Number[] | Runner Asset Item IDs that should receive the given proxies |
| action_data | Object | Contains the requested action |
| action_data.proxies | Object[] | The proxies to be generated |
| action_data.proxies[].type | String | The type of proxy desired. See below for valid options |
Proxy Types
The proxy types listed below correspond to MCS Thumbanil and Proxy types as detailed here.
| Runner Proxy Type | MCS Proxy Type | Description |
|---|---|---|
| large_thumbnail* | large | JPG, 1000x1000 |
| medium_thumbnail* | medium | JPG, 560x560 |
| small_thumbnail* | small | JPG, 250x250 |
| video_hd_1080_plus | video-2kplus | 1920x1080, 8500kbps, h264 codec, mp4 container |
| video_hd_1080 | video-2k | 1920x1080, 6800kbps, h264 codec, mp4 container |
| video_hd_720 | video-hd | 1280x720, 3000kbps, h264 codec, mp4 containe |
| video_sd_plus* | video-sdplus | 960x540, 1650kbps, h264 codec, mp4 container |
| video_sd* | video-sd | 640x360, 560kbps, h264 codec, mp4 container |
| video_mobile* | video-3g | 480x270, 200kbps, h264 codec, mp4 containe |
| standard_audio* | standard-audio | 192kbps, mp3 format |
| video_hd_720_tc | DMG-SPHE-720p-TC | 1280x720, 3000kbps, h264 codec, mp4 container INCLUDES TIMECODE BURN-IN |
| video_sd_tc | DMG-SPHE-360p-TC | 640x360, 560kbps, h264 codec, mp4 container INCLUDES TIMECODE BURN-IN |
* Generated by default for most Runner assets
Revisions
Get Revisions for an Asset Item
GET
/api/v1/asset_items/555/revisionsSample Response
[
{
"id": 123
"mcs_id": "scr00g3-revised",
"ingest_id": 999,
},
{
"id": 456
"mcs_id": "scr00g3-revised-again",
"ingest_id": 1000,
}
]
This endpoint will retrieve all revision for a given asset item.
Request Endpoint
GET /api/v1/asset_items/:asset_item_id/revisions
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_id | Number | The unique identifier of the asset item |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| id | Number | The unique identifier of the revision |
| mcs_id | String | The unique identifier of the revision in mcs |
| ingest_id | Number | The unique identifier of the ingest for the revision |
Create Revision for an Asset Item
POST
/api/v1/asset_items/revisionsSample Request Body
{
"asset_item": {
"asset_item_id": 42,
"filename": "dont_panic.foo",
"file_size": 1280000
},
"upload_type": "http"
}
Sample Response
HTTP/1.1 201 Created
{
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"cookie": null,
"fasp_port": 33001,
"http_fallback": false,
"http_fallback_port": 443,
"remote_host": "apod.cimediacloud.com",
"remote_user": "uxassets",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"paths": [{
"source": "file",
"destination": "1428cf37d3e9494fa091ee277fe83298/file"
}],
"direction": "send",
"create_dir": true,
"destination_root": null,
"rate_policy": "fair"
},
"ingest_batch_id": 1,
"package_transfer_specs": [],
"asset_items": [{
"actions": null,
"airdate": null,
"alpha_name": null,
"alpha_names": [],
"asset_class": "image",
"episode_number": null,
"file_name": "splatoon.jpg",
"folders": [],
"gpms_id": null,
"has_playable_proxy": false,
"height": "960",
"icon_status": "replacement",
"id": 42,
"is_folder": false,
"name": "splatoon.jpg",
"restore_hours_remaining": null,
"restoring": false,
"root_title": null,
"season": null,
"show_number": null,
"size": 175076,
"subtype": null,
"tape_date": null,
"thumbnail_url": "https://really.long.thumbnail.url/bwv.jpg?token=123abc",
"title_name": null,
"title_names": [],
"type": "Image",
"uploaded_at": "2018-05-24T19:07:14.228Z",
"usage_restriction": null,
"width": "960",
"scheduled_actions": [],
"linked_asset_groups": []
}]
}
This endpoint will create a new revision of an existing asset. The replacement can be uploaded via Aspera or HTTP using the returned transfer spec.
Request Endpoint
POST /api/v1/asset_items/revisions
Request Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_id | Number | ID of asset item to be revised |
| filename | String | Name of the new file being used for the revision |
| file_size | Number | File size, in bytes, of the new file. THIS PARAMETER IS REQUIRED FOR HTTP UPLOADS |
| upload_type | String | Optional. Name of transfer protocol used to upload file. Valid values: http or aspera. Default value is aspera. |
Carts
Get Cart Data
GET
/api/v1/carts/1Sample Response
{
"asset_items": [],
"id": 2,
"name": "default",
"matches": 3,
"asset_ids_in_cart": [385,384,386],
"last_page": true,
"last_page_number": 1,
"carts": [
{
"id": 2,
"name": "Runner's Cart",
"default": true,
"created_at": "2017-05-19T23:02:56.153Z",
"asset_ids_in_cart": 3
},
{
"id": 3,
"name": "For later",
"default": false,
"created_at": "2017-06-06T23:08:48.983Z",
"asset_ids_in_cart": 0
}
]
}
This endpoint will retrieve cart data held by Compass.
Request Endpoint
GET /api/v1/carts/:id
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| id | Number | The unique identifier of the cart in the Compass system |
Create Cart
POST
/api/v1/cartsSample Request Body
{
"cart": {
"name": "A tale of two carts"
}
}
Response
HTTP/1.1 201 Created
This endpoint creates a new cart.
Request Endpoint
POST /api/v1/carts
Update Cart Name
PUT
/api/v1/carts/1234Sample Request Body
{
"cart": {
"name": "A tale of two carts"
}
}
Response
HTTP/1.1 204 No Content
This endpoint updates the name of an existing cart.
Request Endpoint
PUT /api/v1/carts/:id
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| id | Number | The unique identifier of the cart in the Compass system |
Delete Cart
DELETE
/api/v1/carts/1234Response
HTTP/1.1 204 No Content
This endpoint removes a cart, as well as disassociates any assets that belonged to the cart.
Request Endpoint
DELETE /api/v1/carts/:id
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| id | Number | The unique identifier of the cart in the Compass system |
Custom Metadata Fields
Custom Metadata Fields in Compass are a collection of records related to an
AssetItem that are built to work for multiple businesses and workflows. They
consist of category, label, and value fields.
Standard Custom Metadata Fields that can be created/edited through the Runner UI include:
| Category | Label | Type |
|---|---|---|
| Content Details | Call To Action | String[] |
| Content Details | City | String |
| Content Details | Continuity List | String |
| Content Details | Creation Date | String (ISO8601 Date) |
| Content Details | Description | String |
| Content Details | Keywords | String[] |
| Content Details | Language Audio | String |
| Content Details | Language Dubbed | String |
| Content Details | Language Original | String |
| Content Details | Language Subtitled | String |
| Content Details | Language Text | String[] |
| Content Details | Media Type | String[] |
| Content Details | One Sheet Version | String |
| Content Details | Package Type | String[] |
| Content Details | Picture Version | String |
| Content Details | Spot Length | String |
| Content Details | Region | String |
| Content Details | Setting | String |
| Content Details | Territory | String[] |
| Content Details | Version | String |
| Content Details | Year | String |
| Content Details | Source Media | String |
| GMS | GMS Vendor | String |
| GMS | Source Identifier | String |
| Gold | Sony/Gold PO# | String |
| Format Details | Application Info | String |
| Format Details | Aspect Ratio Type | String |
| Format Details | Audio Configuration | String |
| Format Details | Audio Element | String |
| Format Details | Audio Stream Content | String[] |
| Format Details | Broadcast Standard | String |
| Format Details | Color Space | String |
| Format Details | Conform Type | String |
| Format Details | Content Aspect Ratio | String |
| Format Details | Format | String |
| Format Details | Number of Reels/Parts | String |
| Format Details | Passes | String[] |
| Format Details | Presentation Aspect Ratio | String |
| Format Details | Resolution/Bit Depth | String |
| Format Details | Scan Type | String |
| Format Details | Tape ID | String |
| Format Details | Timecode | String |
| Format Details | Three Dimensional Attribute | String |
| Format Details | UHD Dynamic Range | String |
| Format Details | Version | String |
| Format Details | Video Content | String[] |
| Photo | Photo Edit Type | String[] |
| Photo | Photo Approval | String |
| Photo | Caption | String |
| Photo | Talent In Image | String[] |
| Photo | Copyright | String |
| Photo | Photo Credit | String |
| Photo | Photographer | String |
| Photo | Photo Request | String |
| Photo | Shoot Date | String (ISO8601 Date) |
| Photo | Retouched | String |
| Photo | Event Description | String |
| Photo | Premiere Description | String |
| Photo | Custom Edit Description | String |
| DBB | DBB Spec ID | String |
| MPG | MPAA Band | String |
| MPG | Script Vendor | String |
| SPT | QC Status | String |
| SPT | Spoiler | String |
| SPT | SPT DAM Source | String |
| SPT | SPT Event | String[] |
| SPT | SPT WW Networks Brand | String[] |
| SPT | Job Number | String |
| tech_info | frame_rate | String |
| tech_info | audio_streams | String[] |
| Usage | Restriction | String |
| Usage | Approval Status | String |
| Usage | Audio Replacement | String |
| Usage | Replacement Reason | String |
| Usage | Replacement Date | String (ISO8601 Date) |
| Asset Management | AM Vendor | String |
| Asset Management | Picture Reference Barcode | String |
| Asset Management | Audio Source Barcode | String |
| Architectural Services | Building Floor | String |
| Architectural Services | Building Number and Name | String |
| Architectural Services | Building Year | String |
| Architectural Services | Plan Type | String |
| Architectural Services | Project Type | String |
Vocabulary
GET
/api/v1/vocabulariesSample Response
{
"asset_owner": [{
"name": "SPT Networks - Original Programming - LatAm"
}],
"asset_type": [{
"name": "Wild Posting"
}, {
"name": "Recap",
"subtypes": [{
"name": "Season"
}, {
"name": "Episode"
}, {
"name": "Series"
}]
}, {
"name": "Rating"
}, {
"name": "Reel",
"subtypes": [{
"name": "Sizzle"
}, {
"name": "Promotional"
}, {
"name": "Executive Producer"
}, {
"name": "Clip"
}, {
"name": "Sales"
}, {
"name": "Campaign"
}, {
"name": "Exhibitors"
}, {
"name": "Gag"
}, {
"name": "Blooper"
}, {
"name": "Compilation"
}]
}, {
"name": "Radio Spot"
}, {
"name": "Rendering"
}, {
"name": "Research Book"
}, {
"name": "Questions"
}, {
"name": "Quad"
}, {
"name": "QC Report"
}, ],
"language_audio": [{
"name": "Slovak"
}, {
"name": "Punjabi"
}],
"language_text": [{
"name": "Dutch (Belgium)"
}, {
"name": "Dutch (Flemish)"
}],
"managed_by": [{
"name": "MPG Production – China"
}],
"mpaa_band": [{
"name": "Yellow"
}, {
"name": "Green"
}, {
"name": "Red"
}],
"plan_type": [{
"name": "Construction Plan"
}],
"source_media": [{
"name": "35mm OCN (Original Camera Negative)"
}],
"spe_territory": [{
"name": "Venezuela"
}, {
"name": "Moscow"
}, {
"name": "Russia"
}, {
"name": "Los Angeles"
}],
"sphe_created_for": [{
"name": "Shopper"
}, {
"name": "Digital"
}, {
"name": "Publicity"
}],
"spt_spoiler": [{
"name": "No"
}, {
"name": "Yes"
}],
"spt_ww_networks_brand": [{
"name": "AXN Mystery"
}, {
"name": "Crackle"
}],
"territory": [{
"name": "Qatar"
}, {
"name": "Senegal"
}],
"usage_classification": [{
"name": "Confidential"
}],
"usage_status": [{
"name": "Work in Progress"
}],
"video_content": [{
"name": "Without Slate"
}]
}
The top-level fields below and many standard custom metadata fields can only be set to a pre-defined set of vocabularies.
Request Endpoint
GET /api/v1/vocabularies
Asset Item Top-Level Metadata
The following fields will only accept values that are present in the Vocabulary:
asset_type_nameasset_subtype_nameusage_classification_nameusage_status_nameasset_owner_namemanaged_by_name
Folders
Folder Creation
POST
/api/v1/foldersSample Request Body
{
"name": "Test Folder",
"parent_id": 1234
}
Sample Response
HTTP/1.1 201 Created
{
"actions": {
"deletable": false
},
"id": 5678,
"is_folder": true,
"name": "Test Folder",
"permissions": null,
"size": null,
"type": "Folder",
"updated_at": "2015-04-01T23:15:32.753Z"
}
A valid call to this endpoint will create a new folder. All permissions assigned to the parent folder will be inherited by the newly created folder. Users must have the "Folder Manage" permission in order to be authorized to make this call.
Request Endpoint
POST /api/v1/folders
Request Parameters
| Key | Type | Description |
|---|---|---|
| name | String | The name of the folder to be created. Must not conflict with another folder within the parent folder. |
| parent_id | Number | The id of the folder under which this new folder is to be created. |
RESPONSE PARAMETERS
| Key | Type | Description |
|---|---|---|
| id | Number | The folder_id of the newly created folder. |
The other fields aren't really that important.
List Subfolders
GET
/api/v1/folders/42/subfoldersSample Response
HTTP/1.1 200 OK
{
"folders": [{
"id": 1701,
"has_children": false,
"name": "Child Folder A",
"permissions": {
"admin": true,
"asset_delete": true,
"download": true,
"folder_delete": true,
"folder_id": 1701,
"folder_manage": true,
"share": true,
"upload": true,
"view": true,
"watermark": false
}
}, {
"id": 74656,
"has_children": true,
"name": "Child Folder B",
"permissions": {
"admin": false,
"asset_delete": true,
"download": true,
"folder_delete": true,
"folder_id": 74656,
"folder_manage": true,
"share": true,
"upload": true,
"view": true,
"watermark": false
}
}],
"id": 42,
"name": "Parent Folder",
"permissions": {
"admin": true,
"asset_delete": true,
"download": true,
"folder_delete": true,
"folder_id": 42,
"folder_manage": true,
"share": true,
"upload": true,
"view": true,
"watermark": false
}
}
This endpoint provides a list of subfolders for a given folder id. The results list is limited to subfolders that the requesting user has access to.
Request Endpoint
GET /api/v1/folders/:folder_id/subfolders
Request Parameters
| Key | Type | Description |
|---|---|---|
| folder_id | Number | The folder ID for which subfolders are desired |
RESPONSE PARAMETERS
| Key | Type | Description |
|---|---|---|
| id | Number | The folder_id of the parent folder |
| name | String | The name of the parent folder |
| permissions | Object | Actions permitted by the requesting user for the given folder |
| folders | Object[] | Array of folder objects representing the subfolders of the requested folder |
| folders[].id | Number | ID of subfolder |
| folders[].name | String | Name of subfolder |
| folders[].has_children | Boolean | true if this subfolder contains additional folders |
| folders[].permissions | Object | Actions permitted by the requesting user for the subfolder |
Image Resize API
POST
/api/v1/asset_items/image_resizeSample Request Body
{
"asset_item_id": 353,
"folder_ids": [10],
"file_name": "my_awesome_poster_sm.png",
"width": 505,
"height": 300,
"custom_metadata_fields": [
{ "category": "some_category", "label": "cool_label", "value": "what a great value" }
]
}
The Image Resize API resizes a Runner image to the given specifications and creates a new asset record for it. Newly-created records will inherit the metadata of the asset they were derived from, unless that data is over-written with metadata in the API request parameters. This functionality utilizes the MCS convert image job endpoint
NOTE: Images may only be resized smaller than the original asset.
Request Endpoint
POST /api/v1/asset_items/image_resize
| Key | Type | Description |
|---|---|---|
| asset_item_id* | Number | The Runner ID of the asset to be resized. This must be an image asset. |
| folder_ids* | Number[] | The ID(s) of destination folders for the new asset. Upload permissions for these folders is required. |
| file_name¹ | String | The name of the new file. Only file names ending in .png or .jpg are supported. This parameter is optional if format is set. |
| format¹ | String | One of .png or .jpg. Given a format and no file_name, the generated asset will be auto-named [ORIGINAL_ASSET_NAME]_[WIDTH]x[HEIGHT].[FORMAT] |
| width² | Number | The width of the new image. Must be less than or equal to the original asset width. |
| height² | Number | The height of the new image. Must be less than or equal to the original asset height. |
| scale² | Number | Use this option to resize proportionally; e.g. 0.25 for a 100x100 image would result in a 25x25 resize. Must be a float more than 0 and less than 1. |
| ignore_source_aspect_ratio | Boolean | Allow the image to be stretched to the given dimensions, regardless of aspect ratio. Both width and height required for this option to apply. Default: false. |
| custom_metadata_fields | Object[] | Runner metadata. Valid objects in this array must contain category, label, and value key-value pairs that match the Runner vocabularies. Information in this array will override existing metadata if it has the same category & label. |
* REQUIRED
¹ At least one of file_name or format is required
² At least one of height, width, or scale is required
Image / Document Burn-In API
POST
https://services.sonypicturesrunner.com/production/image_burn_inSample Request Body
{
"asset_item_id": 353,
"filename": "uncharted.png",
"overlay": {
"text": "Authorized for use only by Nathan Drake",
"position_x": 1.0,
"position_y": 0.0,
"opacity": 0.8,
"font_size": 1.25,
"color": "#0070d1"
}
}
The Image Burn-In API generates a preview of a given image or document with text added. The download URL returned expires 60 minutes after it is created.
NOTE: Due to AWS API Gateway constraints, this endpoint will time out after 29s. If you receive a 504 Gateway Timeout, please try again after a moment; your initial request's result will be cached.
Sample Response Body
{ "url": "https://image-burn-in-bucket.s3.amazonaws.com/outgoing/6b39caf3837de48ea19f05f88577cf09?auth-params=foo" }
Request Endpoint
POST /:environment/image_burn_in
| Key | Required | Type | Description |
|---|---|---|---|
| asset_item_id | ✅ | Number | The Runner ID of the asset to be previewed. |
| filename | String | The name the burn-in asset should be downloaded as. If not set, this will be the name of the source asset. | |
| overlay | Object | ||
| overlay.text | ✅ | String | Text to overlay on the image / document. Use the \n escape sequence to create multi-line text. |
| overlay.opacity | Float | Opacity, between 0.0 and 1.0. For documents, this will change the gray level of the text if color is unset. Default: 1.0 |
|
| overlay.position_x | Float | Horizontal positioning of the overlay text. Valid values: 0.0, 0.5, 1.0. Default: 0.5 |
|
| overlay.position_y | Float | Vertical positioning of overlay text. Valid values: 0.0, 0.5, 1.0. Default: 1.0 |
|
| overlay.font_size | Float | Relative sizing of overlay font size. 1.0 is equivalent to 35px on a 1000px wide image. Default: 1.0 |
|
| overlay.color | String | A hex-formatted color string, e.g. #fb6a57. Default: null |
Frame Rate Conversion API
POST
/api/v1/asset_items/789/frame_rate_conversionSample Request Body
{
"folder_ids": [42],
"frame_rate_type": "my-frame-rate-type",
"name": "new-asset-name.mov"
}
Sample Response
HTTP/1.1 201 Created
{
"actions": {
"deletable": false,
"downloadable": false
},
"airdate": null,
"asset_class": "video",
"episode_number": null,
"gpms_id": null,
"grid_display_name": null,
"has_proxy": null,
"icon_status": "soulless",
"id": 243513,
"is_folder": false,
"name": "test_file_1.mov",
"root_title": null,
"season": null,
"show_number": null,
"size": null,
"tape_date": null,
"thumbnail_url": null,
"type": "video",
"updated_at": "2015-05-15T19:17:08.717Z"
}
The Frame Rate Conversion endpoint creates a new asset item transcoded from a given source asset item. The response is the newly-created asset item.
The given asset_item_id must:
- Have
asset_classofvideo - Have
statusofcomplete - Be downloadable by the requesting user
- If
archive_statusisarchived,restore_statusmust berestored
Contact DMG support for available frame_rate_type options.
Request Endpoint
POST /api/v1/asset_items/:asset_item_id/frame_rate_conversion
| Key | Type | Description |
|---|---|---|
| folder_ids | Number[] | The IDs of destination folders for the new asset. Upload permissions for these folders are required. |
| name | String | Name for the newly-created asset |
| frame_rate_type | String | The type of conversion to apply to the source asset |
MCS Import
MCS Import
POST
/api/v1/mcs_importsSample Request
{
"asset_items": [
{
"folder_ids": [1234],
"name": "my_test_file.jpg",
"mcs_id": "slk203okldsk0ods"
}
]
}
Sample Response
HTTP/1.1 201 Created
{
"ingest_batch_id": 8,
"asset_items": [
{
"asset_class": "image",
"file_name": "my_test_mcs_import.jpg",
"id": 366,
"folder_ids": [
16
],
"name": "my_test_mcs_import.jpg",
"size": null,
"subtype": null,
"type": "image",
"usage_restriction": null
}
]
}
A valid call to the mcs_imports endpoint will create asset records in Runner, which will be filled out after an import has completed processing.
Request Endpoint
POST /api/v1/mcs_imports
Request Parameters
Required params are bold
| Parameter | Type | Description |
|---|---|---|
| asset_items | Object[] | Array containing details about assets to be uploaded |
| asset_items[].folder_ids | Number[] | A list of folder IDs to upload the asset to |
| asset_items[].name | String | The name of the asset to be imported (must match actual file name) |
| asset_items[].mcs_id | String | The mcs asset id of the asset to be imported |
Response
| Parameter | Type | Description |
|---|---|---|
| mcs_imports | Object[] | An array of runner asset ids that were created as a result of the import |
Push Transfers
POST
/api/v1/transfersSample Request Body (Aspera)
{
"transfer_type": "push delivery",
"protocol": "aspera",
"credentials": {
"user": "asperaUser",
"password": "s3cur3P@ssw0rd",
"host": "1.1.1.1",
"fasp_port": "33001",
"ssh_port": "33001"
},
"destination_file_path": "/path/to/destination",
"asset_items": [
{
"id": 123,
"transfer_source_file": true,
"destination_path": "custom_renamed_file.mov",
"proxies": [
{
"type": "video_sd",
"destination_path": "/subfolder/custom_video.mp4"
}
]
},
{
"id": 456,
"transfer_source_file": false,
"proxies": [
{ "type": "video_sd" },
{ "type": "large_thumbnail" },
{ "type": "video_hd_720_tc" }
],
}
],
"transfer_rate_kbps": 888,
"subscriptions": [
{
"email": "runner_user@spe.sony.com",
"events": [ "success", "failure" ]
},
{
"email": "failure@example.com",
"events": [ "failure" ]
}
]
}
Sample Request Body (S3)
{
"transfer_type": "push delivery",
"protocol": "s3",
"credentials": {
"aws_access_key_id": "AKIANOTAREALID123"
"aws_secret_key": "59806efc59d8dd3931b2878/cedfbed37"
"region": "us-west-2",
"bucket": "destination-bucket",
},
"destination_file_path": "/bucket/prefix",
"asset_items": [
{
"id": 123,
"transfer_source_file": true,
"destination_path": "/subpath",
"proxies": [
{
"type": "video_sd",
"destination_path": "/proxy_subpath"
}
]
},
{
"id": 456,
"transfer_source_file": false,
"proxies": [
{ "type": "video_sd" },
{ "type": "large_thumbnail" },
{ "type": "video_hd_720_tc" }
],
}
],
"subscriptions": [
{
"email": "runner_user@spe.sony.com",
"events": [ "success", "failure" ]
},
{
"email": "failure@example.com",
"events": [ "failure" ]
}
]
}
Request Endpoint
POST /api/v1/transfers
Request Parameters
| Name | Required? | Type | Description |
|---|---|---|---|
| transfer_type | Y | String | Type of transfer to create. "push delivery" is currently the only valid value. |
| protocol | Y | String | One of "s3" or "aspera". |
| destination_file_path | Y | String | For Aspera transfers: this is directory on the destination Aspera host. For S3 Transfers: this is a prefix for objects added to the destination bucket. |
| credentials | Y | Object | Credentials and configuration for the transfer. See below for expected parameters, based on transfer protocol. |
| asset_items | Y | AssetItem[] | Collection of items for transfer (see below). Please note: AssetItems with an asset_class of package can not be combined with other asset_classes. |
| transfer_rate_kbps | N | Number | Target transfer rate, for Aspera transfer only. Note that all transfers are performed using Aspera's "Fair" policy, which will adjust dynamically to accommodate bandwidth. |
| subscriptions | N | Object[] | Optional email notifications for the created transfer |
| subscriptions[].email | Y | String | an email address to be notified on transfer completion |
| subscriptions[].events | N | String[] | Valid values are "success" and "failure". Default: ["success", "failure"] |
AssetItem Parameters
| Name | Required? | Type | Description |
|---|---|---|---|
| id | Y | Number | ID of an AssetItem for transfer |
| destination_path | N | String | For Aspera transfers: this is a subpath under the given destination_file_path. It may include a file name; if it does the source file will be renamed to this on transfer.For S3 transfers: this is an additional prefix to be appended to the top-level destination_file_path. |
| transfer_source_file | N | Boolean | Should the source file be included in the transfer? Default: trueFor package transfers, this parameter as well as the proxies options will be ignored, as only source files will be transferred for that asset class. |
| proxies | N | Object[] | Proxies for transfer |
| proxies[].type | Y | String | One of the Runner Proxy Types. This proxy must be available for the requested AssetItem or an error will be returned. |
| proxies[].destination_path | N | String | See description for destination_path above. |
Aspera Transfer Credentials
| Name | Required? | Type | Description |
|---|---|---|---|
| host | Y | String | A FQDN or IP Address for an Aspera host |
| user | Y | String | Destination Aspera username |
| password | Y | String | Destination Aspera password |
| fasp_port | Y | Number | Port for Aspera's FASP protocol. Typically 33001. |
| ssh_port | Y | Number | Port for Aspera SSH communication. Typically 33001. |
S3 Transfer Credentials
| Name | Required? | Type | Description |
|---|---|---|---|
| bucket | Y | String | Name of an AWS S3 Bucket |
| aws_access_key_id | Y | String | An AWS Access Key ID with PutObject access to the given bucket |
| aws_secret_key | Y | String | The secret key corresponding to the aws_access_key_id |
| region | Y | String | AWS Region of the destination S3 Bucket |
Receiving Asset Publish Events
Overview
When a 3rd party system integrates with Compass/Runner and needs to be aware of new, updated, or removed assets within the system, they receive notification of those changes via an event message. The recommended approach is to receive them via a queue such as JMS or SQS.
Asset Change Event
{
"event_type": "asset_change",
"transaction_id": "525bcee5-55f5-4c61-ab84-fa8e1283c9ea_9bbb02fb-0735-4f63-9989-e53bb15ece87",
"published_on": "2016-04-23T00:01:55Z",
"publisher_host_name": "granite-integration",
"publisher_application": "Compass::AssetChange",
"event_data": {
"archive_status": "not archived",
"asset_class": "image",
"asset_subtype": "Gallery",
"asset_type": "Photo",
"asset_type_or_class": "Photo",
"checksum": "c4131f02c5e7e613cca403e24f464fd3",
"custom_metadata": {
"content_details": {
"territory": ["Bhutan", "Brunei", "Korea, South", "Macau", "U.S. "],
"language_original": "English (US)",
"region": "International",
"year": "2003",
"description": "testing 2"
},
"tech_info": {
"y_resolution": "1",
"x_resolution": "1",
"width": "720",
"height": "960"
},
"legacy_info": {
"competitive": "No",
"region": "International",
"language___audio": "English"
},
"migration_info": {
"file_path": "/dmr100/Assets/2015/11/6/6fe88890-8db9-424e-b343-8c94518d7f73.mov",
"checksum": "3f25dfbaca9a8d3663c3eb82a1089f0d",
"original_uploaded_by": "Dustin Mccarthy",
"original_upload_date": "2015-11-06T18:41:06.000-08:00",
"external_file_id": "10660328",
"business_owner": "MP AV Mktg Post Production",
"migrated_from_system": "eagl",
"external_asset_id": "2620713"
}
},
"downloadable": true,
"file_name": "ABMoviePoster.jpg",
"folder_ids": [32023],
"has_proxy": null,
"icon_status": "available",
"id": 1275761,
"is_audio": false,
"is_video": false,
"metadata": null,
"mcs_id": "851dac0ca39d4051a30359f74c5f305a",
"name": "ABMoviePoster.jpg",
"pixel_dimensions": "720 x 960",
"restore_hours_remaining": null,
"restore_status": "not restored",
"restorable": false,
"restoring": false,
"root_title": "HOTEL TRANSYLVANIA 2",
"show_identifier": null,
"size": 49041,
"status": "complete",
"thumbnail_url": "https://...cloudfront.net/cifiles/../thumbnail.jpg?Policy=..44WA",
"titles": [{
"name": "HOTEL TRANSYLVANIA 2",
"gpms_id": 1210713
}],
"uploaded_at": "2016-04-05T08:14:49.681+00:00",
"uploaded_by": "SPT B2B Service Account",
"usage_classification": "Internal Use",
"usage_restriction": null,
"usage_status": "Final",
"width": "720",
"updated_at": "2016-04-23T00:01:52.733Z"
}
}
The event published upon modification of an asset contains some information about the source of the event, as well as an event_data block that contains all of the updated asset metadata. The event_data is the same serialization of the asset as in the Get Asset API.
Important Fields
| Field | Description |
|---|---|
| event_type | The possible fields for this are asset_change and asset_remove. Creates and updates both will come as changes. Removes can be triggered by deletion of the file or loss of access to that file. |
| transaction_id | This is just there for troubleshooting purposes as it should be easy to find in log files. During testing, we may refer to it to identify the exact message that is sent to the target queue. |
| event_data | This is the meat of the published event. It contains our serialized asset as if you had queried for it via our API. |
Scheduled Actions
Get Asset Scheduled Actions Data
GET
/api/v1/asset_items/42/scheduled_actionsSample Response
{
"scheduled_actions": [
{
"asset_item_group_id": 15,
"date": "2018-01-17T18:55:13.747Z",
"folder_names": [
"Destination Folder"
],
"source_folder": "Source Folder",
"type": "move",
"user": "Jenkins Joe",
},
{
"asset_item_group_id": 17,
"date": "2018-01-12T22:50:05.018Z",
"folder_names": [
"Destination Folder",
"DMG"
],
"source_folder": "Source Folder",
"type": "copy",
"user": "Jenkins Joe",
},
{
"asset_item_group_id": 19,
"date": "2018-01-12T22:50:05.018Z",
"folder_names": [
"Destination Folder",
"DMG"
],
"source_folder": null,
"type:" "copy",
"user": "Jenkins Joe",
},
]
}
Request Endpoint
GET /api/v1/asset_items/:asset_item_id/scheduled_actions
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| asset_item_id | Number | The unique identifier of the asset in the Compass system |
Search
Query Search API
GET
/api/v1/search?query="query"Example Response
{
"aggregations": {
"year": {
"2018": 1
},
"call_to_action": {
"Available for Digital Download": 1
},
"language_audio": {
"Afghan/Pashtu": 1
},
"title_type": {},
"usage_status": {
"Archive": 2
},
"setting": {
"Chroma Screen": 1
},
"media_type": {
"Digital": 1
},
"season": {
"801187|JEOPARDY! // Season #15": 1
},
"photo_edit_type": {
"Custom": 1
},
"gms_vendor": {
"103-Todd AO": 1
},
"project_type": {
"Architectural": 1
},
"approval_status": {
"Approved": 1
},
"asset_class": {
"document": 4,
"video": 1
},
"retouched": {
"Retouched": 1
},
"usage_classification": {
"Confidential": 2,
"Internal Use": 2
},
"format": {
"BD": 1
},
"language_subtitled": {
"Afghan/Pashtu": 1
},
"frame_rate": {
"24": 1,
"25.0": 1
},
"video_content": {
"Texted": 1
},
"building_year": {
"2000": 1,
"2002": 1
},
"qc_status": {
"In Progress": 1
},
"file_extension": {
"txt": 4,
"mp4": 1
},
"region": {
"Domestic (U.S.)": 1
},
"presentation_aspect_ratio": {
"16:9": 1
},
"plan_type": {
"Abbreviations": 1
},
"asset_subtype": {},
"audio_configuration": {
"11 (Discrete)": 1
},
"city": {
"Los Angeles": 2
},
"managed_by": {
"Digital Media Group": 1
},
"uploaded_by": {
"Joe Runneruser": 5
},
"broadcast_standard": {
"4K": 1
},
"assembly": {
"Archive": 1
},
"language_text": {
"Afrikaans": 1
},
"asset_type": {
"Building Document": 3
},
"asset_owner": {
"Digital Media Group": 2
},
"content_aspect_ratio": {
"1.20": 1
},
"color_space": {
"4:2:0": 1
},
"pixel_dimensions": {
"1280 x 720": 1
},
"language_original": {
"Afghan/Pashtu": 1
},
"spt_dam_source": {
"EPKintl.tv": 1
},
"building_number_and_name": {
"000 - Sony Studio Lot": 1,
"001 - Colonnade": 1
},
"subtitle_type": {},
"spt_event": {
"CES": 1
},
"aspect_ratio_type": {
"Full Frame (FF)": 2,
"Full Height Anamorphic (FHA)": 1
},
"titles": {
"774056|JEOPARDY!": 5,
"744445|WHEEL OF FORTUNE": 1,
"801200|JEOPARDY! // Season #15 // EPISODE # // JEOPARDY!": 1,
"801201|JEOPARDY! // Season #15 // EPISODE # // JEOPARDY!": 1,
"801202|JEOPARDY! // Season #15 // EPISODE # // JEOPARDY!": 1,
"915556|AMAZING SPIDER-MAN, THE": 1
},
"spt_ww_networks_brand": {
"ANIMAX": 1
},
"series": {
"774056|JEOPARDY!": 5,
"744445|WHEEL OF FORTUNE": 1
},
"alphas": {},
"dbb_spec_id": {},
"language_dubbed": {
"Afghan/Pashtu": 1
},
"photo_approval": {
"Approved": 1
},
"territory": {
"U.S.": 2,
"Algeria": 1,
"Angola": 1
}
},
"asset_items": [{
"actions": {
"can_cancel": {},
"can_copy": true,
"can_delete": true,
"can_edit": true,
"can_move": true,
"can_rename": true,
"can_restore": false,
"can_replace": true,
"can_share": true,
"can_view": true,
"can_update_thumbnail": true,
"can_watermark": false,
"can_download_original": true,
"can_download_proxy": true,
"can_upload": true
},
"airdate": null,
"alpha_name": null,
"alpha_names": [],
"asset_class": "document",
"episode_number": null,
"file_name": "01.txt",
"folders": [{
"id": 16,
"name": "Top Folder"
},
{
"id": 17,
"name": "Subfolder"
}
],
"gpms_id": 774056,
"has_playable_proxy": false,
"height": null,
"icon_status": "available",
"id": 347,
"is_folder": false,
"name": "01.txt",
"restore_hours_remaining": null,
"restoring": false,
"root_title": "JEOPARDY!",
"season": null,
"show_number": null,
"size": null,
"subtype": null,
"tape_date": null,
"thumbnail_url": "https://cdn01.cimediacloud.com/cifiles/41082b2093004b83b2e8e0640505fcc2/cover/cover-124006e1-9ffd-4a2a-a452-7b78dbdff963-small.jpg?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiKjovL2NkbjAxLmNpbWVkaWFjbG91ZC5jb20vY2lmaWxlcy80MTA4MmIyMDkzMDA0YjgzYjJlOGUwNjQwNTA1ZmNjMi9jb3Zlci9jb3Zlci0xMjQwMDZlMS05ZmZkLTRhMmEtYTQ1Mi03Yjc4ZGJkZmY5NjMtc21hbGwuanBnIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIwLjAuMC4wLzAifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE1OTU1MjI2MzJ9fX1dfQ__\u0026Signature=auMurs8cbddDE-F04ThuWgqGZXRex75iW~RWxMeYOTsnAF~A1JnrChmsNz0WSLL-uE7ok6yg8cxhPH-gCqYZm77VdTwQa4jjLnduh58gDDvQOWye~IsLiCfE-9EGyaYFIEjkiMCW94Mey1EUpG-M2Mt-9-cT6XEqbuWRrHoabik_\u0026Key-Pair-Id=APKAJNUSFH4IKQRZ44WA",
"title_name": "JEOPARDY!",
"title_names": [
"JEOPARDY!"
],
"type": "Document",
"uploaded_at": "2018-07-23T23:23:38.103Z",
"usage_classification": "Internal Use",
"usage_restriction": null,
"width": null,
"scheduled_actions": [],
"linked_asset_groups": []
}],
"last_page": true,
"matches": 5,
"subscription_id": null
}
Request response
The search endpoint returns a paginated collection of results including:
- Array of asset items
- Aggregation data (number of results matching specific metadata)
- Pagination data (page number or last page flag)
- Number of matches
Parameters
| Parameter | Values | Description |
|---|---|---|
| without_aggregations | Boolean | Don't include aggregations in the response (Default: false) |
| per_page_index | 0, 1 |
Return 50 items per page if 0, 100 if 1 (Default: 0) |
| page | Number | Page number of result set |
| column | name, type, size, upload_date |
Sort results by this field (Default is sorted by search relevance) |
| sort_direction | asc, desc |
Sort direction |
| user_local_timezone | String | For date queries, adjust results to this timezone, e.g. -07:00 (Default: UTC) |
| filters | String | Comma-separated key:value search filters; inspect search URL after applying a filter in the Runner UI for examples |
Using keywords
| Keyword | Result |
|---|---|
| * | All assets in your account |
| "Breaking Bad" (any words or spaces between quotes) | Exact match |
| Unit OR "Special Shoot" | This or that |
| -Watson | Do not include |
| season:24 | Specific metadata |
| title:"american hustle" | Specific metadata |
| gpmsid:906429 | Specific metadata |
| id:[2114291, 2102877, 1820425] | Specific assets |
| episode:[0301-0413] | Range |
| season:>10 | Range |
| jeopardy themeweek:* (Jeopardy shows with a theme week) | Combo |
Shares
Create Share
POST
/api/v1/sharesExample Runner Share Request Body
{
"include_asset_items": true,
"share": {
"subject": "Test Share",
"message": "Test Message which<br />can contain <h3>HTML <strong>in the message.</strong></h3>",
"recipients": [
"test_user@spe.sony.com",
"another_user@spe.sony.com"
],
"asset_item_ids": [
12345,
65432
],
"items": [{
"asset_item_id": 42,
"custom_name": "Spider-ManABC123"
}],
"share_type": "standard",
"permissions": {
"download": true,
"download_proxy": true,
"preview": true
},
"share_template_name": "runner",
"expiration": "2016-12-09T15:41:40+00:00",
"overlay": {
"text": "PROPERTY OF SONY PICTURES ENTERTAINMENT",
"position": "center top",
"opacity": 0.5,
"font_size": 1.2
},
"display_recipients": false,
"watermark_type": null
}
}
Example Response
{
"asset_items": [
{
"archive_status": "not archived",
"asset_class": "video",
"asset_type": "Trailer",
"asset_subtype": "Theatrical",
"file_size": 65761189,
"has_proxy": true,
"height": "1080",
"id": 5028911,
"name": "Glass_Half.mp4",
"restore_status": "not restored",
"status": "complete",
"thumbnail_url": "https://d14nxlyhj878kl.cloudfront.net/cifiles/add09ed0685446d1bfb174a9787e60e7/renditions/thumbnail.jpg?Policy=abc123",
"titles": [
{
"name": "SKYFALL",
"gpms_id": 1123220,
"gpms_id_and_name": "1123220|SKYFALL"
}
],
"width": "1920",
"usage_restriction": "For your eyes only"
}
],
"bcc": null,
"delayed": false,
"display_recipients": false,
"expiration": "2017-04-02T00:00:00Z",
"expired": true,
"external_assets": [],
"id": 129853,
"message": "Check out this awesome content on Sony Pictures Runner",
"recipients": [
{
"email": "runner_user@spe.sony.com",
"expiration": "2017-04-02T00:00:00.000Z",
"id": 260600,
"is_protected": false,
"user_id": 2217,
"uuid": "2dba303f-281c-4105-a3d2-f8405d500ca6"
}
],
"share_type": "standard",
"subject": "I've shared an asset with you!",
"titles": [
{
"name": "SKYFALL",
"gpms_id": 1123220,
"gpms_id_and_name": "1123220|SKYFALL"
}
],
"user": {
"email": "runner_user@spe.sony.com",
"first_name": "Runner",
"last_name": "The Hedgehog"
},
"uuid": "2dba303f-281c-4105-a3d2-f8405d500ca6",
"watermark": false
}
Shares allow a set of assets to be accessed by users who may or may not be registered with Runner. They create a customized page to view and access the selected assets that is protected by a token send via an email.
There are three types of shares:
- standard: This will generate an email containing a link through which you can access the share.
- protected: This will generate an email containing a link that generates a 5-minute single-use link in a subsequent email. This may sound redundant, but is effective against preventing proliferation of a sensitive link were it to leaked to the public.
- open: It is not recommended for 3rd party integrations to use open shares. If you think this is what you want to use, please contact the Runner team.
Request Endpoint
POST /api/v1/shares
Request Parameters
| Key | Type | Description |
|---|---|---|
| include_asset_items | Boolean | (optional, default: true) Prevent asset items from being included in the response body |
| share | Object | (required) Object containing share details |
| share.subject | String | (required) The subject of the email to be sent to share recipients |
| share.message | String | (required) The text of the email. This will also show up on the share page. It may contain raw HTML |
| share.recipients | String[] | (required) A set of email addresses. All addresses must be well formed or the entire message will be rejected. If the email address is recognized by Runner, it will be associated to that user's account automatically |
| share.asset_item_ids | Number[] | (required) A list of Runner IDs to be shared |
| share.bcc | String[] | Email addresses to set in the BCC field |
| share.cc | String[] | Email addresses to set in the CC field |
| share.items | Object[] | Alternative to asset_item_ids. Use the items array if you need to provide a custom_name for each asset item. NOTE: items and asset_item_ids may not be combined. |
| share.items.asset_item_id | Number | ID of Runner Asset Item |
| share.items.custom_name | String | File name replacement for the given asset item within the context of this share. This will affect the display of the item in share emails as well as the share page, and will override the downloaded filename when possible. NOTE: File extensions will be ignored. |
| share.share_type | String | (optional) This controls the behavior of the share being created. See above for descriptions of the share types. |
| share.overlay | Object | (optional) Specifies a text overlay to display in the preview player. |
| share.overlay.text | String | (required) Text to overlay. Line breaks may be included with the "\n" escape. |
| share.overlay.opacity | Float | (optional) Opacity of the overlaid text. Default: 1.0 |
| share.overlay.email_overlay | Boolean | (optional) Setting this property to true will append the share recipient's email address to the overlay on a new line. |
| share.overlay.font_size | Float | (optional) Relative font size, default: 1.0. A value of 1.0 is equal to 3.43% of the asset's width, e.g. for a 408px wide video, the font would be 14px. NOTE: text will not be wrapped if it exceeds the width of the asset. |
| share.overlay.position | String | (optional) A text string representing the overlay position, with x value followed by y value. X values: 'left', 'center', 'right'; Y values: 'top', 'center', 'bottom'. Default: 'center bottom' THIS PROPERTY CANNOT BE COMBINED WITH position_x or position_y |
| share.overlay.position_x | Float | (optional) Alternative to position to provide a more specific positioning along the X axis. Value should be between 0 and 1. Default: 0.5 |
| share.overlay.position_y | Float | (optional) Alternative to position to provide a more specific positioning along the Y axis. Value should be between 0 and 1. Default: 1.0 |
| share.permissions | Object | (required) This controls what the recipients of the share are allowed to do. All values should be either true or false. |
| share.permissions.download | Boolean | (required) whether the recipients can download the source file(s) |
| share.permissions.download_proxy | Boolean | (optional) whether the recipients can download proxies. If not present, this defaults to the same value as download |
| share.permissions.preview | Boolean | (required) whether the recipients can preview assets |
| share.share_template_name | String | (optional, service accounts only) This controls the visual layout and banner of the share page and email. See below for the list of valid values. |
| share.expiration | Date | (required) This is the date at which the share will expire. After this date the share page and any links utilizing the uuid share token for authentication will not be accessible. |
| share.sender_email | String | (optional, service accounts only) Populates "from" field when created by service account |
| share.sender_first_name | String | (optional, service accounts only) Adjusts message text when created by service account |
| share.sender_last_name | String | (optional, service accounts only) Adjusts message text when created by service account |
| share.display_recipients | Boolean | (optional) If true, all share recipients will see the list of emails to whom the share was sent |
| share.watermark_type | String | (optional) Add this parameter if you require a forensic watermark. Valid values: proxy (standard forensic watermark), or prores (Prores forensic watermarked source).NOTE: You must have watermark permissions to apply this parameter. |
| share.image_resize_options | Object | (optional) If provided, will resize any images in the share to the given parameters. Cannot be used in conjunction with burn-in watermarks. One or more of scale, width or height is required. Images will not be sized larger than their original dimensions. |
| share.image_resize_options.scale | Number | (optional) Float between 0 and 1 that represents proportional resizing |
| share.image_resize_options.height | Number | (optional) Resize images to given height (in pixels) |
| share.image_resize_options.width | Number | (optional) Resize images to given width (in pixels) |
| share.image_resize_options.format | String | (required) One of .png or .jpg |
Share Template Names
Valid values are one of:
mpg_exhibitor_relationsmpg_publicity_aumpg_publicity_dommpg_publicity_intlmpg_publicity_nzrunner(default)runner_metadatasphe_added_valuespt_b2b
RESPONSE PARAMETERS
The response contains the share data echoed back to the caller.
Share Activity
GET
/api/v1/shares/by_user?page=1&share_status=active&user_id=1234Example Response
HTTP/1.1 200 OK
{
"shares": [{
"asset_items": [{
"archive_status": "not archived",
"asset_class": "video",
"asset_type": "Trailer",
"asset_subtype": "Theatrical",
"file_size": 65761189,
"has_proxy": true,
"height": "1080",
"id": 5028911,
"name": "Test_file.mp4",
"restore_status": "not restored",
"status": "complete",
"thumbnail_url": "https://my.thumbnail.url/thumbnail_file.jpg?token=wowWhatACoolFile"
"titles": [{
"name": "SKYFALL",
"gpms_id": 1123220,
"gpms_id_and_name": "1123220|SKYFALL"
}],
"width": "1920",
"usage_restriction": "For your eyes only"
}],
"bcc": null,
"created_at": "2017-04-27T00:09:35Z",
"delayed": false,
"download": true,
"expiration": "2017-05-04T00:09:31Z",
"expired": false,
"external_assets": [],
"id": 129852,
"message": "Test_file.mp4 has been shared with you!",
"recipients": [{
"email": "runner@spe.sony.com",
"expiration": "2017-05-04T00:09:31.000Z",
"id": 260599,
"user_id": 2217
}],
"share_type": "standard",
"subject": "Test_file.mp4 has been shared with you!",
"titles": [{
"name": "SKYFALL",
"gpms_id": 1123220,
"gpms_id_and_name": "1123220|SKYFALL"
}],
"user": {
"email": "recipient@spe.sony.com",
"first_name": "James",
"last_name": "Bond"
},
"watermark": false
}],
"matches": 5
}
The share activity endpoint returns a paginated collection of a user's shares.
Request Endpoint
GET /api/v1/shares/by_user
URL Parameters
| Parameter | Type | Description |
|---|---|---|
| user_id | Number | Optional. Defaults to the user ID of the authenticated user. Only system admin users may request share activity for other users. |
| share_status | String | Optional. Status of shares to return. Valid statuses are active (default), pending, or expired. |
| page | Number | Optional. As a paginated API, additional pages can be requested by increasing this number. (Defaults to 1) |
Response
| Parameter | Type | Description |
|---|---|---|
| shares | Object[] | A collection of shares |
| shares[].asset_items | Object[] | A collection of Assets attached to the share |
| shares[].bcc | String | Email address to set in the BCC field |
| shares[].delayed | Boolean | true if the share has not yet been sent |
| shares[].download | Boolean | true if recipients of the share can download the original asset |
| shares[].expiration | String | ISO8601 formatted date string. The share will not be available after this date. |
| shares[].expired | Boolean | true if the current date is past the expiration |
| shares[].external_assets | Object[] | A collection of Assets hosted by an external service. |
| shares[].id | Number | ID representing the share in Compass |
| shares[].message | Text | Message body included in the share's email. Note: This text may contain unescaped HTML |
| shares[].recipients | Object[] | Collection of share recipients |
| shares[].share_type | String | Share Type. This will be one of standard, protected, or open |
| shares[].subject | String | Subject line of the share's email message |
| shares[].titles | Object[] | Collected titles of all associated asset items |
| shares[].user.email | String | email address of the user that created the share |
| shares[].user.first_name | String | first name of the user that created the share |
| shares[].user.last_name | String | last name of the user that created the share |
| shares[].watermark | Boolean | Asset Items associated with this share have been watermarked |
| matches | Number | Total count of shares for this user_id & share_status |
Update share expiration date
POST
/api/v1/shares/42/expirationsExample Runner Share Update Expiration Request Body
{
"expiration": "2022-12-12T12:22:12Z"
}
Titles
Get Title Data
GET
/api/v1/titles/12345Sample Response
{
"gpms_id": 12345,
"id": 13615,
"metadata": {
"episode_number": "0109",
"level_1_title": "CUPID",
"us_release_year": "1999",
"full_title": "CUPID: SEASON 01: EP# 0109 - BACHELORETTE PARTY",
"genre": [{
"description": "Award Winning",
"type": "Corporate"
}, {
"description": "Award Winning",
"type": "SPHE Genre - Australia"
}, {
"description": "Award Winning",
"type": "SPHE Genre - U.S./English"
}, {
"description": "COMEDIA",
"type": "SPHE Genre - Spain"
}, {
"description": "COMEDIE",
"type": "SPHE Genre - Belgium/French-speaking"
}, {
"description": "COMEDIE",
"type": "SPHE Genre - France"
}, {
"description": "Comedy",
"type": "Corporate"
}, {
"description": "Comedy",
"type": "SPHE Genre - Australia"
}, {
"description": "Comedy",
"type": "SPHE Genre - U.S./English"
}, {
"description": "Comedy",
"type": "SPHE Genre - United Kingdom"
}, {
"description": "Commedia",
"type": "SPHE Genre - Italy"
}, {
"description": "DRAMA",
"type": "SPHE Genre - Belgium/Dutch-speaking"
}, {
"description": "DRAMA",
"type": "SPHE Genre - Brazil"
}, {
"description": "DRAMA",
"type": "SPHE Genre - Germany"
}, {
"description": "DRAMA",
"type": "SPHE Genre - Netherlands"
}, {
"description": "DRAME",
"type": "SPHE Genre - Belgium/French-speaking"
}, {
"description": "DRAME",
"type": "SPHE Genre - France"
}, {
"description": "Drama",
"type": "Corporate"
}, {
"description": "Drama",
"type": "SPHE Genre - Australia"
}, {
"description": "Drama",
"type": "SPHE Genre - Denmark"
}, {
"description": "Drama",
"type": "SPHE Genre - Ireland"
}, {
"description": "Drama",
"type": "SPHE Genre - Mexico"
}, {
"description": "Drama",
"type": "SPHE Genre - Norway"
}, {
"description": "Drama",
"type": "SPHE Genre - Sweden"
}, {
"description": "Drama",
"type": "SPHE Genre - U.S./English"
}, {
"description": "Drama",
"type": "SPHE Genre - United Kingdom"
}, {
"description": "Drammatico",
"type": "SPHE Genre - Italy"
}, {
"description": "KOMEDIE",
"type": "SPHE Genre - Netherlands"
}, {
"description": "Komedi",
"type": "SPHE Genre - Sweden"
}, {
"description": "Komedia",
"type": "SPHE Genre - Finland"
}, {
"description": "Komedie",
"type": "SPHE Genre - Denmark"
}, {
"description": "Komedie",
"type": "SPHE Genre - Norway"
}, {
"description": "ROMANCE",
"type": "SPHE Genre - Brazil"
}, {
"description": "Romance",
"type": "Corporate"
}, {
"description": "Romance",
"type": "SPHE Genre - U.S./English"
}, {
"description": "Romantico",
"type": "SPHE Genre - Italy"
}, {
"description": "Women's",
"type": "Corporate"
}],
"alternate_ids": [{
"id": "D-000459203",
"type": "AGICOA Declaration"
}, {
"id": "160867-10",
"type": "AGICOA Work Number"
}, {
"id": "45877",
"type": "catalog"
}, {
"id": "tt0551368",
"type": "imdb"
}, {
"id": "0000-0000-C6F6-0008-6-0000-0000-J",
"type": "isan"
}, {
"id": "BACPA0",
"type": "sony_sound_abbr"
}, {
"id": "S0869999009",
"type": "walker"
}],
"original_language": "English",
"copyright_year": "",
"copyright_line": "",
"blended_copyright_line": "",
"broadcast_run_length": "60",
"runtime_minutes": "60",
"is_pilot": false,
"made_for_media": "FTV Scheduled Network - Standard",
"first_release_media": "FTV Scheduled Network - Standard",
"music_status": "Undetermined - Consult Music Legal",
"status": "Active",
"alternate_names": [{
"name": "BACHELORETTE PARTY",
"language": "",
"type_description": "CAD Episode"
}, {
"name": "BACHELORETTE PARTY",
"language": "",
"type_description": "Primary"
}, {
"name": "CUPID",
"language": "",
"type_description": "Series"
}, {
"name": "CUPID",
"language": "",
"type_description": "CAD"
}, {
"name": "Bachelorette Party",
"language": "",
"type_description": "Display Title"
}],
"product_companies": null,
"talent": [{
"artist_first_name": "Scott",
"artist_middle_name": "",
"artist_last_name": "Winant",
"suffix": "",
"capacity_description": "Executive Producer",
"capacity_rank": 5,
"artist_capacity_rank": 18,
"character_name": ""
}, {
"artist_first_name": "Scott",
"artist_middle_name": "",
"artist_last_name": "Sanders",
"suffix": "",
"capacity_description": "Executive Producer",
"capacity_rank": 4,
"artist_capacity_rank": 18,
"character_name": ""
}, {
"artist_first_name": "Ron",
"artist_middle_name": "",
"artist_last_name": "Osborn",
"suffix": "",
"capacity_description": "Executive Producer",
"capacity_rank": 3,
"artist_capacity_rank": 18,
"character_name": ""
}, {
"artist_first_name": "Rob",
"artist_middle_name": "",
"artist_last_name": "Thomas",
"suffix": "",
"capacity_description": "Executive Producer",
"capacity_rank": 2,
"artist_capacity_rank": 18,
"character_name": ""
}, {
"artist_first_name": "Joe",
"artist_middle_name": "",
"artist_last_name": "Voci",
"suffix": "",
"capacity_description": "Executive Producer",
"capacity_rank": 1,
"artist_capacity_rank": 18,
"character_name": ""
}, {
"artist_first_name": "Jeff",
"artist_middle_name": "",
"artist_last_name": "Reno",
"suffix": "",
"capacity_description": "Executive Producer",
"capacity_rank": 6,
"artist_capacity_rank": 18,
"character_name": ""
}, {
"artist_first_name": "Dahlia",
"artist_middle_name": "",
"artist_last_name": "Borthwick",
"suffix": "",
"capacity_description": "Teleplay",
"capacity_rank": 1,
"artist_capacity_rank": 42,
"character_name": ""
}, {
"artist_first_name": "Scott",
"artist_middle_name": "",
"artist_last_name": "Atkinson",
"suffix": "",
"capacity_description": "Actor",
"capacity_rank": 5,
"artist_capacity_rank": 1,
"character_name": ""
}, {
"artist_first_name": "Paula",
"artist_middle_name": "",
"artist_last_name": "Marshall",
"suffix": "",
"capacity_description": "Actor",
"capacity_rank": 4,
"artist_capacity_rank": 1,
"character_name": ""
}, {
"artist_first_name": "Kelly",
"artist_middle_name": "",
"artist_last_name": "Miller",
"suffix": "",
"capacity_description": "Actor",
"capacity_rank": 3,
"artist_capacity_rank": 1,
"character_name": ""
}, {
"artist_first_name": "Jessica",
"artist_middle_name": "",
"artist_last_name": "Tuck",
"suffix": "",
"capacity_description": "Actor",
"capacity_rank": 2,
"artist_capacity_rank": 1,
"character_name": ""
}, {
"artist_first_name": "Jeremy",
"artist_middle_name": "",
"artist_last_name": "Piven",
"suffix": "",
"capacity_description": "Actor",
"capacity_rank": 1,
"artist_capacity_rank": 1,
"character_name": ""
}, {
"artist_first_name": "Jeffrey",
"artist_middle_name": "D.",
"artist_last_name": "Sams",
"suffix": "",
"capacity_description": "Actor",
"capacity_rank": 6,
"artist_capacity_rank": 1,
"character_name": ""
}, {
"artist_first_name": "Stephen",
"artist_middle_name": "",
"artist_last_name": "Cragg",
"suffix": "",
"capacity_description": "Director",
"capacity_rank": 1,
"artist_capacity_rank": 15,
"character_name": ""
}, {
"artist_first_name": "Jeremy",
"artist_middle_name": "",
"artist_last_name": "Piven",
"suffix": "",
"capacity_description": "Producer",
"capacity_rank": 2,
"artist_capacity_rank": 29,
"character_name": ""
}, {
"artist_first_name": "Edward",
"artist_middle_name": "",
"artist_last_name": "Ledding",
"suffix": "",
"capacity_description": "Producer",
"capacity_rank": 1,
"artist_capacity_rank": 29,
"character_name": ""
}, {
"artist_first_name": "W.G.",
"artist_middle_name": "Snuffy",
"artist_last_name": "Walden",
"suffix": "",
"capacity_description": "Composer",
"capacity_rank": 1,
"artist_capacity_rank": 10,
"character_name": ""
}, {
"artist_first_name": "Kelly",
"artist_middle_name": "",
"artist_last_name": "McCarthy",
"suffix": "",
"capacity_description": "Co-Producer",
"capacity_rank": 1,
"artist_capacity_rank": 9,
"character_name": ""
}],
"initial_release_dates": [{
"media": "Home Video",
"region_flag": "D",
"release_date": ""
}, {
"media": "Home Video",
"region_flag": "I",
"release_date": ""
}, {
"media": "Network",
"region_flag": "D",
"release_date": "1999-01-28 00:00:00.0"
}, {
"media": "Pay TV",
"region_flag": "D",
"release_date": ""
}, {
"media": "Syndication",
"region_flag": "D",
"release_date": ""
}, {
"media": "Syndication",
"region_flag": "I",
"release_date": ""
}, {
"media": "Theatrical",
"region_flag": "D",
"release_date": ""
}, {
"media": "Theatrical",
"region_flag": "I",
"release_date": ""
}],
"group_categories": [{
"type_description": "Aspect Ratio",
"description": "1.33"
}],
"synopses": [{
"type_description": "DLD-4000",
"language_description": "English",
"synopsis": "While planning an old friend's bachelorette party at Taggerty's, Claire insists that Trevor not be there. Yet, despite having come down with a bad cold, he's determined to help Claire and her friends celebrate Joanne's last night of being single. And when Trevor makes sure the bartender takes ill, Claire must accept that he's there to stay. In the midst of the drunken revelry of the bachelorette party, all but Heather happily recall their sexual adventures and misspent youth. Meanwhile, after Champ lands a role in a play that requires nudity, Trevor suggests he get some practice by filling in for the party's missing stripper. After Trevor takes her aside for a private moment, Heather announces that she's currently having an affair with Joanne's fiancé, Ben. As everyone turns on Heather, Trevor suggests listening to Ben before jumping to any conclusions. And just as Joanne and Heather are about to come to blows, Ben arrives at Taggerty's, unaware of what awaits him. Meanwhile, when Champ makes his appearance in the nude, the roomful of shocked women cause his act to fall flat. When it seems that Joanne is determined to go through with the wedding, Claire takes time to listen to Heather's side of the story while Trevor speaks with Ben. And though Ben insists on getting married, Trevor helps him realize that it would be a big mistake. As Joanne sees that Ben is really in love with someone else, Heather persuades Claire of just how serious the romance really is. Finally, as Claire returns to Taggerty's, Joanne realizes that it's time she got on with her life by letting Ben and Heather get on with theirs.",
"source_description": "SPT",
"source_id": "60010024",
"primary_synopsis_flag": false
}, {
"type_description": "DLD-43",
"language_description": "English",
"synopsis": "Claire hosts a friend's bachelorette party.",
"source_description": "SPT",
"source_id": "60010024",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPHE U.S./English",
"source_id": "60013830",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPHE United Kingdom",
"source_id": "60013840",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPHE Ireland",
"source_id": "60013582",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPHE Australia",
"source_id": "60013410",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPHE Singapore",
"source_id": "60013750",
"primary_synopsis_flag": false
}, {
"type_description": "DLD-250",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPT",
"source_id": "60010024",
"primary_synopsis_flag": false
}, {
"type_description": "Long",
"language_description": "English",
"synopsis": "While planning an old friend's bachelorette party at Taggerty's, Claire insists that Trevor not be there. Yet, despite having come down with a bad cold, he's determined to help Claire and her friends celebrate Joanne's last night of being single. And when Trevor makes sure the bartender takes ill, Claire must accept that he's there to stay. In the midst of the drunken revelry of the bachelorette party, all but Heather happily recall their sexual adventures and misspent youth. Meanwhile, after Champ lands a role in a play that requires nudity, Trevor suggests he get some practice by filling in for the party's missing stripper. After Trevor takes her aside for a private moment, Heather announces that she's currently having an affair with Joanne's fiancé, Ben. As everyone turns on Heather, Trevor suggests listening to Ben before jumping to any conclusions. And just as Joanne and Heather are about to come to blows, Ben arrives at Taggerty's, unaware of what awaits him. Meanwhile, when Champ makes his appearance in the nude, the roomful of shocked women cause his act to fall flat. When it seems that Joanne is determined to go through with the wedding, Claire takes time to listen to Heather's side of the story while Trevor speaks with Ben. And though Ben insists on getting married, Trevor helps him realize that it would be a big mistake. As Joanne sees that Ben is really in love with someone else, Heather persuades Claire of just how serious the romance really is. Finally, as Claire returns to Taggerty's, Joanne realizes that it's time she got on with her life by letting Ben and Heather get on with theirs.",
"source_description": "SPTI",
"source_id": "60005104",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "Claire's bachelorette party for an old friend produces a big surprise.",
"source_description": "SPTI",
"source_id": "60005104",
"primary_synopsis_flag": true
}],
"country_of_origin": [{
"name": "U.S.A.[excluding Territories u0026 Possessions]",
"iso_territory_code": "US"
}]
},
"name": "BACHELORETTE PARTY",
"season_number": "01",
"title_type": "episode",
"suggest": {
"input": [
"BACHELORETTE",
"PARTY"
],
"output": "BACHELORETTE PARTY",
"payload": {
"id": 13615
}
},
"parent": {
"gpms_id": 12336,
"id": 13606,
"metadata": {
"episode_number": "",
"level_1_title": "CUPID",
"us_release_year": "1998",
"full_title": "CUPID: SEASON 01",
"genre": [{
"description": "Award Winning",
"type": "Corporate"
}, {
"description": "Comedy",
"type": "Corporate"
}, {
"description": "Drama",
"type": "Corporate"
}, {
"description": "Romance",
"type": "Corporate"
}, {
"description": "Women's",
"type": "Corporate"
}],
"alternate_ids": [{
"id": "10.5240/6012-6EAB-77A7-B352-9932-3",
"type": "EIDR"
}, {
"id": "6012-6EAB-77A7-B352-9932-3",
"type": "EIDR-S"
}, {
"id": "S0869999000",
"type": "walker"
}],
"original_language": "English",
"copyright_year": "",
"copyright_line": "",
"blended_copyright_line": "",
"broadcast_run_length": "60",
"runtime_minutes": "",
"is_pilot": false,
"made_for_media": "FTV Scheduled Network - Standard",
"first_release_media": "FTV Scheduled Network - Standard",
"music_status": "",
"status": "Active",
"alternate_names": [{
"name": "CUPID",
"language": "",
"type_description": "Series"
}, {
"name": "GENERIC 98/99",
"language": "",
"type_description": "CAD Episode"
}, {
"name": "SEASON 01",
"language": "",
"type_description": "Primary"
}, {
"name": "CUPID",
"language": "",
"type_description": "CAD"
}, {
"name": "Season 01",
"language": "",
"type_description": "Display Title"
}],
"product_companies": null,
"talent": null,
"initial_release_dates": [{
"media": "Home Video",
"region_flag": "D",
"release_date": ""
}, {
"media": "Home Video",
"region_flag": "I",
"release_date": ""
}, {
"media": "Network",
"region_flag": "D",
"release_date": ""
}, {
"media": "Pay TV",
"region_flag": "D",
"release_date": ""
}, {
"media": "Syndication",
"region_flag": "D",
"release_date": ""
}, {
"media": "Syndication",
"region_flag": "I",
"release_date": ""
}, {
"media": "Theatrical",
"region_flag": "D",
"release_date": ""
}, {
"media": "Theatrical",
"region_flag": "I",
"release_date": ""
}],
"group_categories": [{
"type_description": "",
"description": ""
}],
"synopses": [{
"type_description": "Long",
"language_description": "English",
"synopsis": "Trevor Hale is a sexy, charismatic out-patient who bartends by night and professes to be Cupid, the God of Erotic Love. Trevor Hale is attractive, witty, uncommonly intelligent - and he may be Cupid, the Greco-Roman god of erotic love. Allegedly exiled from Mount Olympus, he must unite 100 couples in everlasting love, without his bow and arrows. He first ends up in a mental ward where he meets the attractive Dr. Claire, a noted authority on romance who does not believe in Cupid. But she believes in Trevor and he's starting to change her mind...about a lot of things.",
"source_description": "SPTI",
"source_id": "60005104",
"primary_synopsis_flag": false
}, {
"type_description": "Logline",
"language_description": "English",
"synopsis": "To get back home to Mt. Olympus, Cupid (or is he merely earthling Trevor Hale?) must match 100 couples while convincing his beautiful psychiatrist that he is, in fact, the Roman god of love.",
"source_description": "SPTI",
"source_id": "60005104",
"primary_synopsis_flag": true
}],
"country_of_origin": [{
"name": "U.S.A.[excluding Territories u0026 Possessions]",
"iso_territory_code": "US"
}],
"season_number": "01"
},
"name": "SEASON 01",
"season_number": "01",
"title_type": "season",
"suggest": {
"input": [
"SEASON",
"01"
],
"output": "SEASON 01",
"payload": {
"id": 13606
}
},
"parent": {
"gpms_id": 2849,
"id": 235254,
"metadata": null,
"name": null,
"season_number": null,
"title_type": null,
"suggest": {
"input": null,
"output": null,
"payload": {
"id": 235254
}
},
"parent": null
}
}
}
This endpoint will retrieve title data imported to Runner from GPMS (and Pilotware where applicable). The responses include the full data for that title as well as any parent titles, such as the season or series info for a television episode.
Request Endpoint
GET /api/v1/titles/:gpms_id
Request Parameters
| Key | Type | Description |
|---|---|---|
| gpms_id | Number | The unique identifier used by the GPMS system. It's pretty ubiquitous across SPE applications |
Response
- We store pretty much everything from GPMS without any filtering or mapping
parent: This is the same data you could expect from making this call to it's parent title. In the case of episodes, a parent may also have a parent. (e.g. a season is a parent of an episode. A series is a parent of a season)
Get Alphas for Title
GET
/api/v1/titles/12345/alphasSample Response
{
"alphas": [
{
"alpha_id": 12328,
"alpha_name": "MASTER",
"alpha_owner": "EMEA TV Networks",
"alpha_search_name": "MASTER",
"gpms_alpha_id": 2162336,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "Madrid Networks",
"ods_id": 93771,
"source_system": "BCMESP"
},
{
"alpha_id": 12329,
"alpha_name": "TX CASTILIAN",
"alpha_owner": "EMEA TV Networks",
"alpha_search_name": "TXCAS",
"gpms_alpha_id": 2162337,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "Madrid Networks",
"ods_id": 93771,
"source_system": "BCMESP"
},
{
"alpha_id": 12330,
"alpha_name": "TX PORTUGUESE",
"alpha_owner": "EMEA TV Networks",
"alpha_search_name": "TXPOR",
"gpms_alpha_id": 2162338,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "Madrid Networks",
"ods_id": 93771,
"source_system": "BCMESP"
},
{
"alpha_id": 49518,
"alpha_name": "HD_MASTER",
"alpha_owner": "LATAM TV Networks*",
"alpha_search_name": "HD_MASTER",
"gpms_alpha_id": 2351110,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "LATAM Networks",
"ods_id": 93771,
"source_system": "LATAMVISION"
},
{
"alpha_id": 49519,
"alpha_name": "SD_MASTER",
"alpha_owner": "LATAM TV Networks*",
"alpha_search_name": "SD_MASTER",
"gpms_alpha_id": 2351111,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "LATAM Networks",
"ods_id": 93771,
"source_system": "LATAMVISION"
},
{
"alpha_id": 49520,
"alpha_name": "HD_SQZ",
"alpha_owner": "LATAM TV Networks*",
"alpha_search_name": "HD_SQZ",
"gpms_alpha_id": 2351112,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "LATAM Networks",
"ods_id": 93771,
"source_system": "LATAMVISION"
},
{
"alpha_id": 49521,
"alpha_name": "SD_SQZ",
"alpha_owner": "LATAM TV Networks*",
"alpha_search_name": "SD_SQZ",
"gpms_alpha_id": 2351113,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "LATAM Networks",
"ods_id": 93771,
"source_system": "LATAMVISION"
},
{
"alpha_id": 49522,
"alpha_name": "HD_CEN SEG10",
"alpha_owner": "LATAM TV Networks*",
"alpha_search_name": "HD_CEN SEG10",
"gpms_alpha_id": 2351114,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "LATAM Networks",
"ods_id": 93771,
"source_system": "LATAMVISION"
},
{
"alpha_id": 49523,
"alpha_name": "SD_CEN SEG10",
"alpha_owner": "LATAM TV Networks*",
"alpha_search_name": "SD_CEN SEG10",
"gpms_alpha_id": 2351115,
"gpms_id": 747626,
"mcm_op_unit_lookup_value": "LATAM Networks",
"ods_id": 93771,
"source_system": "LATAMVISION"
}
]
}
This endpoint will retrieve alpha information from the ODIN System.
Request Endpoint
GET /api/v1/titles/:gpms_id/alphas
Request Parameters
| Key | Type | Description |
|---|---|---|
| gpms_id | Number | The unique identifier used by the GPMS system. |
File Requests
Create File Request
POST
/api/v1/file_requestsSample Request Body
{
"expiration": "2021-07-04T00:00:00Z",
"folder_id": 1234,
"message": "Hello! Please deliver files when they become available. Thank you!",
"metadata": {
"custom_metadata_fields": [{
"category": "content_details",
"label": "description",
"value": "wow cool"
}],
"asset_type_name": "1-Sheet",
"asset_subtype_name": "Digital",
"titles": [{
"gpms_id": 2004803
}]
},
"notify_all_recipients": false,
"notify_uploader": true,
"recipients": ["someone@vendor.com"],
"require_email": false,
"subject": "Please upload files!",
"name": "My cool file request",
"link": false,
"template_name": "standard"
}
Sample Response (Email)
HTTP/1.1 201 Created
{
"created_by_email": "runner_user@spe.sony.com",
"created_by_name": "Runner User",
"expired": false,
"folder_id": 1234,
"folder_name": "My Cool Folder",
"id": 6911,
"message": "Hello! Please deliver files when they become available. Thank you!",
"name": "My cool file request",
"notify_all_recipients": false,
"notify_uploader": true,
"metadata": {
"custom_metadata_fields": [{
"category": "content_details",
"label": "description",
"value": "wow cool"
}],
"asset_subtype_name": "Digital",
"asset_type_name": "1-Sheet",
"titles": [{
"gpms_id": 2004803
}]
},
"require_email": false,
"subject": "Please upload files!",
"user_id": 123,
"expiration": "2021-07-04T00:00:00.000Z",
"created_at": "2021-07-01T13:00:00.000Z",
"template_name": "standard",
"link": false
}
Sample Response (Link)
HTTP/1.1 201 Created
{
"created_by_email": "runner_user@spe.sony.com",
"created_by_name": "Runner User",
"expired": false,
"folder_id": 1234,
"folder_name": "My Cool Folder",
"id": 6911,
"message": "Hello! Please deliver files when they become available. Thank you!",
"name": "My cool file request",
"notify_all_recipients": false,
"notify_uploader": true,
"metadata": {
"custom_metadata_fields": [{
"category": "content_details",
"label": "description",
"value": "wow cool"
}],
"asset_subtype_name": "Digital",
"asset_type_name": "1-Sheet",
"titles": [{
"gpms_id": 2004803
}]
},
"require_email": false,
"subject": "Please upload files!",
"user_id": 123,
"expiration": "2021-07-04T00:00:00.000Z",
"created_at": "2021-07-01T13:00:00.000Z",
"template_name": "standard",
"link": true,
"link_url": "https://sonypicturesrunner.com/file_requests/1234-abcd-uuid-foobar",
"uuid": "1234-abcd-uuid-foobar"
}
A valid request to this endpoint will generate a Runner file request for the
users to upload to the given folder. File Request emails can be sent to a list of
recipients, or you may generate a link using the link parameter.
You must have upload permissions for the given folder for this request to be successful.
Request Endpoint
POST /api/v1/file_requests
Request Parameters
| Key | Type | Required 📧 | 🔗 | Description |
|---|---|---|---|---|
| expiration | ISO8601 Date String | ✅ | ✅ | The date / time that the file request will no longer be valid. If needed, this can be extended via the Runner UI. |
| folder_id | Number | ✅ | ✅ | The ID of the folder that files associated with this request will be uploaded to. |
| subject | String | ✅ | Subject Line for the email. This will also be displayed in the File Request Upload UI | |
| message | String | Message to the File Request recipients. This will appear in the email body and in the File Request Upload UI | ||
| metadata | Object | Asset Item custom_metadata to be added to each file uploaded for this request. See Bulk Update for example metadata | ||
| notify_all_recipients | Boolean | For email shares, an email will be sent to each recipient when when a file is uploaded | ||
| notify_uploader | Boolean | An email will be sent to the uploader after their files have successfully been ingested into Runner | ||
| recipients | String[] | ✅ | An array of email addresses that should receive a file request email | |
| require_email | Boolean | Requires uploaders to enter their email address before uploading files | ||
| name | String | Deprecated. Friendly display name for the file request. | ||
| link | Boolean | ✅ | Generate a file request link instead of sending email requests | |
| template_name | String | If this value is set, an uploader will be able to add additional metadata to the assets they are adding, constrained to the given metadata template. For available options, see below. |
Metadata templates
as of August 2021
standard- All Metadata Fieldsbasicam_audioam_logo_proxiesam_trailer_av_refam_videocmdg_audio_dubbingcmdg_audio_conformedcmdg_clipscmdg_dubbing_documentcmdg_dubbing_subtitlecmdg_localization_kit_audiocmdg_localization_kit_videocmdg_packshotscmdg_trailerssony_dam_standarddcs_ancillary_assetsdcs_dubbed_audiodcs_dubbed_paperworksony_dam_artwork_photosony_dam_audiosony_dam_documentsony_dam_social_mediasony_dam_videompg_creative_contentmpg_dom_digital_marketingmpg_dom_digital_spotsmpg_dom_tv_spotmpg_exhibitor_relationsmpg_global_asset_hub_aumpg_global_asset_hub_austriampg_global_asset_hub_brmpg_global_asset_hub_esmpg_global_asset_hub_gempg_global_asset_hub_ukmpg_global_asset_hub_usmpg_global_asset_hub_pub_austriampg_global_asset_hub_pub_dempg_global_asset_hub_pub_esmpg_international_digital_marketingmpg_international_digital_spotsmpg_internationalmpg_international_printmpg_international_tv_spotmpg_marketing_chinampg_marketing_global_asset_hubmpg_photompg_photo_documentmpg_photo_eventsmpg_photo_gallerympg_photo_othermpg_photo_premierempg_photo_unitmpg_printmpg_sony_finished_dcpmpg_traileripp_dubbed_audioipp_trailer_graphicsipp_documentssphe_av_raw_footagesphe_chapterssphe_tv_spotasset_managementemea_tv_productionsmedia_relationsspt_affiliate_marketingspt_b2b_admin_titlesspt_b2b_deliveries_non_titlesspt_b2b_deliveries_titlesspt_digital_asset_managementspt_digital_asset_management_batchspt_digital_asset_management_photospt_digital_asset_management_print_jobspt_digital_asset_management_social_mediaspt_digital_asset_management_non_videospt_digital_artspt_formats_marketingspt_non_title_off_airspt_off_airspt_off_air_posterspt_photospt_screenersspt_srocrackleus_networksspt_deliverablesarchitectural_services
Errors
The Runner API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 | Bad Request |
| 401 | Unauthorized -- Missing or invalid authentication |
| 403 | Forbidden -- Invalid permissions |
| 404 | Not Found -- The record does not exist |
| 409 | Restore Quota Exceeded -- We were unable to restore an archived asset |
| 410 | Gone -- The record has been permanently removed from Runner |
| 418 | I'm a teapot |
| 422 | API Error -- Invalid parameters provided for request to complete |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |
Downloads (deprecated)
Aspera Downloads
POST
/api/v1/asset_items/download/asperaSample Request Body
{
"asset_item_ids": [
5678,
2468
],
"revision_ids": [
9999,
]
}
Sample Response
{
"aspera_downloads": [{
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"cookie": null,
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": [{
"source": "034cc4d4f5cb442c9932f1d55fbd4a89/60623b8d7a114e988cb397a6a37b4a0e/test_file.mp4",
"destination": "test_file.mp4",
"asset_id": "60623b8d7a114e988cb397a6a37b4a0e"
}],
"rate_policy": "low",
"remote_host": "apod.cimediacloud.com",
"remote_user": "dxarchive",
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "ATM2_ACs-7xFRBHD7i5BPCYhNKqVvusy4aSizRu9HDzIYHFvyoEAAFA0f_X71v2VVRoWb0xVDtu_2MTA"
}
}, {
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"cookie": null,
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": [{
"source": "cifiles/7c6a2519ad2c4f038a5e52e60bd6e1b5/test_file.pdf",
"destination": "test_file.pdf",
"asset_id": "7c6a2519ad2c4f038a5e52e60bd6e1b5"
}, {
"source": "cifiles/f018c6cd778848c39111acc81e0d29bd/test_file.jpg",
"destination": "test_file.jpg",
"asset_id": "f018c6cd778848c39111acc81e0d29bd"
}],
"rate_policy": "low",
"remote_host": "apod.cimediacloud.com",
"remote_user": "dxassets",
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "ATM2_ACsi_3PYHRY0Y6x6Q8EkXXfGs6bDD6Wrf0VUvOJhbgcR6IAAIKO8yOQtCLuASpXRioJogU_2MTA"
}
}]
}
A valid call to the Aspera download endpoint will return one or more transfer configurations usable to initiate a download using the Connect plugin, ascp command line, or Node API call. Each configuration will contain the authorization token required to access the files.
Multiple assets can be specified in a single call. In general, all assets will be grouped into the same transfer session and configuration, but if the source files are located in different S3 buckets, you may receive more than one configuration. This can happen if you're download a mix of unarchived content and archived but recently restored content.
This endpoint can be used to download both packages and normal assets.
Request Endpoint
POST /api/v1/asset_items/download/aspera
Request Body Parameters
| Key | Type | Description |
|---|---|---|
| asset_item_ids | Number[] | An array of the IDs of the assets you want to download. (optional) |
| revision_ids | Number[] | An array of the IDs of the assets you want to download. (optional) |
Response
| Key | Type | Description |
|---|---|---|
| aspera_downloads | Object[] | This is an array of transfer configs that can be passed directly to the Aspera Connect client. It contains path information for each file as well as the authorization token required to initiate the transfer. The transfer settings in the JSON are default recommendations but can be modified to fit your purposes. If you have questions about appropriate usage of these fields, please consult the Runner team as it's possible to shoot yourself in the foot by requesting bandwidth that isn't there. |
HTTP Downloads
POST
/api/v2/asset_items/http_downloadSample Request
{
"ids": [813],
"revision_ids": [999],
"external_assets": [
{
"external_system_name": "mcduck_money_bin_asset_manager",
"external_asset_id": "scr00g3",
}
]
}
Sample Response
{
"asset_items": [
{
"file_name": "scrooge-mcduck.jpg",
"id": 813,
"revision_id": null,
"url": "https://d14nxlyhj878kl.cloudfront.net/cifiles/scr00g3/scrooge-mcduck.jpg"
},
{
"file_name": "scrooge-mcduck-revised.jpg",
"id": 814,
"revision_id": 999,
"url": "https://d14nxlyhj878kl.cloudfront.net/cifiles/scr00g3/scrooge-mcduck-revised.jpg"
}
],
"external_assets": [
{
"external_system_name": "mcduck_money_bin_asset_manager",
"external_asset_id": "scr00g3",
"url": "https://mcduck-enterprises.com/downloads/moneybin.mov"
}
]
}
This endpoints returns the URL for an HTTP download.
Request Endpoint
POST /api/v1/asset_items/http_download
| Key | Type | Description |
|---|---|---|
| uuid | String | share uuid (optional) |
| ids | Number[] | An array of asset item ids that you want to download. (optional) |
| revision_ids | Number[] | An array of revision ids that you want to download. (optional) |
| external_assets | Object[] | An array of objects consisting of key and value pairs for 'external_system_name' and 'external_asset_id' (optional) |
Response
| Key | Type | Description |
|---|---|---|
| asset_items | Object[] | This is an array of objects consisting of attributes: id, file_name, revision_id, and url. |
| external_assets | Object[] | This is an array of objects consisting of attributes: external_system_name, external_asset_id, and url. |
Aspera Proxy Downloads
POST
/api/v2/asset_items/download/asperaSample Request Body
{
"asset_items": [{
"id": 1277657,
"proxies": ["small_thumbnail", "video_mobile"]
}],
"external_assets": [{
"external_system_name": "eagl",
"external_asset_id": "2749326",
"proxies": ["video_sd", "large_thumbnail"]
}]
}
Sample Response
{
"asset_items": [{
"id": 1277657,
"small_thumbnail": {
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": null,
"rate_policy": "fair",
"remote_host": "apod.cimediacloud.com",
"remote_user": null,
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": null
}
},
"video_mobile": {
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": [{
"source": "cifiles/6bdd92fb270f4fbdaa95d3c35730066a/video-3g.mp4",
"destination": "video-3g.mp4"
}],
"rate_policy": "fair",
"remote_host": "apod.cimediacloud.com",
"remote_user": "dxassets",
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "ATM2_ACsb7uZf527dtI6xbx1aYe6md7DcfXuCAoAdssxohTAja4AAHXuD9DsYJG6Nit6Gox_ei8_2MTA"
}
}
}],
"external_assets": [{
"external_asset_id": "2749326",
"external_system_name": "eagl",
"video_sd": {
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": [{
"source": "Thumbnails/2016/7/8/1a3cfe9b-a1c8-433d-be68-be7423422868-96.mp4",
"destination": "1a3cfe9b-a1c8-433d-be68-be7423422868-96.mp4",
"asset_id": "2749326"
}],
"rate_policy": "fair",
"remote_host": "dmgasproxy.spe.sony.com",
"remote_user": "dmrasp107",
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "ATM2_ACsR9GLMTrrht6YcpwJzb3l_khNSSI2en94enestzSwD-UAAG2iMnPeWDhLlp4yXKvuh2A_2MTA"
}
},
"large_thumbnail": {
"connection_settings": {
"allow_dialogs": true
},
"transfer_spec": {
"authentication": "token",
"cipher": "aes-128",
"direction": "receive",
"fasp_port": 33001,
"http_fallback": true,
"http_fallback_port": 443,
"paths": [{
"source": "Thumbnails/2016/7/8/1a3cfe9b-a1c8-433d-be68-be7423422868-18.jpg",
"destination": "1a3cfe9b-a1c8-433d-be68-be7423422868-18.jpg",
"asset_id": "2749326"
}],
"rate_policy": "fair",
"remote_host": "dmgasproxy.spe.sony.com",
"remote_user": "dmrasp107",
"resume": "sparse_checksum",
"ssh_port": 33001,
"target_rate_kbps": 50000,
"token": "ATM2_ACsJ9Ojz6ohrPDyGa5yv9iLaLjYqRpjqK2Tn3nZF2Ays2YAAF6f5e-eScAYGaL4spRJRGe_2MTA"
}
}
}]
}
A valid call to the Aspera download endpoint will return one or more transfer configurations usable to initiate a download using the Connect plugin, ascp command line, or Node API call. Each configuration will contain the authorization token required to access the files.
Multiple assets and proxy types can be specified in a single call.
Request Endpoint
POST /api/v2/asset_items/proxies/download/aspera
Request Parameters
| Key | Type | Description |
|---|---|---|
| asset_items | Object[] | An array of objects containing the IDs of the assets you need proxies of and which proxy types you want. |
| asset_items[].id | Number | Compass ID of the asset for which proxies are being requested |
| asset_items[].proxies | String[] | An array of proxy types to be downloaded |
| external_assets | Object[] | An array of objects containing details of external assets for which proxies are needed |
| external_assets[].external_asset_id | String | ID of the asset in the external system |
| external_assets[].external_system_name | String | Name of the external system where the asset resides |
| external_assets[].proxies | String[] | An array of proxy types to be downloaded |
Both of these arrays are optional and can be used independently:
RESPONSE PARAMETERS
You'll receive back corresponding arrays for Runner and external assets with separate download configs for each proxy requested. They are keyed using the same vocabulary used by in the request.
Proxy Downloads
POST
/api/v2/asset_items/proxies/download/httpSample Request Body
{
"asset_items": [{
"id": 1234567,
"proxies": [
"video_hd_1080"
]
}],
"external_assets": [{
"external_system_name": "eagl",
"external_asset_id": "987654",
"proxies": [
"large_thumbnail"
]
}],
"expiration": "2016-12-08T13:23:58-08:00"
}
Sample Response
{
"asset_items": [{
"id": 1277888,
"video_hd_1080": "https://ci-buckets-assets-1umcaf2mqwhhg.s3.amazonaws.com/cifiles/be07b843b2534a938af744d902b08157/video-2k.mp4?AWSAccessKeyId=AKIAIIRADF3LJIY2O5IA&Expires=1468470993&response-content-disposition=attachment%3B%20filename%3DGhostbusters_DTR-7_Eng_NoSlate_1080P_Stereo-2K_1920x1080p.MP4&response-content-type=application%2Foctet-stream&Signature=GcDYKZTMcTm8uJJG8tkH6cWKRVc%3D&u=dc96446cc0604aa19bac580ff6a3273a&a=be07b843b2534a938af744d902b08157&ct=8ca45b9c6fea44258526dd47025e4418"
}],
"external_assets": [{
"external_system_name": "eagl",
"external_asset_id": "2706947",
"large_thumbnail": "https://eagl-images.spe.sony.com/Ashx/ChunkedFileDownload.ashx?File=eJzVVFtv0zAUzqVNk25cHnnsAwIhWisOSS8PfZjSAROlK6KrEE0VnMRZveUy5TKpPPFz%2BANI%2FC%2BEkHgBn6wgQKDRPSDhyI7tc%2Fyd71xsQRQE4Qtv8Ie2K%2FFh6acxytNkjfIzioL4GJUFi1jBaN5uzWmWszQZYqTD127ZZVSUGR0mtCwyErVb09KLmP%2BErmfpKU2G1kDHlucP%2FAc4DCwT18HWnT%2BbQIfeCfULm%2FgrWuOqkn0oz49G0v5YfNwQBFG6pgJJTQa%2Bb%2B5%2BHr%2BzNZgqoHwrehEOTktvbY5ekof3Axo9w6Nwbzi8AepvuYr0e5%2F9XwgxZKdxnCZoPymu6jk2QsPzQt3DPeL1DFp53rvMEJqtythLCIumpFjZaVIQltBM4Wfl2WTK%2B0R6OpP3Dkby0cHo5oTEdE6ikk4Jy8Z5IYrciqxp78Xn67ygMYePIh5PzjxHjyhHYj4as7x4hReLS7n8hN5u%2FYMgLZeQDgXSdew4vDKSSMdQISwpjMpuRYAz4cIM69Zt53vAcsfQcdcxHWw6VoD7et%2FzO%2F2eHnZMk4Ydj3S9jmFQ2g26JAhx2MF9dHJ23GzKk3vCj02DWqrB8P%2BGESKouIxzz%2Btuzl5T1T2%2FQOV%2B6dtRXlRJUVWtDlW46Q1YVLepihbaDrK6w1DUWgMGlQ%2FNOqyvgFN3E76luOewWRPbf4WwSSKcrzA%2B8Sdhq5PgeaMy6bpC9SbBjtKECRbBK3BH%2FMhxAbt6o3YvhOo34YeNECKoXIcYY6z3LNMyd3a%2BAlOrqrk%3D&FileType=TN&FileName=OUTLANDER(2014)_2016_Interview_SamHeughan_2398_HD_Textless_04_13_2016_large_thumbnail.jpg",
}]
}
A valid call to the HTTP download endpoint will return one or more download URLs. Multiple assets and/or proxy types can be specified in a single call. All requests will be logged regardless of whether the URLs are accessed./
Request Endpoint
POST /api/v2/asset_items/proxies/download/http
Request Parameters
| Key | Type | Description |
|---|---|---|
| asset_items | Object[] | An array of objects containing the IDs of the assets you need proxies of and which proxy types you want. |
| asset_items[].id | Number | Compass ID of the asset for which proxies are being requested |
| asset_items[].proxies | String[] | An array of proxy types to be downloaded |
| external_assets | Object[] | An array of objects containing details of external assets for which proxies are needed |
| external_assets[].external_asset_id | String | ID of the asset in the external system |
| external_assets[].external_system_name | String | Name of the external system where the asset resides |
| external_assets[].proxies | String[] | An array of proxy types to be downloaded |
| expiration | String | Optional. An ISO8601 formatted Date/Time String. This will set change the expiration time of the returned HTTP download URL to the provided parameter. Must be between the current time and Jan 1, 2038. |
Both of these arrays are optional and can be used independently:
Response Parameters
You'll receive back corresponding arrays for Runner and external assets with separate download URLs for each proxy requested. They are keyed using the same vocabulary used by in the request.
Push Delivery (deprecated)
POST
/api/v2/transfers/deliveriesSample Request Body
{
"destination_ip": "aspera_server.spe.sony.com",
"asset_items": [
{
"id": 12345,
"proxies": [
"video_sd",
{ "proxy": "video_hd_1080", "destination_filename": "my_custom_renamed_proxy" }
],
"thumbnails": ["small_thumbnail"],
"transfer_source_file": true
},
{
"id": 54321,
"transfer_source_file": true
"destination_path": "my_custom_renamed_source.mp4"
}
],
"user": "aspera_user",
"password": "aspera_password",
"destination_file_path": "/",
"transfer_rate_kbps": 40000,
"fasp_port": 33001,
"ssh_port": 33001,
"notify_on_success": ["my_email@spe.sony.com", "your_email@spe.sony.com"],
"notify_on_failure": ["admin_email@spe.sony.com"]
}
Sample Response
{
"id": 12345,
"destination_ip": "aspera_server.spe.sony.com",
"destination_file_path": "/",
"external_transfer_id": "942509e8-1868-478e-86fe-25d4da001087"
}
Request Endpoint
POST api/v2/transfers/deliveries
Request Parameters
| Name | Required? | Type | Description |
|---|---|---|---|
| destination_ip | Y | string | destination Aspera server |
| asset_items | Y | Object[] | An array of objects containing details of asset items and which proxies and/or thumbnails to transfer. For a given asset item, the proxies array can contain strings of proxies or an object with the proxy and a custom destination filename for the purpose of renaming the proxy. You can also optionally specify whether or not to transfer the source file (default is true). |
| user | Y | string | destination Aspera username |
| password | Y | string | destination Aspera password |
| destination_file_path | Y | string | destination Aspera folder |
| transfer_rate_kbps | Y | int | target transfer rate. Note that all transfers are performed using Aspera's Fair policy, which will adjust dynamically to accommodate bandwidth. |
| fasp_port | Y | int | port for Aspera's FASP protocol. Typically 33001. |
| ssh_port | Y | int | port for Aspera SSH communication. Typically 33001. |
| notify_on_success | N | array[string] | list of email addresses to notify once transfer succeeds |
| notify_on_failure | N | array[string] | list of email addresses to notify if the transfer fails |
Response Parameters
| Name | Description |
|---|---|
| id | Runner transfer ID |
| external_transfer_id | MCS transfer ID |
Examples
The asset_items array can be any mixture of the source file, proxies, and/or thumbnails.
Transfer an asset:
"asset_items": [{
"id": 12345
}]
Transfer just the
video_hdproxy:
"asset_items": [{
"id": 12345,
"proxies": ["video_hd"],
"transfer_source_file": false
}]
Transfer the
video_hdproxy with a custom destination file name:
"asset_items": [{
"id": 12345,
"proxies": [
{
"proxy": "video_hd",
"destination_filename": "my_custom_renamed_proxy"
}
],
"transfer_source_file": false
}]
Transfer both the
video_hdproxy and the source asset, and rename them both:
"asset_items": [{
"id": 12345,
"destination_path": "my_custom_renamed_source.mp4"
"proxies": [{
"proxy": "video_hd",
"destination_filename": "my_custom_renamed_proxy"
}]
}]