NAV

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:

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/authenticate

Sample 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/uploads

Sample 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/http

Same 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/downloads

Asset 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

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/42

Sample 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/batch

Sample 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_folders

Sample 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=1234

Sample 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=1234

Sample 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

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_preview

Sample 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/replace

Sample 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_replacements

Sample 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_update

Sample 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_owner
  • asset_subtype
  • asset_type
  • checksum
  • custom_metadata_fields
  • file_size
  • has_proxy
  • id
  • managed_by
  • name
  • naming_convention
  • original_file_name
  • titles
  • usage_classification
  • usage_status
See the Assets section for more information on these fields.

Bulk Create (Placeholder / Shell Records)

POST /api/v1/asset_items

Sample 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:
  • 'archive'
  • 'audio'
  • 'binary'
  • 'document'
  • 'image'
  • 'video'
  • 'package'
  • 'pdf'

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/archives

Sample 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/restores

Sample 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/transcode

Sample 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/proxies

Sample 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/proxies

Sample 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/revisions

Sample 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/revisions

Sample 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/1

Sample 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/carts

Sample 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/1234

Sample 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/1234

Response

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/vocabularies

Sample 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:

Folders

Folder Creation

POST  /api/v1/folders

Sample 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/subfolders

Sample 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_resize

Sample 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_in

Sample 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_conversion

Sample 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:

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_imports

Sample 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/transfers

Sample 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: true
For 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_actions

Sample 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:

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/shares

Example 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:

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:

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=1234

Example 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/expirations

Example Runner Share Update Expiration Request Body

{
  "expiration": "2022-12-12T12:22:12Z"
}

Titles

Get Title Data

GET  /api/v1/titles/12345

Sample 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

Get Alphas for Title

GET  /api/v1/titles/12345/alphas

Sample 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_requests

Sample 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

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/aspera

Sample 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_download

Sample 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/aspera

Sample 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/http

Sample 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/deliveries

Sample 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_hd proxy:

"asset_items": [{
  "id": 12345,
  "proxies": ["video_hd"],
  "transfer_source_file": false
}]

Transfer the video_hd proxy 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_hd proxy 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"
  }]
}]