This guide explains how to upload creative assets and build
Display & Video 360 Creative
resources using the Display & Video 360 API advertisers.assets
and advertisers.creatives
services.
Prerequisites
Complete the following steps before building creatives using the Display & Video 360 API.
-
Ensure your Display & Video 360 user profile, identified by a user or service account email address, has Read & writepermissions for the advertiser. If you don't have Read & writepermissions, contact an existing Adminuser on your team.
Build a new creative
Building a new creative with new assets through the Display & Video 360 API requires at least two API requests. The first uploads a creative asset, and the second constructs the creative object.
Upload an asset
To upload the necessary creative assets
to Display & Video 360,
call the advertisers.assets.upload
method.
The asset must be assigned to the same advertiser as the creative.
After you upload an asset, the API returns a response
that
includes the asset
object. You can't retrieve this asset
object
again later, so make note of the corresponding mediaId
. The mediaId
of this asset is used to assign the asset to a
creative.
Specific creative types only accept specific file types as assets in particular asset roles. See the Help Center for more information on choosing the right file types for your creatives.
Here's an example of how to upload an asset:
Java
// Create the asset upload request content.
CreateAssetRequest
content
=
new
CreateAssetRequest
();
content
.
setFilename
(
asset
-
filename
);
// Create input stream for the creative asset.
InputStreamContent
assetStream
=
new
InputStreamContent
(
getMimeType
(
asset
-
filename
),
new
FileInputStream
(
asset
-
path
));
// Configure the asset upload request.
Assets
.
Upload
assetRequest
=
service
.
advertisers
().
assets
()
.
upload
(
advertiser
-
id
,
content
,
assetStream
);
// Upload the asset.
CreateAssetResponse
assetResponse
=
assetRequest
.
execute
();
// Display the new asset media ID.
Asset
asset
=
assetResponse
.
getAsset
();
System
.
out
.
printf
(
"The asset has been upload with media ID %s"
,
asset
.
getMediaId
());
This example uses the following helper function to find the file MIME type:
import
java.net.FileNameMap
;
import
java.net.URLConnection
;
private
static
String
getMimeType
(
String
fileName
)
{
// Parse filename for appropriate MIME type.
FileNameMap
fileNameMap
=
URLConnection
.
getFileNameMap
();
String
mimeType
=
fileNameMap
.
getContentTypeFor
(
fileName
);
// If MIME type was found, return it.
if
(
mimeType
!=
null
)
{
return
mimeType
;
}
// Otherwise, return a default value.
return
"application/octet-stream"
;
}
Python
# Create the request body.
body
=
{
'filename'
:
asset
-
filename
}
# Create upload object.
media
=
MediaFileUpload
(
asset
-
path
)
if
not
media
.
mimetype
():
media
=
MediaFileUpload
(
asset
-
path
,
'application/octet-stream'
)
# Upload the asset.
response
=
service
.
advertisers
()
.
assets
()
.
upload
(
advertiserId
=
advertiser
-
id
,
body
=
body
,
media_body
=
media
)
.
execute
()
# Display the new asset media ID.
print
(
"Asset was created with media ID
%s
."
%
response
[
'asset'
][
'mediaId'
])
PHP
$body = new Google_Service_DisplayVideo_CreateAssetRequest();
$body->setFilename( asset-filename
);
$optParams = array(
'data' => file_get_contents( asset-path
),
'mimeType' => mime_content_type( asset-filename
),
'uploadType' => 'media'
);
// Call the API, uploading the asset file to Display & Video 360.
$result = $service->advertisers_assets->upload(
advertiser-id
,
$body,
$optParams
);
// Display the new asset media ID.
printf(
'Asset was created with media ID %s.',
$result->getAsset()->getMediaId()
);
cURL
curl
--request
POST
\
'https://displayvideo.googleapis.com/upload/v4/advertisers/ advertiser-id
/assets?uploadType=multipart'
--header
'Authorization: Bearer access-token
'
\
-F
"data={\"filename\": \" asset-filename
\"};type=application/json;charset=UTF-8"
\
-F
"file=@ asset-path
;type= asset-mime-type
"
Build the creative
After you upload assets and obtain their media IDs, you can build full Creative
objects with those assets.
Use the advertisers.creatives.create
method to make a new Creative
. Each creative type only requires a subset of the Creative
fields.
See this guide's annex for details on mapping UI fields to the corresponding API fields for each creative type.
Here are examples of how to create native display, HTML5, and video creatives:
Native display
Java
// Create a creative object.
Creative
creative
=
new
Creative
();
creative
.
setDisplayName
(
display
-
name
);
creative
.
setEntityStatus
(
"ENTITY_STATUS_ACTIVE"
);
creative
.
setHostingSource
(
"HOSTING_SOURCE_HOSTED"
);
// Set native creative type.
creative
.
setCreativeType
(
"CREATIVE_TYPE_NATIVE"
);
// Create a dimensions object.
Dimensions
dimensions
=
new
Dimensions
();
dimensions
.
setHeightPixels
(
creative
-
height
-
pixels
);
dimensions
.
setWidthPixels
(
creative
-
width
-
pixels
);
// Add the dimensions object to the creative object.
creative
.
setDimensions
(
dimensions
);
// Create list for asset associations.
List<
;
AssetAssociation
>
assetAssociations
=
new
ArrayList<
;
AssetAssociation
> ();
// Assign the image asset to a role.
AssetAssociation
mainImageAssetAssociation
=
new
AssetAssociation
();
mainImageAssetAssociation
.
setAsset
(
new
Asset
().
setMediaId
(
image
-
asset
-
media
-
id
));
mainImageAssetAssociation
.
setRole
(
"ASSET_ROLE_MAIN"
);
assetAssociations
.
add
(
mainImageAssetAssociation
);
// Assign the logo asset to a role.
AssetAssociation
iconAssetAssociation
=
new
AssetAssociation
();
iconAssetAssociation
.
setAsset
(
new
Asset
().
setMediaId
(
logo
-
asset
-
media
-
id
));
iconAssetAssociation
.
setRole
(
"ASSET_ROLE_ICON"
);
assetAssociations
.
add
(
iconAssetAssociation
);
// Create and assign advertiser name asset.
Asset
advertiserNameAsset
=
new
Asset
();
advertiserNameAsset
.
setContent
(
advertiser
-
name
);
AssetAssociation
advertiserNameAssetAssociation
=
new
AssetAssociation
();
advertiserNameAssetAssociation
.
setAsset
(
advertiserNameAsset
);
advertiserNameAssetAssociation
.
setRole
(
"ASSET_ROLE_ADVERTISER_NAME"
);
assetAssociations
.
add
(
advertiserNameAssetAssociation
);
// Create and assign headline asset.
Asset
headlineAsset
=
new
Asset
();
headlineAsset
.
setContent
(
headline
);
AssetAssociation
headlineAssetAssociation
=
new
AssetAssociation
();
headlineAssetAssociation
.
setAsset
(
headlineAsset
);
headlineAssetAssociation
.
setRole
(
"ASSET_ROLE_HEADLINE"
);
assetAssociations
.
add
(
headlineAssetAssociation
);
// Create and assign body text asset.
Asset
bodyTextAsset
=
new
Asset
();
bodyTextAsset
.
setContent
(
body
-
text
);
AssetAssociation
bodyTextAssetAssociation
=
new
AssetAssociation
();
bodyTextAssetAssociation
.
setAsset
(
bodyTextAsset
);
bodyTextAssetAssociation
.
setRole
(
"ASSET_ROLE_BODY"
);
assetAssociations
.
add
(
bodyTextAssetAssociation
);
// Create and assign caption URL asset.
Asset
captionUrlAsset
=
new
Asset
();
captionUrlAsset
.
setContent
(
caption
-
url
);
AssetAssociation
captionUrlAssetAssociation
=
new
AssetAssociation
();
captionUrlAssetAssociation
.
setAsset
(
captionUrlAsset
);
captionUrlAssetAssociation
.
setRole
(
"ASSET_ROLE_CAPTION_URL"
);
assetAssociations
.
add
(
captionUrlAssetAssociation
);
// Create and assign call to action asset.
Asset
callToActionAsset
=
new
Asset
();
callToActionAsset
.
setContent
(
call
-
to
-
action
);
AssetAssociation
callToActionAssetAssociation
=
new
AssetAssociation
();
callToActionAssetAssociation
.
setAsset
(
callToActionAsset
);
callToActionAssetAssociation
.
setRole
(
"ASSET_ROLE_CALL_TO_ACTION"
);
assetAssociations
.
add
(
callToActionAssetAssociation
);
// Create and set the list of creative assets.
creative
.
setAssets
(
assetAssociations
);
// Create an exit event.
ExitEvent
exitEvent
=
new
ExitEvent
();
exitEvent
.
setType
(
"EXIT_EVENT_TYPE_DEFAULT"
);
exitEvent
.
setUrl
(
landing
-
page
-
url
);
// Create and set the list of exit events for the creative.
creative
.
setExitEvents
(
ImmutableList
.
of
(
exitEvent
));
// Configure the create request.
Creatives
.
Create
request
=
service
.
advertisers
().
creatives
().
create
(
advertiser
-
id
,
creative
);
// Send the request.
Creative
response
=
request
.
execute
();
// Display the new creative.
System
.
out
.
printf
(
"Creative %s was created.\n"
,
response
.
getName
());
Python
# Create a creative object.
creative_obj
=
{
'displayName'
:
display
-
name
,
'entityStatus'
:
'ENTITY_STATUS_ACTIVE'
,
'hostingSource'
:
'HOSTING_SOURCE_HOSTED'
,
'creativeType'
:
'CREATIVE_TYPE_NATIVE'
,
'dimensions'
:
{
'heightPixels'
:
creative
-
height
-
pixels
,
'widthPixels'
:
creative
-
width
-
pixels
},
'assets'
:
[
{
'asset'
:
{
'mediaId'
:
image
-
asset
-
media
-
id
},
'role'
:
'ASSET_ROLE_MAIN'
},
{
'asset'
:
{
'mediaId'
:
logo
-
asset
-
media
-
id
},
'role'
:
'ASSET_ROLE_ICON'
},
{
'asset'
:
{
'content'
:
advertiser
-
name
},
'role'
:
'ASSET_ROLE_ADVERTISER_NAME'
},
{
'asset'
:
{
'content'
:
headline
},
'role'
:
'ASSET_ROLE_HEADLINE'
},
{
'asset'
:
{
'content'
:
body
-
text
},
'role'
:
'ASSET_ROLE_BODY'
},
{
'asset'
:
{
'content'
:
caption
-
url
},
'role'
:
'ASSET_ROLE_CAPTION_URL'
},
{
'asset'
:
{
'content'
:
call
-
to
-
action
},
'role'
:
'ASSET_ROLE_CALL_TO_ACTION'
},
],
'exitEvents'
:
[
{
'type'
:
'EXIT_EVENT_TYPE_DEFAULT'
,
'url'
:
landing
-
page
-
url
}
]
}
# Create the creative.
creative
=
service
.
advertisers
()
.
creatives
()
.
create
(
advertiserId
=
advertiser
-
id
,
body
=
creative_obj
)
.
execute
()
# Display the new creative.
print
(
"creative
%s
was created."
%
creative
[
"name"
])
PHP
// Create a creative object.
$creative = new Google_Service_DisplayVideo_Creative();
$creative->setDisplayName( display-name
);
$creative->setEntityStatus('ENTITY_STATUS_ACTIVE');
$creative->setHostingSource('HOSTING_SOURCE_HOSTED');
// Set native creative type.
$creative->setCreativeType('CREATIVE_TYPE_NATIVE');
// Create a dimensions object.
$dimensions = new Google_Service_DisplayVideo_Dimensions();
$dimensions->setHeightPixels( creative-height-pixels
);
$dimensions->setWidthPixels( creative-width-pixels
);
// Add the dimensions object to the creative object.
$creative->setDimensions($dimensions);
// Create list for asset associations.
$assetAssociations = array();
// Assign the image asset to a role.
$imageAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$imageAsset = new Google_Service_DisplayVideo_Asset();
$imageAsset->setMediaId( image-asset-media-id
);
$imageAssetAssoc->setAsset($imageAsset);
$imageAssetAssoc->setRole('ASSET_ROLE_MAIN');
$assetAssociations[] = $imageAssetAssoc;
// Assign the logo asset to a role.
$iconAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$iconAsset = new Google_Service_DisplayVideo_Asset();
$iconAsset->setMediaId( logo-asset-media-id
);
$iconAssetAssoc->setAsset($iconAsset);
$iconAssetAssoc->setRole('ASSET_ROLE_ICON');
$assetAssociations[] = $iconAssetAssoc;
// Create and assign advertiser name asset.
$advNameAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$advNameAsset = new Google_Service_DisplayVideo_Asset();
$advNameAsset->setContent( advertiser-name
);
$advNameAssetAssoc->setAsset($advNameAsset);
$advNameAssetAssoc->setRole('ASSET_ROLE_ADVERTISER_NAME');
$assetAssociations[] = $advNameAssetAssoc;
// Create and assign headline asset.
$headlineAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$headlineAsset = new Google_Service_DisplayVideo_Asset();
$headlineAsset->setContent( headline
);
$headlineAssetAssoc->setAsset($headlineAsset);
$headlineAssetAssoc->setRole('ASSET_ROLE_HEADLINE');
$assetAssociations[] = $headlineAssetAssoc;
// Create and assign body text asset.
$bodyTextAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$bodyTextAsset = new Google_Service_DisplayVideo_Asset();
$bodyTextAsset->setContent( body-text
);
$bodyTextAssetAssoc->setAsset($bodyTextAsset);
$bodyTextAssetAssoc->setRole('ASSET_ROLE_BODY');
$assetAssociations[] = $bodyTextAssetAssoc;
// Create and assign caption URL asset.
$captionUrlAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$captionUrlAsset = new Google_Service_DisplayVideo_Asset();
$captionUrlAsset->setContent( caption-url
);
$captionUrlAssetAssoc->setAsset($captionUrlAsset);
$captionUrlAssetAssoc->setRole('ASSET_ROLE_CAPTION_URL');
$assetAssociations[] = $captionUrlAssetAssoc;
// Create and assign call to action asset.
$cToAAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$cToAAsset = new Google_Service_DisplayVideo_Asset();
$cToAAsset->setContent( call-to-action
);
$cToAAssetAssoc->setAsset($cToAAsset);
$cToAAssetAssoc->setRole('ASSET_ROLE_CALL_TO_ACTION');
$assetAssociations[] = $cToAAssetAssoc;
// Set the list of creative assets.
$creative->setAssets($assetAssociations);
// Create an exit event.
$exitEvent = new Google_Service_DisplayVideo_ExitEvent();
$exitEvent->setType('EXIT_EVENT_TYPE_DEFAULT');
$exitEvent->setUrl( landing-page-url
);
// Create and set the list of exit events for the creative.
$creative->setExitEvents(array($exitEvent));
// Send the create request.
$result = $this->service->advertisers_creatives->create(
advertiser-id
,
$creative
);
printf('Creative %s was created.', $result['name']);
HTML5
Java
// Create a creative object.
Creative
creative
=
new
Creative
();
creative
.
setDisplayName
(
display
-
name
);
creative
.
setEntityStatus
(
"ENTITY_STATUS_ACTIVE"
);
creative
.
setHostingSource
(
"HOSTING_SOURCE_HOSTED"
);
// Set standard creative type.
creative
.
setCreativeType
(
"CREATIVE_TYPE_STANDARD"
);
// Create a dimensions object.
Dimensions
dimensions
=
new
Dimensions
();
dimensions
.
setHeightPixels
(
creative
-
height
-
pixels
);
dimensions
.
setWidthPixels
(
creative
-
width
-
pixels
);
// Add the dimensions object to the creative object.
creative
.
setDimensions
(
dimensions
);
// Assign the HTML5 asset to a role.
AssetAssociation
assetAssociation
=
new
AssetAssociation
();
assetAssociation
.
setAsset
(
new
Asset
().
setMediaId
(
html5
-
asset
-
media
-
id
));
assetAssociation
.
setRole
(
"ASSET_ROLE_MAIN"
);
// Create and set the list of creative assets.
creative
.
setAssets
(
ImmutableList
.
of
(
assetAssociation
));
// Create an exit event.
ExitEvent
exitEvent
=
new
ExitEvent
();
exitEvent
.
setName
(
exit
-
event
-
name
);
exitEvent
.
setType
(
"EXIT_EVENT_TYPE_DEFAULT"
);
exitEvent
.
setUrl
(
exit
-
event
-
url
);
// Create and set the list of exit events for the creative.
creative
.
setExitEvents
(
ImmutableList
.
of
(
exitEvent
));
// Configure the create request.
Creatives
.
Create
request
=
service
.
advertisers
().
creatives
().
create
(
advertiser
-
id
,
creative
);
// Send the request.
Creative
response
=
request
.
execute
();
// Display the new creative.
System
.
out
.
printf
(
"Creative %s was created.\n"
,
response
.
getName
());
Python
# Create a creative object.
creative_obj
=
{
'displayName'
:
display
-
name
,
'entityStatus'
:
'ENTITY_STATUS_ACTIVE'
,
'hostingSource'
:
'HOSTING_SOURCE_HOSTED'
,
'creativeType'
:
'CREATIVE_TYPE_STANDARD'
,
'dimensions'
:
{
'heightPixels'
:
creative
-
height
-
pixels
,
'widthPixels'
:
creative
-
width
-
pixels
},
'assets'
:
[
{
'asset'
:
{
'mediaId'
:
html5
-
asset
-
media
-
id
},
'role'
:
'ASSET_ROLE_MAIN'
}
],
'exitEvents'
:
[
{
'name'
:
exit
-
event
-
name
,
'type'
:
'EXIT_EVENT_TYPE_DEFAULT'
,
'url'
:
exit
-
event
-
url
}
]
}
# Create the creative.
creative
=
service
.
advertisers
()
.
creatives
()
.
create
(
advertiserId
=
advertiser
-
id
,
body
=
creative_obj
)
.
execute
()
# Display the new creative.
print
(
"Creative
%s
was created."
%
creative
[
"name"
])
PHP
// Create a creative object.
$creative = new Google_Service_DisplayVideo_Creative();
$creative->setDisplayName( display-name
);
$creative->setEntityStatus('ENTITY_STATUS_ACTIVE');
$creative->setHostingSource('HOSTING_SOURCE_HOSTED');
// Set standard creative type.
$creative->setCreativeType('CREATIVE_TYPE_STANDARD');
// Create a dimensions object.
$dimensions = new Google_Service_DisplayVideo_Dimensions();
$dimensions->setHeightPixels( creative-height-pixels
);
$dimensions->setWidthPixels( creative-width-pixels
);
// Add the dimensions object to the creative object.
$creative->setDimensions($dimensions);
// Assign the HTML asset to a role.
$htmlAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$htmlAsset = new Google_Service_DisplayVideo_Asset();
$htmlAsset->setMediaId( html5-asset-media-id
);
$htmlAssetAssoc->setAsset($htmlAsset);
$htmlAssetAssoc->setRole('ASSET_ROLE_MAIN');
// Create and set the list of creative assets.
$creative->setAssets(array($htmlAssetAssoc));
// Create an exit event.
$exitEvent = new Google_Service_DisplayVideo_ExitEvent();
$exitEvent->setName( exit-event-name
);
$exitEvent->setType('EXIT_EVENT_TYPE_DEFAULT');
$exitEvent->setUrl( exit-event-url
);
// Create and set the list of exit events for the creative.
$creative->setExitEvents(array($exitEvent));
// Send the create request.
$result = $this->service->advertisers_creatives->create(
advertiser-id
,
$creative
);
printf('Creative %s was created.', $result['name']);
Video
Java
// Create a creative object.
Creative
creative
=
new
Creative
();
creative
.
setDisplayName
(
display
-
name
);
creative
.
setEntityStatus
(
"ENTITY_STATUS_ACTIVE"
);
creative
.
setHostingSource
(
"HOSTING_SOURCE_HOSTED"
);
// Set video creative type.
creative
.
setCreativeType
(
"CREATIVE_TYPE_VIDEO"
);
// Assign the video asset to a role.
AssetAssociation
assetAssociation
=
new
AssetAssociation
();
assetAssociation
.
setAsset
(
new
Asset
().
setMediaId
(
video
-
asset
-
media
-
id
)
); assetAssociation
.
setRole
(
"ASSET_ROLE_MAIN"
);
// Create and set the list of creative assets.
creative
.
setAssets
(
ImmutableList
.
of
(
assetAssociation
));
// Create an exit event.
ExitEvent
exitEvent
=
new
ExitEvent
();
exitEvent
.
setName
(
exit
-
event
-
name
);
exitEvent
.
setType
(
"EXIT_EVENT_TYPE_DEFAULT"
);
exitEvent
.
setUrl
(
exit
-
event
-
url
);
// Create and set the list of exit events for the creative.
creative
.
setExitEvents
(
ImmutableList
.
of
(
exitEvent
));
// Configure the create request.
Creatives
.
Create
request
=
service
.
advertisers
().
creatives
().
create
(
advertiser
-
id
,
creative
);
// Send the request.
Creative
response
=
request
.
execute
();
// Display the new creative.
System
.
out
.
printf
(
"Creative %s was created.\n"
,
response
.
getName
());
Python
# Create a creative object.
creative_obj
=
{
'displayName'
:
display
-
name
,
'entityStatus'
:
'ENTITY_STATUS_ACTIVE'
,
'hostingSource'
:
'HOSTING_SOURCE_HOSTED'
,
'creativeType'
:
'CREATIVE_TYPE_VIDEO'
,
'assets'
:
[
{
'asset'
:
{
'mediaId'
:
video
-
asset
-
media
-
id
},
'role'
:
'ASSET_ROLE_MAIN'
}
],
'exitEvents'
:
[
{
'name'
:
exit
-
event
-
name
,
'type'
:
'EXIT_EVENT_TYPE_DEFAULT'
,
'url'
:
exit
-
event
-
url
}
]
}
# Create the creative.
creative
=
service
.
advertisers
()
.
creatives
()
.
create
(
advertiserId
=
advertiser
-
id
,
body
=
creative_obj
)
.
execute
()
# Display the new creative.
print
(
"creative
%s
was created."
%
creative
[
"name"
])
PHP
// Create a creative object.
$creative = new Google_Service_DisplayVideo_Creative();
$creative->setDisplayName( display-name
);
$creative->setEntityStatus('ENTITY_STATUS_ACTIVE');
$creative->setHostingSource('HOSTING_SOURCE_HOSTED');
// Set video creative type.
$creative->setCreativeType('CREATIVE_TYPE_VIDEO');
// Assign the video asset to a role.
$videoAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$videoAsset = new Google_Service_DisplayVideo_Asset();
$videoAsset->setMediaId( video-asset-media-id
);
$videoAssetAssoc->setAsset($videoAsset);
$videoAssetAssoc->setRole('ASSET_ROLE_MAIN');
// Create and set the list of creative assets.
$creative->setAssets(array($videoAssetAssoc));
// Create an exit event.
$exitEvent = new Google_Service_DisplayVideo_ExitEvent();
$exitEvent->setName( exit-event-name
);
$exitEvent->setType('EXIT_EVENT_TYPE_DEFAULT');
$exitEvent->setUrl( exit-event-url
);
// Create and set the list of exit events for the creative.
$creative->setExitEvents(array($exitEvent));
// Send the create request.
$result = $this->service->advertisers_creatives->create(
advertiser-id
,
$creative
);
printf('Creative %s was created.', $result['name']);