The Dynamic Ad Insertion API enables you to request and track DAI video-on-demand (VOD) streams. HLS and DASH streams are supported.
Service: dai.google.com
The stream
method's path is relative to https://dai.google.com
Method: stream
Methods | |
---|---|
stream |
POST /ondemand/v1/hls/content/{content-source}/vid/{video-id}/stream
Creates an HLS DAI stream for the given content source and video ID.
Creates a DASH DAI stream for the given content source and video ID. |
HTTP request
POST https://dai.google.com/ondemand/v1/hls/content/{content-source}/vid/{video-id}/stream
POST https://dai.google.com/ondemand/v1/dash/content/{content-source}/vid/{video-id}/stream
Request header
Parameters | |
---|---|
api‑key |
string The API key, provided when creating a stream, must be valid for the publisher's network. Instead of providing it in the request body, the API key can be passed in the HTTP Authorization header with the following format: Authorization: DCLKDAI key="<api-key>" |
Path parameters
Parameters | |
---|---|
content-source |
string The stream's CMS ID. |
video-id |
string The stream's video ID. |
Request body
The request body is of type application/x-www-form-urlencoded
and contains the
following parameters:
Parameters | ||
---|---|---|
dai-ssb |
Optional | Set to |
DFP Targeting Parameters | Optional | Additional targeting parameters. |
Override Stream Parameters | Optional | Override default values of a stream creation parameter. |
HMAC Authentication | Optional | Authenticate using an HMAC-based token. |
Response body
If successful, the response body contains a new
Stream
. For server-side-beaconing streams, this Stream
contains only the stream_id
and stream_manifest
fields.
Open Measurement
The Verifications
field contains information for Open
Measurement verification for non-server-side-beaconing streams.
Verifications
contains one or more Verification
elements that list the resources
and metadata you need to verify creative playback with third-party measurement code.
Only JavaScriptResource
is supported. For more information,
please see the IAB Tech Lab
and the VAST 4.1 spec.
Method: media verification
After you encounter an ad media identifier during playback, immediately make a
request using the media_verification_url
from the stream
endpoint. The media_verification_url
is an absolute path.
Media verification requests aren't necessary for server-side-beaconing streams,
where the server initiates media verification.
Requests to the media verification
endpoint are idempotent.
Methods | |
---|---|
media verification |
GET {media_verification_url}/{ad_media_id}
Notifies the API of a media verification event. |
HTTP request
GET {media-verification-url}/{ad-media-id}
Response body
media verification
returns the following responses:
HTTP/1.1 204 No Content
if media verification succeeds and all pings are sent.HTTP/1.1 404 Not Found
if the request can't verify the media due to incorrect URL formatting or expiration.HTTP/1.1 404 Not Found
if a previous verification request for this ID succeeded.HTTP/1.1 409 Conflict
if another request is already sending pings at this time.
Ad media IDs (HLS)
Ad media identifiers will be encoded in HLS Timed Metadata using the key TXXX
,
reserved for "user-defined text information" frames. The contents of the frame
will be unencrypted and will always begin with the text "google_"
.
The entire text contents of the frame should be appended to the media_verification_url for each ad verification request.
Ad media IDs (DASH)
Ad media identifiers will be inserted into the manifest through the use of
DASH’s EventStream
element.
Each EventStream
will have a Scheme ID URI of urn:google:dai:2018
.
They will contain events with the messageData
attribute containing an
ad media ID beginning with “google_”
. The entire content of the messageData
attribute should be appended to the media_verification_url for each ad
verification request.
Response data
Stream
Stream is used to render a list of all the resources for a newly created stream in JSON format .JSON representation |
---|
{ "stream_id": string, "total_duration": number, "content_duration": number, "valid_for": string, "valid_until": string, "subtitles": [object(Subtitle)], "hls_master_playlist": string, "stream_manifest": string, "media_verification_url": string, "apple_tv": object(AppleTV), "ad_breaks": [object(AdBreak)], } |
Fields | |
---|---|
stream_id |
string Stream identifier. |
total_duration |
number Stream duration in seconds. |
content_duration |
number Duration of the content, without ads, in seconds. |
valid_for |
string Duration stream is valid for, in "00h00m00s" format. |
valid_until |
string Date the stream is valid until, in RFC 3339 format. |
subtitles |
[object(Subtitle)] A list of Subtitles. Omitted if empty. HLS only. |
hls_master_playlist |
string (DEPRECATED) HLS master playlist URL. Use stream_manifest. HLS only. |
stream_manifest |
string The stream's manifest. Corresponds to the master playlist in HLS and the MPD in DASH. |
media_verification_url |
string Media verification URL. |
apple_tv |
object(AppleTV) Optional information specific to AppleTV devices. HLS only. |
ad_breaks |
[object(AdBreak)] A list of AdBreaks. Omitted if empty. |
AppleTV
AppleTV contains information specific to Apple TV devices.JSON representation |
---|
{ "interstitials_url": string, } |
Fields | |
---|---|
interstitials_url |
string Interstitials URL. |
AdBreak
AdBreak describes a single ad break in the stream. It contains a position, a duration, a type (mid/pre/post) and a list of ads.JSON representation |
---|
{ "type": string, "start": number, "duration": number, "ads": [object(Ad)], } |
Fields | |
---|---|
type |
string Valid break types are: mid, pre, and post. |
start |
number Position in the stream that the break starts, in seconds. |
duration |
number Duration of the ad break, in seconds. |
ads |
[object(Ad)] A list of Ads. Omitted if empty. |
Ad
Ad describes an ad in the stream. It contains the position of the ad in the break, the duration of the ad and some optional metadata.JSON representation |
---|
{ "seq": number, "start": number, "duration": number, "title": string, "description": string, "advertiser": string, "ad_system": string, "ad_id": string, "creative_id": string, "creative_ad_id": string, "deal_id": string, "clickthrough_url": string, "icons": [object(Icon)], "wrappers": [object(Wrapper)], "events": [object(Event)], "verifications": [object(Verification)], "universal_ad_id": object(UniversalAdID), } |
Fields | |
---|---|
seq |
number Position of the ad in the break. |
start |
number Position in the stream that the ad starts, in seconds. |
duration |
number Duration of the ad, in seconds. |
title |
string Optional title of the ad. |
description |
string Optional description of the ad. |
advertiser |
string Optional advertiser identifier. |
ad_system |
string Optional ad system. |
ad_id |
string Optional ad ID. |
creative_id |
string Optional creative ID. |
creative_ad_id |
string Optional creative ad ID. |
deal_id |
string Optional deal ID. |
clickthrough_url |
string Optional clickthrough URL. |
icons |
[object(Icon)] A list of icons, omitted if empty. |
wrappers |
[object(Wrapper)] A list of Wrappers. Omitted if empty. |
events |
[object(Event)] A list of the events in the ad. |
verifications |
[object(Verification)] Optional Open Measurement verification entries which list the resources and metadata required to execute third-party measurement code to verify creative playback. |
universal_ad_id |
object(UniversalAdID) Optional universal ad ID. |
Icon
Icon contains information about a VAST Icon.JSON representation |
---|
{ "click_data": object(ClickData), "creative_type": string, "click_fallback_images": [object(FallbackImage)], "height": int32, "width": int32, "resource": string, "type": string, "x_position": string, "y_position": string, "program": string, "alt_text": string, } |
Fields | |
---|---|
click_data |
object(ClickData) |
creative_type |
string |
click_fallback_images |
[object(FallbackImage)] |
height |
int32 |
width |
int32 |
resource |
string |
type |
string |
x_position |
string |
y_position |
string |
program |
string |
alt_text |
string |
ClickData
ClickData contains information about an icon click through.JSON representation |
---|
{ "url": string, } |
Fields | |
---|---|
url |
string |
FallbackImage
FallbackImage contains information about a VAST fallback image.JSON representation |
---|
{ "creative_type": string, "height": int32, "width": int32, "resource": string, "alt_text": string, } |
Fields | |
---|---|
creative_type |
string |
height |
int32 |
width |
int32 |
resource |
string |
alt_text |
string |
Wrapper
Wrapper contains information about a wrapper ad. Do not include a Deal ID if it does not exist.JSON representation |
---|
{ "system": string, "ad_id": string, "creative_id": string, "creative_ad_id": string, "deal_id": string, } |
Fields | |
---|---|
system |
string Ad system identifier. |
ad_id |
string Ad ID used for the wrapper ad. |
creative_id |
string Creative ID used for the wrapper ad. |
creative_ad_id |
string Creative Ad ID used for the wrapper ad. |
deal_id |
string Optional deal ID for the wrapper ad. |
Event
Event contains an event type and a presentation time of an event.JSON representation |
---|
{ "time": number, "type": string, } |
Fields | |
---|---|
time |
number This event's presentation time. |
type |
string This event's type. |
Subtitle
Subtitle describes a sidecar subtitle track for the video stream. It stores two subtitle formats: TTML and WebVTT. The TTMLPath attribute contains the URL to the TTML sidecar file and the WebVTTPath attribute similarly contains a URL to the WebVTT sidecar file.JSON representation |
---|
{ "language": string, "language_name": string, "ttml": string, "webvtt": string, } |
Fields | |
---|---|
language |
string A language code, such as 'en' or 'de'. |
language_name |
string Descriptive name of the language. It differentiates the specific set of subtitles if multiple sets exist for the same language |
ttml |
string Optional URL to the TTML sidecar file. |
webvtt |
string Optional URL to the WebVTT sidecar file. |
Verification
Verification contains information for Open Measurement, which facilitates third-party viewability and verification measurement. Currently, only JavaScript resources are supported. See https://iabtechlab.com/standards/open-measurement-sdk/JSON representation |
---|
{ "vendor": string, "java_script_resources": [object(JavaScriptResource)], "tracking_events": [object(TrackingEvent)], "parameters": string, } |
Fields | |
---|---|
vendor |
string The verification vendor. |
java_script_resources |
[object(JavaScriptResource)] List of JavaScript resources for the verification. |
tracking_events |
[object(TrackingEvent)] List of tracking events for the verification. |
parameters |
string An opaque string passed to bootstrap verification code. |
JavaScriptResource
JavaScriptResource contains information for verification via JavaScript.JSON representation |
---|
{ "script_url": string, "api_framework": string, "browser_optional": boolean, } |
Fields | |
---|---|
script_url |
string URI to javascript payload. |
api_framework |
string APIFramework is the name of the video framework exercising the verification code. |
browser_optional |
boolean Whether this script can be run outside of a browser. |
TrackingEvent
TrackingEvent contains URLs that should be pinged by the client in certain situations.JSON representation |
---|
{ "event": string, "uri": string, } |
Fields | |
---|---|
event |
string The type of the tracking event, currently the only option is "verificationNotExecuted" as specified in VAST 4.1 specification. |
uri |
string The tracking event to be pinged. |
UniversalAdID
UniversalAdID is used to provide a unique creative identifier that is maintained across ad systems.JSON representation |
---|
{ "id_value": string, "id_registry": string, } |
Fields | |
---|---|
id_value |
string The Universal Ad ID of the selected creative for the ad. |
id_registry |
string A string used to identify the URL for the registry website where the selected creative's Universal Ad ID is cataloged. |