openapi: '3.0.0'
x-bc-implicit-head: true
x-bc-implicit-options: true
x-bc-upstream: 'https://backend_server'
info:
description: |-
API for Brightcove SSAI
This API is used for managing operations related to Server-Side Ad Insertion (SSAI).
See [Video Cloud SSAI Ad Config API](/ssai/getting-started/video-cloud-ssai-ad-config-api.html) for more details on using the API.
You can easily create, list and delete ad configurations in Video Cloud Studio as well. For details, see [Configuring Server-Side Ad Settings](https://studio.support.brightcove.com/admin/configuring-server-side-ad-settings.html).
For additional in-depth guides to features of the API, see the **[General documentation](/)**.
**Base URL:** https://ssai.api.brightcove.com/v1
version: 0.1.0
title: Brightcove SSAI API
x-bc-access: public
servers:
- url: 'https://ssai.api.brightcove.com/v1'
variables: {}
tags:
- name: Ad Configurations
description: Operations for managing ad configurations.
- name: Ad Call Tracking
description: Operations for tracking ad calls - used primarily for debugging.
paths:
'/accounts/{{account_id}}/ssai_configs':
get:
tags:
- Ad Configurations
summary: List the ad configurations for the account
description: |-
List the ad configurations defined for an account.
operationId: getAdConfigurations
security:
- BC_OAuth2:
- video-cloud/ssai/read
parameters:
- $ref: '#/components/parameters/AccountId'
responses:
'200':
description: A list of videos.
content:
application/json:
schema:
$ref: '#/components/schemas/AdConfigList'
'403':
description: Forbidden
'422':
description: Invalid query parameters
'500':
description: Server error
post:
tags:
- Ad Configurations
summary: Create an ad configuration
description: |-
Create an ad configuration
operationId: createAdConfigurations
security:
- BC_OAuth2:
- video-cloud/ssai/all
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
description: Create a new ad configuration
content:
application/json:
schema:
$ref: "#/components/schemas/AdConfiguration"
required: true
responses:
'200':
description: A list of videos.
content:
application/json:
schema:
$ref: '#/components/schemas/AdConfiguration'
'403':
description: Forbidden
'422':
description: Invalid query parameters
'500':
description: Server error
'/accounts/{{account_id}}/ssai_configs/{config_id}':
get:
tags:
- Ad Configurations
summary: Get ad configurations details
description: |-
Get the details of an ad configurations defined for an account.
operationId: getAdConfiguration
security:
- BC_OAuth2:
- video-cloud/ssai/read
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConfigId'
responses:
'200':
description: A list of videos.
content:
application/json:
schema:
$ref: '#/components/schemas/AdConfiguration'
'403':
description: Forbidden
'422':
description: Invalid query parameters
'500':
description: Server error
put:
tags:
- Ad Configurations
summary: Update an ad configuration
description: |-
Update an ad configuration
operationId: updateAdConfigurations
security:
- BC_OAuth2:
- video-cloud/ssai/all
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConfigId'
requestBody:
description: Create a new ad configuration
content:
application/json:
schema:
$ref: "#/components/schemas/AdConfiguration"
required: true
responses:
'200':
description: A list of videos.
content:
application/json:
schema:
$ref: '#/components/schemas/AdConfiguration'
'403':
description: Forbidden
'422':
description: Invalid query parameters
'500':
description: Server error
'/accounts/{{account_id}}/ssai_debug_vmap/debug.xml':
post:
tags:
- Ad Call Tracking
summary: Create an SSAI ad trace for an account
description: |-
Create an SSAI ad trace for an account. Use this request if you do **not** have an ad config id.
operationId: createAdTrace
security:
- BC_OAuth2:
- video-cloud/ssai/all
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
description: SSAI ad trace configuration
content:
application/json:
schema:
$ref: "#/components/schemas/AdTraceConfiguration"
required: true
responses:
'200':
description: An ad response. The content varies according to the `expected_ad_response`. For examples, see [Video Cloud SSAI Ad Tag Validation](https://player.support.brightcove.com/advertising/video-cloud-ssai-ad-tag-validation.html)
content:
application/xml:
schema:
$ref: '#/components/schemas/AdResponse'
'403':
description: Forbidden
'500':
description: Server error
'/accounts/{{account_id}}/ssai_traces/{session_id}/ad_calls':
get:
tags:
- Ad Call Tracking
summary: Get ad calls for a session
description: |-
'Get ad calls for a session. The `session_id` comes from the VMAP response: ``'
operationId: getAdCalls
security:
- BC_OAuth2:
- video-cloud/ssai/read
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/SessionId'
responses:
'200':
description: Array of ad calls for a session.
content:
application/json:
schema:
$ref: '#/components/schemas/AdCalls'
'403':
description: Forbidden
'500':
description: Server error
components:
schemas:
Error:
type: object
properties:
error_code:
type: string
description: The error code returned recorded by the server, from the social platform, if any.
error_message:
type: string
description: The error message recorded by the server, or returned from the social platform, if any.
platform_error:
type: string
description: JSON representation of the error object returned from the social platform, if any.
AdCalls:
title: Ad Calls
type: object
description: |-
List of ad calls for a video viewing session.
properties:
ad_calls:
type: array
description: >-
List of ad call objects for the session
items:
$ref: '#/components/schemas/AdCall'
example: {
"ad_calls": [
{
"timestamp": "2019-01-29T16:25:57.775607279Z",
"duration_ms": 2772.666305,
"request": {
"content_length": 0,
"event": "request",
"headers": {
"Referer": [
""
],
"User-Agent": [
"insomnia/6.3.2"
],
"X-Device-User-Agent": [
"insomnia/6.3.2"
],
"X-Forwarded-For": [
"108.26.214.36, 3.89.139.168"
]
},
"method": "GET",
"url": "https://solutions.brightcove.com/bcls/brightcove-player/vmap/simple-vmap.xml"
},
"response": {
"content_length": -1,
"event": "response",
"headers": {
"Accept-Ranges": [
"bytes"
],
"Access-Control-Allow-Credentials": [
"true"
],
"Access-Control-Allow-Headers": [
"X-Requested-With"
],
"Access-Control-Allow-Origin": [
"*"
],
"Content-Type": [
"application/xml"
],
"Date": [
"Tue, 29 Jan 2019 16:25:57 GMT"
],
"Etag": [
"\"13d6-57baaddddeea0-gzip\""
],
"Last-Modified": [
"Tue, 27 Nov 2018 19:58:00 GMT"
],
"Server": [
"Apache/2.4.7 (Ubuntu)"
],
"Vary": [
"Accept-Encoding"
]
},
"status_code": 200
},
"body": "PHZtYXA6Vk1BUCB4bWxuczp2bWFwPSJodHRwOi8vd3d3LmlhYi5uZXQvdmlkZW9zdWl0ZS92bWFwIiB2ZXJzaW9uPSIxLjAiPgoKICA8dm1hcDpBZEJyZWFrIHRpbWVPZmZzZXQ9InN0YXJ0IiBicmVha1R5cGU9ImxpbmVhciIgYnJlYWtJZD0icHJlcm9sbCI+CiAgICA8dm1hcDpBZFNvdXJjZSBpZD0icHJlcm9sbC1hZCIgYWxsb3dNdWx0aXBsZUFkcz0iZmFsc2UiIGZvbGxvd1JlZGlyZWN0cz0idHJ1ZSI+CiAgICAgIDx2bWFwOlZBU1RBZERhdGE+CiAgICAgICAgPFZBU1QgdmVyc2lvbj0iMy4wIj4KICAgICAgICAgIDxBZCBpZD0iMSI+CiAgICAgICAgICAgIDxJbkxpbmU+CiAgICAgICAgICAgICAgPEFkU3lzdGVtIHZlcnNpb249IjEuMCI+VGVzdCBBZCBTZXJ2ZXI8L0FkU3lzdGVtPgogICAgICAgICAgICAgIDxBZFRpdGxlPgogICAgICAgICAgICAgICAgPCFbQ0RBVEFbUG9ydGFsc11dPgogICAgICAgICAgICAgIDwvQWRUaXRsZT4KICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8IVtDREFUQVtEZW1vIGFkIG51bWJlciA2XV0+CiAgICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICA8RXJyb3I+CiAgICAgICAgICAgICAgICA8IVtDREFUQVtdXT4KICAgICAgICAgICAgICA8L0Vycm9yPgogICAgICAgICAgICAgIDxDcmVhdGl2ZXM+CiAgICAgICAgICAgICAgICA8Q3JlYXRpdmU+CiAgICAgICAgICAgICAgICAgIDxMaW5lYXI+CiAgICAgICAgICAgICAgICAgICAgPER1cmF0aW9uPjAwOjAwOjg8L0R1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUcmFja2luZ0V2ZW50cy8+CiAgICAgICAgICAgICAgICAgICAgPEFkUGFyYW1ldGVycz4KICAgICAgICAgICAgICAgICAgICAgIDwhW0NEQVRBWzx4bWw+PC94bWw+XV0+CiAgICAgICAgICAgICAgICAgICAgPC9BZFBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgICAgICAgPFZpZGVvQ2xpY2tzLz4KICAgICAgICAgICAgICAgICAgICA8TWVkaWFGaWxlcz4KICAgICAgICAgICAgICAgICAgICAgIDxNZWRpYUZpbGUgdHlwZT0idmlkZW8vbXA0IiB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIGRlbGl2ZXJ5PSJwcm9ncmVzc2l2ZSIgaWQ9IjIiIGJpdHJhdGU9IjQzMTYiIG1pbkJpdHJhdGU9IjMyMCIgbWF4Qml0cmF0ZT0iMzIwIiBzY2FsYWJsZT0idHJ1ZSIgbWFpbnRhaW5Bc3BlY3RSYXRpbz0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhW0NEQVRBW2h0dHBzOi8vc29sdXRpb25zLmJyaWdodGNvdmUuY29tL2JjbHMvYWRzL2JjLWFkcy9iY2xzLWFkLTYtNXNlY29uZHMubXA0XV0+CiAgICAgICAgICAgICAgICAgICAgICA8L01lZGlhRmlsZT4KICAgICAgICAgICAgICAgICAgICA8L01lZGlhRmlsZXM+CiAgICAgICAgICAgICAgICAgIDwvTGluZWFyPgogICAgICAgICAgICAgICAgPC9DcmVhdGl2ZT4KICAgICAgICAgICAgICA8L0NyZWF0aXZlcz4KICAgICAgICAgICAgICA8RXh0ZW5zaW9ucz4KICAgICAgICAgICAgICAgIDxFeHRlbnNpb24+CiAgICAgICAgICAgICAgICAgIDx4bWw+ZGF0YTwveG1sPgogICAgICAgICAgICAgICAgPC9FeHRlbnNpb24+CiAgICAgICAgICAgICAgPC9FeHRlbnNpb25zPgogICAgICAgICAgICA8L0luTGluZT4KICAgICAgICAgIDwvQWQ+CiAgICAgICAgPC9WQVNUPgogICAgICA8L3ZtYXA6VkFTVEFkRGF0YT4KICAgIDwvdm1hcDpBZFNvdXJjZT4KICA8L3ZtYXA6QWRCcmVhaz4KCiAgPHZtYXA6QWRCcmVhayB0aW1lT2Zmc2V0PSIwMDowMDowNSIgYnJlYWtUeXBlPSJsaW5lYXIiIGJyZWFrSWQ9Im1pZHJvbGwiPgogICAgPHZtYXA6QWRTb3VyY2UgaWQ9Im1pZHJvbGwtYWQiIGFsbG93TXVsdGlwbGVBZHM9ImZhbHNlIiBmb2xsb3dSZWRpcmVjdHM9InRydWUiPgogICAgICA8dm1hcDpWQVNUQWREYXRhPgogICAgICAgIDxWQVNUIHZlcnNpb249IjMuMCI+CiAgICAgICAgICA8QWQgaWQ9IjIiPgogICAgICAgICAgICA8SW5MaW5lPgogICAgICAgICAgICAgIDxBZFN5c3RlbSB2ZXJzaW9uPSIxLjAiPlRlc3QgQWQgU2VydmVyPC9BZFN5c3RlbT4KICAgICAgICAgICAgICA8QWRUaXRsZT4KICAgICAgICAgICAgICAgIDwhW0NEQVRBW01hcmtldGluZ11dPgogICAgICAgICAgICAgIDwvQWRUaXRsZT4KICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8IVtDREFUQVtEZW1vIGFkIG51bWJlciA0XV0+CiAgICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICA8RXJyb3I+CiAgICAgICAgICAgICAgICA8IVtDREFUQVtdXT4KICAgICAgICAgICAgICA8L0Vycm9yPgogICAgICAgICAgICAgIDxDcmVhdGl2ZXM+CiAgICAgICAgICAgICAgICA8Q3JlYXRpdmU+CiAgICAgICAgICAgICAgICAgIDxMaW5lYXIgc2tpcG9mZnNldD0iMDA6MDA6MDUiPgogICAgICAgICAgICAgICAgICAgIDxEdXJhdGlvbj4wMDowMDoxMjwvRHVyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFRyYWNraW5nRXZlbnRzLz4KICAgICAgICAgICAgICAgICAgICA8QWRQYXJhbWV0ZXJzPgogICAgICAgICAgICAgICAgICAgICAgPCFbQ0RBVEFbPHhtbD48L3htbD5dXT4KICAgICAgICAgICAgICAgICAgICA8L0FkUGFyYW1ldGVycz4KICAgICAgICAgICAgICAgICAgICA8VmlkZW9DbGlja3MvPgogICAgICAgICAgICAgICAgICAgIDxNZWRpYUZpbGVzPgogICAgICAgICAgICAgICAgICAgICAgPE1lZGlhRmlsZSB0eXBlPSJ2aWRlby9tcDQiIHdpZHRoPSIxMjgwIiBoZWlnaHQ9IjcyMCIgZGVsaXZlcnk9InByb2dyZXNzaXZlIiBpZD0iMyIgYml0cmF0ZT0iMzAyNiIgbWluQml0cmF0ZT0iMzIwIiBtYXhCaXRyYXRlPSIzMjAiIHNjYWxhYmxlPSJ0cnVlIiBtYWludGFpbkFzcGVjdFJhdGlvPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPCFbQ0RBVEFbaHR0cHM6Ly9zb2x1dGlvbnMuYnJpZ2h0Y292ZS5jb20vYmNscy9hZHMvYmMtYWRzL2JjbHMtYWQtNC0xMnNlY29uZHMubXA0XV0+CiAgICAgICAgICAgICAgICAgICAgICA8L01lZGlhRmlsZT4KICAgICAgICAgICAgICAgICAgICA8L01lZGlhRmlsZXM+CiAgICAgICAgICAgICAgICAgIDwvTGluZWFyPgogICAgICAgICAgICAgICAgPC9DcmVhdGl2ZT4KICAgICAgICAgICAgICA8L0NyZWF0aXZlcz4KICAgICAgICAgICAgICA8RXh0ZW5zaW9ucz4KICAgICAgICAgICAgICAgIDxFeHRlbnNpb24+CiAgICAgICAgICAgICAgICAgIDx4bWw+ZGF0YTwveG1sPgogICAgICAgICAgICAgICAgPC9FeHRlbnNpb24+CiAgICAgICAgICAgICAgPC9FeHRlbnNpb25zPgogICAgICAgICAgICA8L0luTGluZT4KICAgICAgICAgIDwvQWQ+CiAgICAgICAgPC9WQVNUPgogICAgICA8L3ZtYXA6VkFTVEFkRGF0YT4KICAgIDwvdm1hcDpBZFNvdXJjZT4KICA8L3ZtYXA6QWRCcmVhaz4KCiAgPHZtYXA6QWRCcmVhayB0aW1lT2Zmc2V0PSJlbmQiIGJyZWFrVHlwZT0ibGluZWFyIiBicmVha0lkPSJwb3N0cm9sbCI+CiAgICA8dm1hcDpBZFNvdXJjZSBpZD0icG9zdHJvbGwtYWQiIGFsbG93TXVsdGlwbGVBZHM9ImZhbHNlIiBmb2xsb3dSZWRpcmVjdHM9InRydWUiPgogICAgICA8dm1hcDpWQVNUQWREYXRhPgogICAgICAgIDxWQVNUIHZlcnNpb249IjMuMCI+CiAgICAgICAgICA8QWQgaWQ9IjMiPgogICAgICAgICAgICA8SW5MaW5lPgogICAgICAgICAgICAgIDxBZFN5c3RlbSB2ZXJzaW9uPSIxLjAiPlRlc3QgQWQgU2VydmVyPC9BZFN5c3RlbT4KICAgICAgICAgICAgICA8QWRUaXRsZT4KICAgICAgICAgICAgICAgIDwhW0NEQVRBW0JyYW5kXV0+CiAgICAgICAgICAgICAgPC9BZFRpdGxlPgogICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDwhW0NEQVRBW0RlbW8gYWQgbnVtYmVyIDFdXT4KICAgICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgIDxFcnJvcj4KICAgICAgICAgICAgICAgIDwhW0NEQVRBW11dPgogICAgICAgICAgICAgIDwvRXJyb3I+CiAgICAgICAgICAgICAgPENyZWF0aXZlcz4KICAgICAgICAgICAgICAgIDxDcmVhdGl2ZT4KICAgICAgICAgICAgICAgICAgPExpbmVhcj4KICAgICAgICAgICAgICAgICAgICA8RHVyYXRpb24+MDA6MDA6MDg8L0R1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUcmFja2luZ0V2ZW50cy8+CiAgICAgICAgICAgICAgICAgICAgPEFkUGFyYW1ldGVycz4KICAgICAgICAgICAgICAgICAgICAgIDwhW0NEQVRBWzx4bWw+PC94bWw+XV0+CiAgICAgICAgICAgICAgICAgICAgPC9BZFBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgICAgICAgPFZpZGVvQ2xpY2tzLz4KICAgICAgICAgICAgICAgICAgICA8TWVkaWFGaWxlcz4KICAgICAgICAgICAgICAgICAgICAgIDxNZWRpYUZpbGUgdHlwZT0idmlkZW8vbXA0IiB3aWR0aD0iMTI4MCIgaGVpZ2h0PSI3MjAiIGRlbGl2ZXJ5PSJwcm9ncmVzc2l2ZSIgaWQ9IjQiIGJpdHJhdGU9IjIxMTUiIG1pbkJpdHJhdGU9IjMyMCIgbWF4Qml0cmF0ZT0iMzIwIiBzY2FsYWJsZT0idHJ1ZSIgbWFpbnRhaW5Bc3BlY3RSYXRpbz0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhW0NEQVRBW2h0dHBzOi8vc29sdXRpb25zLmJyaWdodGNvdmUuY29tL2JjbHMvYWRzL2JjLWFkcy9iY2xzLWFkLTEtOHNlY29uZHMubXA0XV0+CiAgICAgICAgICAgICAgICAgICAgICA8L01lZGlhRmlsZT4KICAgICAgICAgICAgICAgICAgICA8L01lZGlhRmlsZXM+CiAgICAgICAgICAgICAgICAgIDwvTGluZWFyPgogICAgICAgICAgICAgICAgPC9DcmVhdGl2ZT4KICAgICAgICAgICAgICA8L0NyZWF0aXZlcz4KICAgICAgICAgICAgICA8RXh0ZW5zaW9ucz4KICAgICAgICAgICAgICAgIDxFeHRlbnNpb24+CiAgICAgICAgICAgICAgICAgIDx4bWw+ZGF0YTwveG1sPgogICAgICAgICAgICAgICAgPC9FeHRlbnNpb24+CiAgICAgICAgICAgICAgPC9FeHRlbnNpb25zPgogICAgICAgICAgICA8L0luTGluZT4KICAgICAgICAgIDwvQWQ+CiAgICAgICAgPC9WQVNUPgogICAgICA8L3ZtYXA6VkFTVEFkRGF0YT4KICAgIDwvdm1hcDpBZFNvdXJjZT4KICA8L3ZtYXA6QWRCcmVhaz4KCjwvdm1hcDpWTUFQPgo=",
"creatives": null,
"errors": null
}
]
}
AdCall:
title: Ad Call
type: object
description: |-
The request and response for an ad request
properties:
timestamp:
type: string
description: UTC timestamp for the ad call
duration_ms:
type: number
description: Duration of the ad call in milliseconds
request:
type: object
description: >-
Details of the ad request
properties:
content_length:
type: integer
description: >-
The amount of video played back before the request (in seconds)
event:
type: string
description: >-
The player event associated with the ad call, normally `request`
headers:
type: array
description: >-
Array of header name-value pairs sent with the request
items:
type: object
description: >-
A header object. The name will be the header name, and the value an array of string values for the header
method:
type: string
description: >-
The HTTP request type, normally `GET`
url:
type: string
description: >-
URL for the ad request
response:
type: object
description: >-
Details of the ad response
properties:
content_length:
type: integer
description: >-
The amount of video played back before the response (in seconds)
event:
type: string
description: >-
The player event associated with the ad response, normally `response`
headers:
type: array
description: >-
Array of header name-value pairs returned with the response
items:
type: object
description: >-
A header object. The name will be the header name, and the value an array of string values for the header
status_code:
type: integer
description: >-
The HTTP status code - `200` = "success"
body:
type: string
description: >-
The Base64-encoded body of the reponse. You can use a tool like [BASE64](https://www.base64decode.org/) to see the full response - the content will vary according to the expected ad response.
AdConfigList:
title: List Ad Configurations Response
type: array
description: >-
Array of ad configuration objects
items:
$ref: '#/components/schemas/AdConfiguration'
AdConfiguration:
title: "Ad Configuration Response"
type: object
properties:
account_id:
type: string
description: The Video Cloud account id
ad_config:
$ref: '#/components/schemas/AdConfig'
ad_tracking_sample_percentage:
type: integer
description: >-
The value determines the percentage of sessions that will be logged. A value of 0 disables logs entirely. 0 is the default value.
minimum: 0
maximum: 100
default: 0
beacon_templates:
type: array
description: |-
An array of beacons to fire (example: 3rd-party beacons)
items:
$ref: '#/components/schemas/BeaconTemplate'
config_id:
type: string
description: System id for this configuration
readOnly: true
created_timestamp:
type: string
description: Date-time when the ad configuration was created
description:
type: string
description: Description of the ad configuration
discontinuities:
$ref: '#/components/schemas/Discontinuities'
extend_beacon_guard_ttl:
type: boolean
description: >-
Sets the length of the Beacon Guard TTL (Time to live) to the length of the Content’s Session TTL. Otherwise, the default is 1 minute.
default: false
name:
type: string
description: Name of the ad configuration
updated_timestamp:
type: string
description: Date-time when the ad configuration was last updated
vmap_response_namespace:
type: string
description: >-
Adjusts the VMAP output to use the legacy Unicorn Once namespace format or to use the new Brightcove namespace format.
enum:
- bc
- uo
default: bc
example: [
{
"name": "SSAI VMAP 2",
"vmap_response_namespace": "bc",
"config_id": "1bcd16d4-585c-40bd-9300-17caf2ed075e",
"account_id": "1752604059001",
"created_timestamp": "2019-01-09T13:16:42.132450307Z",
"updated_timestamp": "2019-01-09T13:16:42.132450307Z",
"description": "Basic ad configuration",
"ad_config": {
"enable_ads": true,
"expected_ad_response": "dfp_vmap",
"disable_server_beacons": false,
"round_up_cue_points": true,
"template_url": {
"template": "https://solutions.brightcove.com/bcls/brightcove-player/vmap/simple-vmap.xml"
}
},
"beacon_templates": [
{
"type": "content_start",
"template_url": {
"template": "https://myserver.com/beaconRX/{{metadata.video_id}}/load?position=load&sid={{system.xfp.unique_user_id}}&jid={{metadata.video_id}}&rnd32={{sytem.random_number_32}}&bid={{system.uuid}}&t={{system.timestamp_utc}}&ua={{system.user_agent}}&ip={{system.ip_address}}&ref={{system.referer}}"
}
},
{
"type": "content_midpoint",
"template_url": {
"template": "https://myserver.com/beaconRX/{{metadata.video_id}}/load?position=load&sid={{system.xfp.unique_user_id}}&jid={{metadata.video_id}}&rnd32={{sytem.random_number_32}}&bid={{system.uuid}}&t={{system.timestamp_utc}}&ua={{system.user_agent}}&ip={{system.ip_address}}&ref={{system.referer}}"
}
},
{
"type": "ad_start",
"template_url": {
"template": "https://myserver.com/beaconRX/{{metadata.video_id}}/load?position=load&sid={{system.xfp.unique_user_id}}&jid={{metadata.video_id}}&rnd32={{sytem.random_number_32}}&bid={{system.uuid}}&t={{system.timestamp_utc}}&ua={{system.user_agent}}&ip={{system.ip_address}}&ref={{system.referer}}"
}
},
{
"type": "content_complete",
"template_url": {
"template": "https://myserver.com/beaconRX/{{metadata.video_id}}/load?position=load&sid={{system.xfp.unique_user_id}}&jid={{metadata.video_id}}&rnd32={{sytem.random_number_32}}&bid={{system.uuid}}&t={{system.timestamp_utc}}&ua={{system.user_agent}}&ip={{system.ip_address}}&ref={{system.referer}}"
}
}
],
"discontinuities": {
"dash": [
"*"
],
"hls": [
"*"
]
},
"extend_beacon_guard_ttl": true
}
]
AdConfig:
title: ad_config
type: object
description: Ad config part of an ad configuration object
properties:
expected_ad_response:
type: string
description: |-
Which tech to use to parse the response.
When the `expected_ad_response` is set to `vast_3_0`, SSAI makes one VAST call for each ad cue point defined in Video Cloud. For VMAP and ad rules, SSAI makes requests based on the defined ad breaks in the initial ad response.
enum:
- dfp_ad_rules
- dfp_vmap
- smart_xml
- vast_3_0
enable_ads:
type: boolean
description: |-
Flags whether to disable the server side firing of ad requests.
When set to `false`, SSAI will not request any ads server-side and will include all ad requests in the VMAP output
When set to `true`, SSAI will request ads server-side and include any that are unsuccessful in the VMAP output
default: true
disable_server_beacons:
type: boolean
description: |-
Flags whether to disable the server side firing of ad impressions/beacons
When set to `true`, SSAI will not fire any beacons server-side and will include all beacons in the VMAP output
When set to `false`, SSAI will fire the beacons it is able to server-side and include any it is not able to in the VMAP output
round_up_cue_points:
type: boolean
description: |-
Flags whether to round up ad cue point time to the next keyframe
default: false
template_url:
type: object
properties:
template:
type: string
description: >-
Ad tag template. Available variables described in [this document](/vod/guides/video-cloud-ssai-ad-config-api.html#Ad_variables).
AdResponse:
title: Ad Response
type: object
description: >-
An ad response. The content varies depending on the kind of response expected. For examples, see [Video Cloud SSAI Ad Tag Validation](https://player.support.brightcove.com/advertising/video-cloud-ssai-ad-tag-validation.html#Tracing_without_an_ad_config_id)
example:
xml:
summary: VMAP/VAST example
value: |-
'
BIAS
test-01-30s
test-01-30s
00:00:30.0000
https://solutions.brightcove.com/beacon?event=mute&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://solutions.brightcove.com/beacon?event=unmute&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://solutions.brightcove.com/beacon?event=rewind&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://solutions.brightcove.com/beacon?event=pause&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://solutions.brightcove.com/beacon?event=resume&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://solutions.brightcove.com/beacon?event=fullscreen&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://solutions.brightcove.com/beacon?event=acceptInvitation&type=vast&request_id=43a0e4a5-4420-11e8-b306-99b1b6ae5164&parent_request_id=436ae081-4420-11e8-bd7f-41361f814644&ad_id=test-01-30s
https://www.brightcove.com/en/
...// additional ad breaks
'
BeaconTemplate:
title: Beacon Template
description: >-
Beacons are sent to send analytics data from the client. The beacon template defines the type of events to send beacons for and the information that will be sent.
type: object
properties:
type:
type: string
description: |-
Type of beacon to fire.
enum:
- content_first_quartile
- content_start
- content_midpoint
- content_third_quartile
- content_complete
- content_quartiles
- content_interval
- ad_start
- ad_first_quartile
- ad_midpoint
- ad_third_quartile
- ad_complete
- ad_quartiles
- ad_break_start
- ad_break_end
- segment_start
- segment_end
- on_load
template_url:
type: object
properties:
template:
type: string
description: The beacon URL template
Discontinuities:
type: object
description: |-
Controls the versions of DASH to deliver Multi Period manifests or versions of HLS to deliver with discontinuities
properties:
dash:
type: array
description: |-
Controls which versions of dash to deliver Multi Period Dash manifests.
Set to ["*"] to deliver multi-period dash for all versions
Empty list for never
Example: ["live-timeline"] to deliver for live-timeline but not for hbbtv
items:
type: string
example:
["live-timeline"]
hls:
type: array
description: |-
Controls which versions of hls to deliver with discontinuities.
Set to ["*"] to delivery with discontinuities in all versions of HLS
Empty list for never
Example: ["v4","v5"] to deliver for v4 & v5 but not for v3
items:
type: string
example:
["v4","v5"]
AdTraceConfiguration:
type: object
description: |-
Configuration for the ad trace.
properties:
playback_config:
$ref: "#/components/schemas/PlaybackConfig"
title_metadata:
type: object
description: >-
Metadata for the video
properties:
duration:
type: string
description: >-
The video duration
example: 39s
videocloud_metadata:
$ref: "#/components/schemas/VideoCloudMetadata"
example: {
"playback_config":{
"name": "config_name",
"vmap_response_namespace": "config_namespace",
"account_id": "account_id",
"ad_config": {
"enable_ads": true,
"expected_ad_response": "dfp_ad_rules",
"disable_server_beacons": false,
"round_up_cue_points": false,
"template_url": {
"template": "template_url"
}
},
"extend_beacon_guard_ttl": false
},
"title_metadata":{
"duration": "10s"
},
"videocloud_metadata": {
"name": "ad_name",
"tags": [ "tag1:tag1_value", "tag2:tag2_value" ],
"ad_keys":"a=1&b=2",
"cue_points": [{
"name":"Pre-roll",
"type":"AD",
"time":0,
"metadata":"type:pre-roll,a=b",
},
{
"name":"Mid-roll",
"type":"AD",
"time":10,
"metadata":"type=mid-roll,x=y",
}]
}
}
PlaybackConfig:
type: object
description: >-
Playback configuration for ads
properties:
name:
type: string
description: >-
Name of the playback configuration
vmap_response_namespace:
type: string
description: >-
Adjusts the VMAP output to use the legacy Unicorn Once namespace format or to use the new Brightcove namespace format.
enum:
- bc
- uo
default: bc
account_id:
type: string
description: >-
The Video Cloud account id
ad_config:
$ref: '#/components/schemas/AdConfig'
extend_beacon_guard_ttl:
type: boolean
description: >-
Sets the length of the Beacon Guard TTL (Time to live) to the length of the Content’s Session TTL. Otherwise, the default is 1 minute.
default: false
VideoCloudMetadata:
type: object
description: >-
Video Cloud metadata referenced by ad template variables
properties:
name:
type: string
description: the ad name
tags:
type: array
description: >-
Array of `tag:value` pairs
items:
type: string
example: ["subject:sports", "category:tennis"]
ad_keys:
type: string
description: >-
String of key-value pairs separated by ampersands
example: category=sports&subcategory=tennis
cue_points:
type: array
description: >-
Array of video cuepoint objectsF
items:
type: object
properties:
name:
type: string
description: >-
Name of the cuepoint
type:
type: string
description: >-
Type of the cuepoint
enum:
- AD
- CODE
time:
type: integer
description: >-
Time of the cuepoint in the video (seconds)
metadata:
type: string
description: >-
String of metadata assigned to the cuepoint when it was created
parameters:
AccountId:
name: account_id
in: path
description: ID of the account to query video statuses for
required: true
schema:
type: string
VideoId:
name: video_id
in: path
description: ID of the video to query video statuses for
required: true
schema:
type: string
ConfigId:
name: config_id
in: path
description: ID of the ad configuration
required: true
schema:
type: string
SessionId:
name: session_id
in: path
description: Session id from the VMAP response
required: true
schema:
type: string
securitySchemes:
BC_OAuth2:
type: oauth2
description: >-
Brightcove OAuth API. See the [support documentation](/oauth/index.html) or [Getting Access Tokens](/oauth/guides/getting-access-tokens.html) to learn more
flows:
clientCredentials:
tokenUrl: 'https://oauth.brightcove.com/v4/access_token'
scopes:
video-cloud/ssai/read: Read SSAI metadata
video-cloud/ssai/all: Read and write SSAI metadata