openapi: 3.0.3
info:
title: Playback API Reference
version: 1.0.0
description: |-
**Note: this the reference for the Playback API v1 - almost all accounts have been migrated to the Playback API v2. Unless you know that you account is still on v1, you should use the [Playback API v2 reference](/playback/references/reference_v2.html)
Reference for the Brightcove Playback API, used for client-side access video and playlist information.
Customers using IP Restriction must use `https://edge-elb.api.brightcove.com/playback/v1` instead of the standard URL (Use `edge-elb.api...` vs the `normal edge.api...`). To learn how to restrict playback for all the players in an account, see the [Restricting Video Playback Using IP Address](https://player.support.brightcove.com/content-protection/restricting-video-playback-using-ip-address.html) document.
The raw API JSON response is not suitable for the player. Use the `player.catalog.transformVideoResponse()` function to convert each video object in the response into a format compatible with the player. This includes duration times and https image compatibility. For details, see the [Player Catalog](https://player.support.brightcove.com/references/player-catalog.html) document.
For additional in-depth guides to features of the API, see the **[General Documentation](/playback/)**.
**Base URL**: https://edge.api.brightcove.com/playback/v1
servers:
- url: "https://edge.api.brightcove.com/playback/v1"
tags:
- name: Videos
description: Operations for retrieving videos.
- name: Playlists
description: Operations for retrieving playlists.
paths:
"/accounts/{{account_id}}/videos/{{video_id}}/related":
get:
tags:
- Videos
summary: Get Related Videos by ID or Reference ID
description: |-
Gets a page of video objects that are related to the specified video. Using the name and short description of the specified video, the Playback API searches for videos with any partial matches in the following fields: `name`, `short` `description`, `long_description`, `tags`.
Notes: When performing this search, you need to use a search-enabled Policy Key. For information on getting policy keys, see the [Policy API Overview](/policy/getting-started/overview-policy-api.html). You can also use this [sample app](/policy/getting-started/quick-start-policy-api.html) to create a search-enabled key
In general, search-enabled Policy Keys should only be stored on a server and not in a browser player or mobile app, since they can be used to list all playable videos. For some accounts this may not be applicable if you do not care if all of your playable videos can be discovered.
The response results for this endpoint are subject to change as we improve the algorithm for finding related videos. If you do not want your results to change, or if you want precise control, then you should use the [Get Videos endpoint](#operation/Get_Videos) with a search parameter.
Any geo-restricted videos that are denied for the particular requestor are omitted from the results. As long as some videos are allowed the request is considered successful. An errors field is added to the result with a summary explaining why videos were omitted.
parameters:
- $ref: "#/components/parameters/limit"
- $ref: "#/components/parameters/offset"
- $ref: "#/components/parameters/ad_config_id"
- $ref: "#/components/parameters/account_id"
- $ref: "#/components/parameters/video_id"
- $ref: "#/components/parameters/Authorization"
- $ref: "#/components/parameters/BCOV-Policy"
- $ref: "#/components/parameters/Accept"
responses:
"200":
description: "200"
content:
application/json:
schema:
$ref: >-
#/components/schemas/Get_Videos_Response
"400":
description: >-
BAD_REQUEST: DUPLICATE_PARAMETERS - The same parameter name was provided more than once in the request
INVALID_SEARCH - The search parameters are not valid
ILLEGAL_QUERY - The search string syntax was invalid - example
ACCESS_DENIED:
ACCOUNT_ID - The account id in the policy key does not match the account in the api request
API - The policy key is not search-enabled when attempting to perform a search
CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
CLIENT_IP - The video is restricted at the current IP address
DOMAIN - The video is restricted from playing on the current domain
POLICY_ERROR - Error when evaluating the policy key
VIDEO_NOT_PLAYABLE - For a single video request, the video exists, but is not allowed to be played now.
"401":
description: "INVALID_POLICY_KEY:undefined"
"403":
description: |-
ACCESS_DENIED:
- ACCOUNT_ID - The account id in the policy key does not match the account in the api request
- DOMAIN - The video is restricted from playing on the current domain
- CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
- CLIENT_IP - The video is restricted at the current IP address
- POLICY_ERROR - Error when evaluating the policy key
"405":
description: >-
METHOD_NOT_ALLOWED:Only GET, HEAD and OPTIONS are allowed for this
api.
"500":
description: "SERVER_ERROR:internal server error"
"502":
description: "SERVER_ERROR:Got a bad response from a backend server"
"504":
description: >-
SERVER_TIMEOUT:Either a backend server or one of the servers they
rely on timed out.
operationId: Get_Related_Videos_by_ID_or_Reference_ID
"/accounts/{{account_id}}/videos/{{video_id}}":
get:
tags:
- Videos
summary: Get Video by ID or Reference ID
description: "Gets a video object based on a video ID or reference ID. "
parameters:
- $ref: "#/components/parameters/ad_config_id"
- $ref: "#/components/parameters/account_id"
- $ref: "#/components/parameters/video_id"
- $ref: "#/components/parameters/Authorization"
- $ref: "#/components/parameters/BCOV-Policy"
- $ref: "#/components/parameters/Accept"
responses:
"200":
description: "200"
content:
application/json:
schema:
$ref: "#/components/schemas/Get_Videos_Response"
"400":
description: >-
BAD_REQUEST: DUPLICATE_PARAMETERS - The same parameter name was provided more than once in the request
INVALID_SEARCH - The search parameters are not valid
ILLEGAL_QUERY - The search string syntax was invalid - example
ACCESS_DENIED: ACCOUNT_ID - The account id in the policy key does not match the account in the api request
API - The policy key is not search-enabled when attempting to perform a search
CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
CLIENT_IP - The video is restricted at the current IP address
DOMAIN - The video is restricted from playing on the current domain
POLICY_ERROR - Error when evaluating the policy key
FORBIDDEN:
VIDEO_NOT_PLAYABLE - For a single video request, the
video exists, but is not allowed to be played now. That could be any of the four reasons that videos are not playable
NOT_FOUND: VIDEO_NOT_FOUND - The requested resource is not available.
"401":
description: "INVALID_POLICY_KEY:undefined"
"403":
description: |-
ACCESS_DENIED: ACCOUNT_ID - The account id in the policy key does not match the account in the api request
DOMAIN - The video is
restricted from playing on the current domain
CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
CLIENT_IP - The video is restricted at the current IP address
POLICY_ERROR - Error when evaluating the policy key
"405":
description: >-
METHOD_NOT_ALLOWED:Only GET, HEAD and OPTIONS are allowed for this
api.
"500":
description: "SERVER_ERROR:internal server error"
"502":
description: "SERVER_ERROR:Got a bad response from a backend server"
"504":
description: >-
SERVER_TIMEOUT:Either a backend server or one of the servers they rely on timed out.
operationId: Get_Video_by_ID_or_Reference_ID
"/accounts/{{account_id}}/videos":
get:
tags:
- Videos
summary: Get Videos
description: |-
Gets a page of video objects. The Playback API allows you to programmatically search for videos in your Video Cloud library. For more information on the search syntax, see [CMS/Playback API: Videos Search](h/cms/searching/cmsplayback-api-videos-search.html).
Notes:
When performing a search, you need to use a search-enabled Policy Key. For information on getting policy keys, see the Policy API Overview or the Policy Keys documents. In general, search-enabled Policy Keys should only be stored on a server and not in a browser player or mobile app, since they can be used to list all playable videos. For some accounts this may not be applicable if you do not care if all of your playable videos can be discovered.
The maximum number of videos (highest count value) returned is 1000, even if there are more matching videos in the account. The count value is an estimate and should not be relied on as the exact number to be returned. If all results are desired then keep paging until it no longer returns a full page, or use the CMS api.
Only currently playable videos are included in the results list. It is recommended to do a similar query with the CMS api to see why some videos are excluded. Any geo-restricted videos that are denied for the particular requestor are omitted from the results. As long as some videos are allowed the request is considered successful. An errors field is added to the result with a summary explaining why videos were omitted.
parameters:
- $ref: "#/components/parameters/q"
- $ref: "#/components/parameters/limit"
- $ref: "#/components/parameters/offset"
- $ref: "#/components/parameters/sort"
- $ref: "#/components/parameters/ad_config_id"
- $ref: "#/components/parameters/account_id"
- $ref: "#/components/parameters/video_id"
- $ref: "#/components/parameters/Authorization"
- $ref: "#/components/parameters/BCOV-Policy"
- $ref: "#/components/parameters/Accept"
responses:
"200":
description: "200"
content:
application/json:
schema:
$ref: "#/components/schemas/Get_Videos_Response"
"400":
description: >-
BAD_REQUEST: DUPLICATE_PARAMETERS - The same parameter name was provided more than once in the request
INVALID_SEARCH - The
search parameters are not valid
ILLEGAL_QUERY - The search string
syntax was invalid - example
ACCESS_DENIED: ACCOUNT_ID - The account id in the policy key does not match the account in the api request
API - The policy
key is not search-enabled when attempting to perform a search
CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
CLIENT_IP - The video is restricted at the current IP address
DOMAIN - The video is restricted from playing on the
current domain
POLICY_ERROR - Error when evaluating the policy key
FORBIDDEN: VIDEO_NOT_PLAYABLE - For a single video request, the video exists, but is not allowed to be played now. That could be any of the four reasons that videos are not playable
NOT_FOUND: VIDEO_NOT_FOUND - The requested resource is not available.
"401":
description: "INVALID_POLICY_KEY:undefined"
"403":
description: >-
ACCESS_DENIED: ACCOUNT_ID - The account id in the policy key does not match the account in the api request
DOMAIN - The video is
restricted from playing on the current domain
CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
CLIENT_IP - The video is restricted at the current IP address
POLICY_ERROR - Error when evaluating the policy key
"405":
description: >-
METHOD_NOT_ALLOWED:Only GET, HEAD and OPTIONS are allowed for this
api.
"500":
description: "SERVER_ERROR:internal server error"
"502":
description: "SERVER_ERROR:Got a bad response from a backend server"
"504":
description: >-
SERVER_TIMEOUT:Either a backend server or one of the servers they rely on timed out.
operationId: Get_Videos
"/accounts/{{account_id}}/playlists/{playlist_id}":
get:
tags:
- Playlists
summary: Get Playlist by ID or Reference ID
description: >-
Gets a playlist object for an account, based on playlist ID or reference ID.
parameters:
- $ref: "#/components/parameters/limit"
- $ref: "#/components/parameters/offset"
- $ref: "#/components/parameters/ad_config_id"
- $ref: "#/components/parameters/account_id"
- $ref: "#/components/parameters/playlist_id"
- $ref: "#/components/parameters/Authorization"
- $ref: "#/components/parameters/BCOV-Policy"
- $ref: "#/components/parameters/Accept"
responses:
"200":
description: "200"
content:
application/json:
schema:
$ref: "#/components/schemas/Playlist_Response"
"400":
description: >-
BAD_REQUEST: DUPLICATE_PARAMETERS - The same parameter name was provided more than once in the request
NOT_FOUND: PLAYLIST_NOT_FOUND - The requested resource is not available.
"401":
description: "INVALID_POLICY_KEY:undefined"
"403":
description: >-
ACCESS_DENIED: ACCOUNT_ID - The account id in the policy key does not match the account in the api request
DOMAIN - The video is
restricted from playing on the current domain
CLIENT_GEO - The video is restricted from playing in the current geo region; the message will contain additional information about the specific issue. For more details, see the Playback API Error Reference
CLIENT_IP - The video is restricted at the current IP address
POLICY_ERROR - Error when evaluating the policy key
"405":
description: >-
METHOD_NOT_ALLOWED:Only GET, HEAD and OPTIONS are allowed for this
api.
"500":
description: "SERVER_ERROR:internal server error"
"502":
description: "SERVER_ERROR:Got a bad response from a backend server"
"504":
description: >-
SERVER_TIMEOUT:Either a backend server or one of the servers they
rely on timed out.
operationId: Get_Playlists_by_ID_or_Reference_ID
components:
schemas:
Playlist_Response:
properties:
account_id:
type: string
description: "Video Cloud account id "
readOnly: true
created_at:
type: string
description: "date/time created "
readOnly: true
description:
type: string
description: "playlist description "
readOnly: true
id:
type: string
description: "the playlist id "
readOnly: true
name:
type: string
description: "the playlist name "
readOnly: true
reference_id:
type: string
description: "the playlist reference id "
readOnly: true
type:
type: string
description: "the playlist type: EXPLICIT or smart playlist type "
readOnly: true
updated_at:
type: string
description: "date/time last modified "
readOnly: true
video_ids:
type: array
description: "array of video ids (EXPLICIT playlists only) "
items:
type: string
readOnly: true
search:
type: string
description: "search string to retrieve the videos (smart playlists only) "
readOnly: true
videos:
type: array
description: "array of video maps "
items:
$ref: "#/components/schemas/video"
readOnly: true
example:
{
"videos":
[
{
"description": "Bugs-Bee",
"poster_sources":
[
{
"src": "https://cf-images.eu-west-1.prod.boltdns.net/v1/static/1752604059001/a9554ba2-899e-408e-91f6-8bf1a4decfcb/c1e55b4e-4758-4ad3-98ea-ba8feaf0a6f8/1280x720/match/image.jpg",
},
],
"tags": ["bugs", "sample"],
"cue_points": [],
"custom_fields": {},
"account_id": "1752604059001",
"sources":
[
{
"ext_x_version": "4",
"type": "application/x-mpegURL",
"src": "https://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/1752604059001/a9554ba2-899e-408e-91f6-8bf1a4decfcb/10s/master.m3u8?fastly_token=NWJiMjZjZGJfYWYyMjFhYmJmNmI3MmM3NWNiYzJmODZiMWVlN2Y1NTA0ZDc5MWIyNTcyYTYyNDk3OWRmNGM2NmRkMzI4Y2I4Ng%3D%3D",
},
],
"name": "Bugs-Bee",
"reference_id": "1754261699001",
"long_description": null,
"duration": 30000,
"economics": "AD_SUPPORTED",
"published_at": "2012-07-25T20:34:13.393Z",
"text_tracks": [],
"updated_at": "2018-09-03T18:35:27.609Z",
"thumbnail": "https://cf-images.eu-west-1.prod.boltdns.net/v1/static/1752604059001/a9554ba2-899e-408e-91f6-8bf1a4decfcb/8e656dae-6331-4cad-9922-6ab39ac44650/160x90/match/image.jpg",
"poster": "https://cf-images.eu-west-1.prod.boltdns.net/v1/static/1752604059001/a9554ba2-899e-408e-91f6-8bf1a4decfcb/c1e55b4e-4758-4ad3-98ea-ba8feaf0a6f8/1280x720/match/image.jpg",
"offline_enabled": false,
"link": null,
"id": "1754261699001",
"ad_keys": null,
"thumbnail_sources":
[
{
"src": "https://cf-images.eu-west-1.prod.boltdns.net/v1/static/1752604059001/a9554ba2-899e-408e-91f6-8bf1a4decfcb/8e656dae-6331-4cad-9922-6ab39ac44650/160x90/match/image.jpg",
},
],
"created_at": "2012-07-25T20:34:13.393Z",
},
],
"updated_at": "2016-01-30T20:43:59.351Z",
"type": "ACTIVATED_NEWEST_TO_OLDEST",
"reference_id": "bugs1754200352001",
"name": "Bugs",
"id": "1754200352001",
"description": null,
"created_at": "2012-07-25T20:43:06.070Z",
"account_id": "1752604059001",
}
video:
properties:
id:
type: string
description: "video id "
readOnly: true
name:
type: string
description: "video title "
readOnly: true
created_at:
type: string
description: "when the video was created "
readOnly: true
custom_fields:
type: object
description: "map of field name-value pairs "
readOnly: true
cue_points:
$ref: "#/components/schemas/video.cue_points"
description:
type: string
description: "video short description "
readOnly: true
duration:
type: number
description: "video duration in milliseconds "
readOnly: true
economics:
type: string
description: "whether video is AD_SUPPORTED "
readOnly: true
default: AD_SUPPORTED
enum:
- AD_SUPPORTED
- FREE
example: AD_SUPPORTED
poster_sources:
type: array
description: >-
array of poster source maps (note that in many cases there will be
one source with a src value identical to the poster value, but this
array is included in case there are multiple protocols available,
such as http and https)
items:
$ref: "#/components/schemas/video.poster_sources"
readOnly: true
poster:
type: string
description: "URL for the default poster source image "
readOnly: true
projection:
type: string
description: 'The mapping projection for 360° videos, e.g. "equirectangular"'
readOnly: true
thumbnail_sources:
type: array
description: >-
array of thumbnail source maps (note that in many cases there will
be one source with a src value identical to the thumbnail value, but
this array is included in case there are multiple protocols
available, such as http and https)
items:
$ref: "#/components/schemas/video.thumbnail_sources"
readOnly: true
thumbnail:
type: string
description: "URL for the default thumbnail source image "
readOnly: true
link:
$ref: "#/components/schemas/video.link"
long_description:
type: string
description: "video long description "
readOnly: true
offline_enabled:
type: boolean
description: "whether video is enabled for offline viewing "
readOnly: true
published_at:
type: string
description: "when the video was published "
readOnly: true
reference_id:
type: string
description: "video reference-id (must be unique within the account) "
readOnly: true
tags:
type: array
description: "array of tags "
items:
type: string
readOnly: true
sources:
type: array
description: "array of video sources (renditions) "
items:
$ref: "#/components/schemas/video.sources"
readOnly: true
text_tracks:
$ref: "#/components/schemas/video.text_tracks"
updated_at:
type: string
description: "when the video was last modified "
readOnly: true
variants:
type: array
description: 'array of variant objects containing multi-lingual metadata'
items:
$ref: '#/components/schemas/video.variant'
ad_keys:
type: object
description: "map of key/value pairs for ad requests "
readOnly: true
example: {
"poster": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1752604059001/main/1280x720/11s436ms/match/image.jpg",
"thumbnail": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/main/160x90/11s436ms/match/image.jpg",
"poster_sources": [
{
"src": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/main/1280x720/11s436ms/match/image.jpg"
}
],
"thumbnail_sources": [
{
"src": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/main/160x90/11s436ms/match/image.jpg"
}
],
"description": "Panoramic view of the Rhine in the center of Basel, Switzerland.",
"tags": [
"basel"
],
"cue_points": [],
"custom_fields": {},
"account_id": "1752604059001",
"sources": [
{
"ext_x_version": "4",
"src": "https://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/10s/master.m3u8?fastly_token=NWZmYzdkYzJfM2NkZDFkZTYxOWFjM2VhYmQwOGUzOWQ4YjAwNzQyZmJkMTRhYTI0ZmE3MDA2YTM3M2E4NzJjMDFmNWViNDgyZA%3D%3D",
"type": "application/x-mpegURL"
},
{
"ext_x_version": "4",
"src": "https://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/10s/master.m3u8?fastly_token=NWZmYzdkYzJfM2NkZDFkZTYxOWFjM2VhYmQwOGUzOWQ4YjAwNzQyZmJkMTRhYTI0ZmE3MDA2YTM3M2E4NzJjMDFmNWViNDgyZA%3D%3D",
"type": "application/x-mpegURL"
},
{
"codecs": "avc1,mp4a",
"ext_x_version": "7",
"src": "https://manifest.prod.boltdns.net/manifest/v2/hls/v7/clear/avc1_mp4a/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/10s/master.m3u8?fastly_token=NWZmYzdkYzJfZDhlN2M3OTNmMGI2YTc2ZGVmYWQ4NDEwNDljZmQ0YjFiNzE3ZDljMjM5MTA0YTczN2NlYmQ3MzEyODM4MzRjOA%3D%3D",
"type": "application/x-mpegURL"
},
{
"codecs": "avc1,mp4a",
"ext_x_version": "7",
"src": "https://manifest.prod.boltdns.net/manifest/v2/hls/v7/clear/avc1_mp4a/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/10s/master.m3u8?fastly_token=NWZmYzdkYzJfZDhlN2M3OTNmMGI2YTc2ZGVmYWQ4NDEwNDljZmQ0YjFiNzE3ZDljMjM5MTA0YTczN2NlYmQ3MzEyODM4MzRjOA%3D%3D",
"type": "application/x-mpegURL"
},
{
"profiles": "urn:mpeg:dash:profile:isoff-live:2011",
"src": "https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/2s/manifest.mpd?fastly_token=NWZmYzdkYzJfZGRkMGNiZjNjNGQzNDcyNDg0Y2MzODc1ZDMzYjYwN2IyNDMxNWIwNzY1OTFlNzE3NzU5MzEyNGUyMWYyYzc2MA%3D%3D",
"type": "application/dash+xml"
},
{
"profiles": "urn:mpeg:dash:profile:isoff-live:2011",
"src": "https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/2s/manifest.mpd?fastly_token=NWZmYzdkYzJfZGRkMGNiZjNjNGQzNDcyNDg0Y2MzODc1ZDMzYjYwN2IyNDMxNWIwNzY1OTFlNzE3NzU5MzEyNGUyMWYyYzc2MA%3D%3D",
"type": "application/dash+xml"
},
{
"codecs": "avc1,mp4a",
"profiles": "urn:mpeg:dash:profile:isoff-live:2011",
"src": "https://manifest.prod.boltdns.net/manifest/v2/dash/live-baseurl/clear/avc1_mp4a/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/2s/manifest.mpd?fastly_token=NWZmYzdkYzJfNjJkZWM5NjE0MDViZmFjMTI1YmE4NjU3ZGRlM2I1ZjUwOTA5MTNlNzg2YmM2ZTFhYzkwYjk1MDEyZjk5ZGI1YQ%3D%3D",
"type": "application/dash+xml"
},
{
"codecs": "avc1,mp4a",
"profiles": "urn:mpeg:dash:profile:isoff-live:2011",
"src": "https://manifest.prod.boltdns.net/manifest/v2/dash/live-baseurl/clear/avc1_mp4a/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/2s/manifest.mpd?fastly_token=NWZmYzdkYzJfNjJkZWM5NjE0MDViZmFjMTI1YmE4NjU3ZGRlM2I1ZjUwOTA5MTNlNzg2YmM2ZTFhYzkwYjk1MDEyZjk5ZGI1YQ%3D%3D",
"type": "application/dash+xml"
},
{
"avg_bitrate": 2075000,
"codec": "H264",
"container": "MP4",
"duration": 22870,
"height": 720,
"size": 5930479,
"src": "https://bcboltbde696aa-a.akamaihd.net/media/v1/pmp4/static/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/9608379b-6710-4f39-ac63-602f68bc2ff3/main.mp4?akamai_token=exp=1610382786~acl=/media/v1/pmp4/static/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/9608379b-6710-4f39-ac63-602f68bc2ff3/main.mp4*~hmac=54a20d631aabdb4712cdf5eb6638c763d1a2f503ab63cfd2d2c8146c9adee4d9",
"width": 1280
},
{
"avg_bitrate": 2075000,
"codec": "H264",
"container": "MP4",
"duration": 22870,
"height": 720,
"size": 5930479,
"src": "https://bcboltbde696aa-a.akamaihd.net/media/v1/pmp4/static/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/9608379b-6710-4f39-ac63-602f68bc2ff3/main.mp4?akamai_token=exp=1610382786~acl=/media/v1/pmp4/static/clear/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/9608379b-6710-4f39-ac63-602f68bc2ff3/main.mp4*~hmac=54a20d631aabdb4712cdf5eb6638c763d1a2f503ab63cfd2d2c8146c9adee4d9",
"width": 1280
}
],
"name": "Basel: The Rhine - multi-lingual metadata",
"reference_id": null,
"long_description": null,
"duration": 22872,
"economics": "AD_SUPPORTED",
"text_tracks": [
{
"id": null,
"account_id": "1752604059001",
"src": "https://manifest.prod.boltdns.net/thumbnail/v1/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/4193dd5b-db7b-42a9-960f-32888a498e42/thumbnail.webvtt?fastly_token=NWZmYzdkYzJfZWUxZGFjODFmZTE2ZmJkYmQ1MjAzNmE4ODNlMzRmNzdlMjM3ZjQzODJmNmM4YTdmYjBiYzg0NjU3Nzg4ZWIxYQ%3D%3D",
"srclang": null,
"label": "thumbnails",
"kind": "metadata",
"mime_type": "text/webvtt",
"asset_id": null,
"sources": null,
"default": false,
"width": 320,
"height": 180,
"bandwidth": 243
},
{
"id": null,
"account_id": "1752604059001",
"src": "https://manifest.prod.boltdns.net/thumbnail/v1/1752604059001/c1303d3e-c9b2-433d-9b96-74ae1f086834/4193dd5b-db7b-42a9-960f-32888a498e42/thumbnail.webvtt?fastly_token=NWZmYzdkYzJfZWUxZGFjODFmZTE2ZmJkYmQ1MjAzNmE4ODNlMzRmNzdlMjM3ZjQzODJmNmM4YTdmYjBiYzg0NjU3Nzg4ZWIxYQ%3D%3D",
"srclang": null,
"label": "thumbnails",
"kind": "metadata",
"mime_type": "text/webvtt",
"asset_id": null,
"sources": null,
"default": false,
"width": 320,
"height": 180,
"bandwidth": 243
}
],
"published_at": "2019-04-16T18:04:20.746Z",
"created_at": "2019-04-16T18:04:20.731Z",
"updated_at": "2020-12-14T16:06:02.693Z",
"offline_enabled": false,
"link": null,
"id": "6026822730001",
"ad_keys": null,
"variants": [
{
"language": "de-DE",
"name": "Basel: Der Rhein",
"description": "Panoramablick auf den Rhein im Zentrum von Basel, Schweiz.",
"long_description": "Panoramablick auf den Rhein im Zentrum von Basel, Schweiz.",
"custom_fields": {}
},
{
"language": "ja-JA",
"name": "バーゼル:ライン川",
"description": "スイス、バーゼルの中心部にあるライン川のパノラマビュー。",
"long_description": "スイス、バーゼルの中心部にあるライン川のパノラマビュー。",
"custom_fields": {
"language": "Japanese"
}
}
]
}
video.cue_points:
type: object
description: >-
array of cue point objects
readOnly: true
properties:
name:
type: string
description: "cue point name "
readOnly: true
type:
type: string
description: "cue point type "
readOnly: true
time:
type: number
description: "time of the cue point in seconds; example: 10.527 "
readOnly: true
metadata:
type: string
description: "optional metadata string (128 single-byte characters maximum) "
readOnly: true
force-stop:
type: boolean
description: "whether video is force-stopped at the cue point "
readOnly: true
example: true
default: false
video.poster_sources:
properties:
src:
type: string
description: >-
URL for a poster source image (note that in many cases there will be
one source with a src value identical to the poster value, but this
array is included in case there are multiple protocols available,
such as http and https)
readOnly: true
video.thumbnail_sources:
properties:
src:
type: string
description: >-
URL for a thumbnail source image (note that in many cases there will
be one source with a src value identical to the thumbnail value, but
this array is included in case there are multiple protocols
available, such as http and https)
readOnly: true
video.link:
type: object
description: "map of scheduling properties "
readOnly: true
properties:
text:
type: string
description: "text for the link "
readOnly: true
url:
type: string
description: "URL for the link "
readOnly: true
video.sources:
properties:
avg_bitrate:
type: number
description: "average bitrate "
readOnly: true
width:
type: number
description: "frame width in pixels "
readOnly: true
height:
type: number
description: "frame height in pixels "
readOnly: true
size:
type: number
description: "size in bytes "
readOnly: true
duration:
type: number
description: "duration in milliseconds "
readOnly: true
asset_id:
type: string
description: "the asset id for the source "
readOnly: true
stream_name:
type: string
description: "the stream name for the source "
readOnly: true
codec:
type: string
description: "the video codec "
readOnly: true
container:
type: string
description: "the video container "
readOnly: true
app_name:
type: string
description: "the address for rtmp streams "
readOnly: true
type:
type: string
description: "the type (for HLS streams) "
readOnly: true
video.text_tracks:
type: object
description: "array of text track maps "
readOnly: true
properties:
src:
type: string
description: "URL for the .vtt file "
readOnly: true
sources:
type: array
description: >-
array of sources for .vtt files (note that in many cases there will
be one source with a src value identical to the text_tracks.src
value, but this array is included in case there are multiple
protocols available, such as http and https)
items:
$ref: "#/components/schemas/video.text_tracks.sources"
readOnly: true
kind:
type: string
description: "kind of text track "
readOnly: true
srclang:
type: string
description: '2-letter language code, such as "en" or "ko" '
readOnly: true
mime_type:
type: string
description: "mime_type for the track "
readOnly: true
label:
type: string
description: "label for the track "
readOnly: true
default:
type: boolean
description: "whether this is the default track "
readOnly: true
in_band_metadata_track_dispatch_type:
type: string
description: >-
If this field is present, it means that references for this text
track are available in the associated video's manifest
readOnly: true
video.text_tracks.sources:
properties:
src:
type: string
description: >-
URL for the .vtt file (note that in many cases there will be one
source with a src value identical to the text_tracks.src value, but
this array is included in case there are multiple protocols
available, such as http and https)
readOnly: true
video.variant:
description: Object containing language-specific metadata for a video
properties:
language:
type: string
description: 'The language for this variant in the language-country code format (examples: en-US, es-ES)'
example: es-ES
name:
type: string
description: The title of the video in this language
description:
type: string
description: The video short description in this language
long_description:
type: string
description: The video long description in this language
custom_fields:
type: object
description: 'map of `fieldname: value` pairs, where values are for this language; values have a maximum length of 1024 single-byte characters. Note: be sure to use the **internal** name for the field, not the display name'
Get_Videos_Response:
type: array
items:
$ref: "#/components/schemas/video"
parameters:
q:
name: q
in: query
required: false
description: >-
search string - see [search
guide](/cms/searching/cmsplayback-api-videos-search.html) for
details
style: form
explode: true
schema:
type: string
limit:
name: limit
in: query
required: false
description: The number of videos to return
style: form
explode: true
schema:
type: integer
default: 20
minimum: 1
maximum: 100
offset:
name: offset
in: query
required: false
description: >-
The number of videos to skip - used to page multiple sets of videos. Note that the maximum number of videos that can be returned by the Playback API is 1000. To return more than 1000 videos, you must use the CMS API.
style: form
explode: true
schema:
type: integer
default: 0
minimum:
sort:
name: sort
in: query
required: false
description: >-
Field to sort results by; if absent and there is a search string,
results are sorted by relevance — note that `plays_total` and
`plays_trailing_week` are not included in the response - note: to sort
in descending order, preface the sort field name with a minus (`-`) sign
style: form
explode: true
schema:
type: string
enum:
- name
- reference_id
- created_at
- published_at
- updated_at
- schedule_starts_at
- schedule_ends_at
- state
- plays_total
- plays_trailing_week
default: "-updated_at"
ad_config_id:
name: ad_config_id
in: query
required: false
description: >-
include [server-side ad
insertion](/playback/getting-started/overview-playback-api.html#Video_request_with_SSAI)
style: form
explode: true
schema:
type: string
account_id:
name: account_id
in: path
required: true
description: "Video Cloud account ID "
schema:
type: string
playlist_id:
name: playlist_id
in: path
required: true
description: "Video Cloud playlist ID "
schema:
type: string
video_id:
name: video_id
in: path
required: true
description: "Video Cloud video ID "
schema:
type: string
Accept:
name: Accept
in: header
required: true
description: >-
application/json;pk=policy_key (there are 3 ways to authenticate — use
one of these three headers) See Policy API Overview or Policy Keys for
information on getting policy keys
schema:
type: string
Authorization:
name: Authorization
in: header
required: true
description: >-
: BCOV-Policy {policy_key} (there are 3 ways to authenticate — use one
of these three headers). You need to use a search-enabled Policy Key.
schema:
type: string
BCOV-Policy:
name: BCOV-Policy
in: header
required: true
description: >-
: {policy_key} (there are 3 ways to authenticate — use one of these
three headers). You need to use a search-enabled Policy Key.
schema:
type: string