<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="displayvideo_v1.html">Display & Video 360 API</a> . <a href="displayvideo_v1.advertisers.html">advertisers</a> . <a href="displayvideo_v1.advertisers.creatives.html">creatives</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(advertiserId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new creative. Returns the newly created creative if successful.</p>
<p class="toc_element">
  <code><a href="#delete">delete(advertiserId, creativeId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a creative. Returns error code `NOT_FOUND` if the creative does not exist. The creative should be archived first, i.e. set entity_status to `ENTITY_STATUS_ARCHIVED`, before it can be deleted.</p>
<p class="toc_element">
  <code><a href="#get">get(advertiserId, creativeId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a creative.</p>
<p class="toc_element">
  <code><a href="#list">list(advertiserId, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists creatives in an advertiser. The order is defined by the order_by parameter. If a filter by entity_status is not specified, creatives with `ENTITY_STATUS_ARCHIVED` will not be included in the results.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(advertiserId, creativeId, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing creative. Returns the updated creative if successful.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(advertiserId, body=None, x__xgafv=None)</code>
  <pre>Creates a new creative. Returns the newly created creative if successful.

Args:
  advertiserId: string, Output only. The unique ID of the advertiser the creative belongs to. (required)
  body: object, The request body.
    The object takes the form of:

{ # A single Creative.
  &quot;additionalDimensions&quot;: [ # Additional dimensions. Applicable when creative_type is one of: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If this field is specified, width_pixels and height_pixels are both required and must be greater than or equal to 0.
    { # Dimensions.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
  ],
  &quot;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  &quot;assets&quot;: [ # Required. Assets associated to this creative. Assets can be associated to the creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
    { # Asset association for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &quot;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        &quot;mediaId&quot;: &quot;A String&quot;, # Media ID of the uploaded asset. This is a unique identifier for the asset. This ID can be passed to other API calls, e.g. CreateCreative to associate the asset with a creative.
      },
      &quot;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
    },
  ],
  &quot;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager 360 placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &quot;cmTrackingAd&quot;: { # A Campaign Manager 360 tracking ad. # The Campaign Manager 360 tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 360 and third-party ad serving: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` Output only for other cases.
    &quot;cmAdId&quot;: &quot;A String&quot;, # The ad ID of the campaign manager 360 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager 360 tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager 360 tracking Ad.
  },
  &quot;companionCreativeIds&quot;: [ # The IDs of companion creatives for a video creative. You can assign existing display creatives (with image or HTML5 assets) to serve surrounding the publisher&#x27;s video player. Companions display around the video player while the video is playing and remain after the video has completed. Creatives contain additional dimensions can not be companion creatives. This field is only supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;counterEvents&quot;: [ # Counter events for a rich media creative. Counters track the number of times that a user interacts with any part of a rich media creative in a specified way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries, etc.). Any event that can be captured in the creative can be recorded as a counter. Leave it empty or unset for creatives containing image assets only.
    { # Counter event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &quot;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &quot;dimensions&quot;: { # Dimensions. # Required. Primary dimensions of the creative. Applicable to all creative types. The value of width_pixels and height_pixels defaults to `0` when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_INTERSTITIAL` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_VIDEO`
    &quot;heightPixels&quot;: 42, # The height in pixels.
    &quot;widthPixels&quot;: 42, # The width in pixels.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the creative. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &quot;entityStatus&quot;: &quot;A String&quot;, # Required. Controls whether or not the creative can serve. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
  &quot;exitEvents&quot;: [ # Required. Exit events for this creative. An exit (also known as a click tag) is any area in your creative that someone can click or tap to open an advertiser&#x27;s landing page. Every creative must include at least one exit. You can add an exit to your creative in any of the following ways: * Use Google Web Designer&#x27;s tap area. * Define a JavaScript variable called &quot;clickTag&quot;. * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
    { # Exit event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # The name of the click tag of the exit event. The name must be unique within one creative. Leave it empty or unset for creatives containing image assets only.
      &quot;reportingName&quot;: &quot;A String&quot;, # The name used to identify this event in reports. Leave it empty or unset for creatives containing image assets only.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &quot;url&quot;: &quot;A String&quot;, # Required. The click through URL of the exit event. This is required when type is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
    },
  ],
  &quot;expandOnHover&quot;: True or False, # Optional. Indicates the creative will automatically expand on hover. Optional and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;expandingDirection&quot;: &quot;A String&quot;, # Optional. Specifies the expanding direction of the creative. Required and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &quot;html5Video&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires HTML5 Video support. Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;iasCampaignMonitoring&quot;: True or False, # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To enable this for the creative, make sure the Advertiser.creative_config.ias_client_id has been set to your IAS client ID.
  &quot;integrationCode&quot;: &quot;A String&quot;, # ID information used to link this creative to an external system. Must be UTF-8 encoded with a length of no more than 10,000 characters.
  &quot;jsTrackerUrl&quot;: &quot;A String&quot;, # JavaScript measurement URL from supported third-party verification providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
  &quot;lineItemIds&quot;: [ # Output only. The IDs of the line items this creative is associated with. To associate a creative to a line item, use LineItem.creative_ids instead.
    &quot;A String&quot;,
  ],
  &quot;mediaDuration&quot;: &quot;A String&quot;, # Output only. Media duration of the creative. Applicable when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
  &quot;mp3Audio&quot;: True or False, # Output only. Indicates the third-party audio creative supports MP3. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &quot;notes&quot;: &quot;A String&quot;, # User notes for this creative. Must be UTF-8 encoded with a length of no more than 20,000 characters.
  &quot;obaIcon&quot;: { # OBA Icon for a Creative # Specifies the OBA icon for a video creative. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # Required. The click tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;dimensions&quot;: { # Dimensions. # The dimensions of the OBA icon.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
    &quot;landingPageUrl&quot;: &quot;A String&quot;, # Required. The landing page URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &quot;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;viewTrackingUrl&quot;: &quot;A String&quot;, # Required. The view tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
  },
  &quot;oggAudio&quot;: True or False, # Output only. Indicates the third-party audio creative supports OGG. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;progressOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before counting a view. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;requireHtml5&quot;: True or False, # Optional. Indicates that the creative relies on HTML5 to render properly. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requireMraid&quot;: True or False, # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad Interface Definitions system). Set this if the creative relies on mobile gestures for interactivity, such as swiping or tapping. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requirePingForAttribution&quot;: True or False, # Optional. Indicates that the creative will wait for a return ping for attribution. Only valid when using a Campaign Manager 360 tracking ad with a third-party ad server parameter and the ${DC_DBM_TOKEN} macro. Optional and only valid for third-party tag creatives or third-party VAST tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;approvalStatus&quot;: &quot;A String&quot;, # Represents the basic approval needed for a creative to begin serving. Summary of creative_and_landing_page_review_status and content_and_policy_review_status.
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    &quot;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
      },
    ],
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
      },
    ],
  },
  &quot;skipOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before the skip button appears. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;skippable&quot;: True or False, # Whether the user can choose to skip a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;thirdPartyTag&quot;: &quot;A String&quot;, # Optional. The original third-party tag used for the creative. Required and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;thirdPartyUrls&quot;: [ # Tracking URLs from third parties to track interactions with a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
    { # Tracking URLs from third parties to track interactions with an audio or a video creative.
      &quot;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      &quot;url&quot;: &quot;A String&quot;, # Tracking URL used to track the interaction. Provide a URL with optional path or query string, beginning with `https:`. For example, https://www.example.com/path
    },
  ],
  &quot;timerEvents&quot;: [ # Timer custom events for a rich media creative. Timers track the time during which a user views and interacts with a specified part of a rich media creative. A creative can have multiple timer events, each timed independently. Leave it empty or unset for creatives containing image assets only.
    { # Timer event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the timer event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this timer event in reports.
    },
  ],
  &quot;trackerUrls&quot;: [ # Tracking URLs for analytics providers or third-party ad technology vendors. The URLs must start with https (except on inventory that doesn&#x27;t require SSL compliance). If using macros in your URL, use only macros supported by Display &amp; Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;transcodes&quot;: [ # Output only. Audio/Video transcodes. Display &amp; Video 360 transcodes the main asset into a number of alternative versions that use different file formats or have different properties (resolution, audio bit rate, and video bit rate), each designed for specific video players or bandwidths. These transcodes give a publisher&#x27;s system more options to choose from for each impression on your video and ensures that the appropriate file serves based on the viewer’s connection and screen size. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_AUDIO`
    { # Represents information about the transcoded audio or video file.
      &quot;audioBitRateKbps&quot;: &quot;A String&quot;, # The bit rate for the audio stream of the transcoded video, or the bit rate for the transcoded audio, in kilobits per second.
      &quot;audioSampleRateHz&quot;: &quot;A String&quot;, # The sample rate for the audio stream of the transcoded video, or the sample rate for the transcoded audio, in hertz.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      &quot;dimensions&quot;: { # Dimensions. # The dimensions of the transcoded video.
        &quot;heightPixels&quot;: 42, # The height in pixels.
        &quot;widthPixels&quot;: 42, # The width in pixels.
      },
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
    },
  ],
  &quot;universalAdId&quot;: { # A creative identifier provided by a registry that is unique across all platforms. This is part of the VAST 4.0 standard. # Optional. An optional creative identifier provided by a registry that is unique across all platforms. Universal Ad ID is part of the VAST 4.0 standard. It can be modified after the creative is created. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    &quot;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &quot;vastTagUrl&quot;: &quot;A String&quot;, # Optional. The URL of the VAST tag for a third-party VAST tag creative. Required and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;vpaid&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires VPAID (Digital Video Player-Ad Interface). Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single Creative.
  &quot;additionalDimensions&quot;: [ # Additional dimensions. Applicable when creative_type is one of: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If this field is specified, width_pixels and height_pixels are both required and must be greater than or equal to 0.
    { # Dimensions.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
  ],
  &quot;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  &quot;assets&quot;: [ # Required. Assets associated to this creative. Assets can be associated to the creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
    { # Asset association for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &quot;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        &quot;mediaId&quot;: &quot;A String&quot;, # Media ID of the uploaded asset. This is a unique identifier for the asset. This ID can be passed to other API calls, e.g. CreateCreative to associate the asset with a creative.
      },
      &quot;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
    },
  ],
  &quot;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager 360 placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &quot;cmTrackingAd&quot;: { # A Campaign Manager 360 tracking ad. # The Campaign Manager 360 tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 360 and third-party ad serving: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` Output only for other cases.
    &quot;cmAdId&quot;: &quot;A String&quot;, # The ad ID of the campaign manager 360 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager 360 tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager 360 tracking Ad.
  },
  &quot;companionCreativeIds&quot;: [ # The IDs of companion creatives for a video creative. You can assign existing display creatives (with image or HTML5 assets) to serve surrounding the publisher&#x27;s video player. Companions display around the video player while the video is playing and remain after the video has completed. Creatives contain additional dimensions can not be companion creatives. This field is only supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;counterEvents&quot;: [ # Counter events for a rich media creative. Counters track the number of times that a user interacts with any part of a rich media creative in a specified way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries, etc.). Any event that can be captured in the creative can be recorded as a counter. Leave it empty or unset for creatives containing image assets only.
    { # Counter event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &quot;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &quot;dimensions&quot;: { # Dimensions. # Required. Primary dimensions of the creative. Applicable to all creative types. The value of width_pixels and height_pixels defaults to `0` when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_INTERSTITIAL` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_VIDEO`
    &quot;heightPixels&quot;: 42, # The height in pixels.
    &quot;widthPixels&quot;: 42, # The width in pixels.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the creative. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &quot;entityStatus&quot;: &quot;A String&quot;, # Required. Controls whether or not the creative can serve. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
  &quot;exitEvents&quot;: [ # Required. Exit events for this creative. An exit (also known as a click tag) is any area in your creative that someone can click or tap to open an advertiser&#x27;s landing page. Every creative must include at least one exit. You can add an exit to your creative in any of the following ways: * Use Google Web Designer&#x27;s tap area. * Define a JavaScript variable called &quot;clickTag&quot;. * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
    { # Exit event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # The name of the click tag of the exit event. The name must be unique within one creative. Leave it empty or unset for creatives containing image assets only.
      &quot;reportingName&quot;: &quot;A String&quot;, # The name used to identify this event in reports. Leave it empty or unset for creatives containing image assets only.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &quot;url&quot;: &quot;A String&quot;, # Required. The click through URL of the exit event. This is required when type is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
    },
  ],
  &quot;expandOnHover&quot;: True or False, # Optional. Indicates the creative will automatically expand on hover. Optional and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;expandingDirection&quot;: &quot;A String&quot;, # Optional. Specifies the expanding direction of the creative. Required and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &quot;html5Video&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires HTML5 Video support. Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;iasCampaignMonitoring&quot;: True or False, # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To enable this for the creative, make sure the Advertiser.creative_config.ias_client_id has been set to your IAS client ID.
  &quot;integrationCode&quot;: &quot;A String&quot;, # ID information used to link this creative to an external system. Must be UTF-8 encoded with a length of no more than 10,000 characters.
  &quot;jsTrackerUrl&quot;: &quot;A String&quot;, # JavaScript measurement URL from supported third-party verification providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
  &quot;lineItemIds&quot;: [ # Output only. The IDs of the line items this creative is associated with. To associate a creative to a line item, use LineItem.creative_ids instead.
    &quot;A String&quot;,
  ],
  &quot;mediaDuration&quot;: &quot;A String&quot;, # Output only. Media duration of the creative. Applicable when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
  &quot;mp3Audio&quot;: True or False, # Output only. Indicates the third-party audio creative supports MP3. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &quot;notes&quot;: &quot;A String&quot;, # User notes for this creative. Must be UTF-8 encoded with a length of no more than 20,000 characters.
  &quot;obaIcon&quot;: { # OBA Icon for a Creative # Specifies the OBA icon for a video creative. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # Required. The click tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;dimensions&quot;: { # Dimensions. # The dimensions of the OBA icon.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
    &quot;landingPageUrl&quot;: &quot;A String&quot;, # Required. The landing page URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &quot;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;viewTrackingUrl&quot;: &quot;A String&quot;, # Required. The view tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
  },
  &quot;oggAudio&quot;: True or False, # Output only. Indicates the third-party audio creative supports OGG. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;progressOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before counting a view. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;requireHtml5&quot;: True or False, # Optional. Indicates that the creative relies on HTML5 to render properly. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requireMraid&quot;: True or False, # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad Interface Definitions system). Set this if the creative relies on mobile gestures for interactivity, such as swiping or tapping. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requirePingForAttribution&quot;: True or False, # Optional. Indicates that the creative will wait for a return ping for attribution. Only valid when using a Campaign Manager 360 tracking ad with a third-party ad server parameter and the ${DC_DBM_TOKEN} macro. Optional and only valid for third-party tag creatives or third-party VAST tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;approvalStatus&quot;: &quot;A String&quot;, # Represents the basic approval needed for a creative to begin serving. Summary of creative_and_landing_page_review_status and content_and_policy_review_status.
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    &quot;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
      },
    ],
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
      },
    ],
  },
  &quot;skipOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before the skip button appears. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;skippable&quot;: True or False, # Whether the user can choose to skip a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;thirdPartyTag&quot;: &quot;A String&quot;, # Optional. The original third-party tag used for the creative. Required and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;thirdPartyUrls&quot;: [ # Tracking URLs from third parties to track interactions with a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
    { # Tracking URLs from third parties to track interactions with an audio or a video creative.
      &quot;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      &quot;url&quot;: &quot;A String&quot;, # Tracking URL used to track the interaction. Provide a URL with optional path or query string, beginning with `https:`. For example, https://www.example.com/path
    },
  ],
  &quot;timerEvents&quot;: [ # Timer custom events for a rich media creative. Timers track the time during which a user views and interacts with a specified part of a rich media creative. A creative can have multiple timer events, each timed independently. Leave it empty or unset for creatives containing image assets only.
    { # Timer event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the timer event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this timer event in reports.
    },
  ],
  &quot;trackerUrls&quot;: [ # Tracking URLs for analytics providers or third-party ad technology vendors. The URLs must start with https (except on inventory that doesn&#x27;t require SSL compliance). If using macros in your URL, use only macros supported by Display &amp; Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;transcodes&quot;: [ # Output only. Audio/Video transcodes. Display &amp; Video 360 transcodes the main asset into a number of alternative versions that use different file formats or have different properties (resolution, audio bit rate, and video bit rate), each designed for specific video players or bandwidths. These transcodes give a publisher&#x27;s system more options to choose from for each impression on your video and ensures that the appropriate file serves based on the viewer’s connection and screen size. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_AUDIO`
    { # Represents information about the transcoded audio or video file.
      &quot;audioBitRateKbps&quot;: &quot;A String&quot;, # The bit rate for the audio stream of the transcoded video, or the bit rate for the transcoded audio, in kilobits per second.
      &quot;audioSampleRateHz&quot;: &quot;A String&quot;, # The sample rate for the audio stream of the transcoded video, or the sample rate for the transcoded audio, in hertz.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      &quot;dimensions&quot;: { # Dimensions. # The dimensions of the transcoded video.
        &quot;heightPixels&quot;: 42, # The height in pixels.
        &quot;widthPixels&quot;: 42, # The width in pixels.
      },
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
    },
  ],
  &quot;universalAdId&quot;: { # A creative identifier provided by a registry that is unique across all platforms. This is part of the VAST 4.0 standard. # Optional. An optional creative identifier provided by a registry that is unique across all platforms. Universal Ad ID is part of the VAST 4.0 standard. It can be modified after the creative is created. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    &quot;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &quot;vastTagUrl&quot;: &quot;A String&quot;, # Optional. The URL of the VAST tag for a third-party VAST tag creative. Required and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;vpaid&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires VPAID (Digital Video Player-Ad Interface). Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(advertiserId, creativeId, x__xgafv=None)</code>
  <pre>Deletes a creative. Returns error code `NOT_FOUND` if the creative does not exist. The creative should be archived first, i.e. set entity_status to `ENTITY_STATUS_ARCHIVED`, before it can be deleted.

Args:
  advertiserId: string, The ID of the advertiser this creative belongs to. (required)
  creativeId: string, The ID of the creative to be deleted. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(advertiserId, creativeId, x__xgafv=None)</code>
  <pre>Gets a creative.

Args:
  advertiserId: string, Required. The ID of the advertiser this creative belongs to. (required)
  creativeId: string, Required. The ID of the creative to fetch. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single Creative.
  &quot;additionalDimensions&quot;: [ # Additional dimensions. Applicable when creative_type is one of: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If this field is specified, width_pixels and height_pixels are both required and must be greater than or equal to 0.
    { # Dimensions.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
  ],
  &quot;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  &quot;assets&quot;: [ # Required. Assets associated to this creative. Assets can be associated to the creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
    { # Asset association for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &quot;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        &quot;mediaId&quot;: &quot;A String&quot;, # Media ID of the uploaded asset. This is a unique identifier for the asset. This ID can be passed to other API calls, e.g. CreateCreative to associate the asset with a creative.
      },
      &quot;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
    },
  ],
  &quot;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager 360 placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &quot;cmTrackingAd&quot;: { # A Campaign Manager 360 tracking ad. # The Campaign Manager 360 tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 360 and third-party ad serving: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` Output only for other cases.
    &quot;cmAdId&quot;: &quot;A String&quot;, # The ad ID of the campaign manager 360 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager 360 tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager 360 tracking Ad.
  },
  &quot;companionCreativeIds&quot;: [ # The IDs of companion creatives for a video creative. You can assign existing display creatives (with image or HTML5 assets) to serve surrounding the publisher&#x27;s video player. Companions display around the video player while the video is playing and remain after the video has completed. Creatives contain additional dimensions can not be companion creatives. This field is only supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;counterEvents&quot;: [ # Counter events for a rich media creative. Counters track the number of times that a user interacts with any part of a rich media creative in a specified way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries, etc.). Any event that can be captured in the creative can be recorded as a counter. Leave it empty or unset for creatives containing image assets only.
    { # Counter event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &quot;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &quot;dimensions&quot;: { # Dimensions. # Required. Primary dimensions of the creative. Applicable to all creative types. The value of width_pixels and height_pixels defaults to `0` when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_INTERSTITIAL` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_VIDEO`
    &quot;heightPixels&quot;: 42, # The height in pixels.
    &quot;widthPixels&quot;: 42, # The width in pixels.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the creative. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &quot;entityStatus&quot;: &quot;A String&quot;, # Required. Controls whether or not the creative can serve. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
  &quot;exitEvents&quot;: [ # Required. Exit events for this creative. An exit (also known as a click tag) is any area in your creative that someone can click or tap to open an advertiser&#x27;s landing page. Every creative must include at least one exit. You can add an exit to your creative in any of the following ways: * Use Google Web Designer&#x27;s tap area. * Define a JavaScript variable called &quot;clickTag&quot;. * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
    { # Exit event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # The name of the click tag of the exit event. The name must be unique within one creative. Leave it empty or unset for creatives containing image assets only.
      &quot;reportingName&quot;: &quot;A String&quot;, # The name used to identify this event in reports. Leave it empty or unset for creatives containing image assets only.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &quot;url&quot;: &quot;A String&quot;, # Required. The click through URL of the exit event. This is required when type is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
    },
  ],
  &quot;expandOnHover&quot;: True or False, # Optional. Indicates the creative will automatically expand on hover. Optional and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;expandingDirection&quot;: &quot;A String&quot;, # Optional. Specifies the expanding direction of the creative. Required and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &quot;html5Video&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires HTML5 Video support. Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;iasCampaignMonitoring&quot;: True or False, # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To enable this for the creative, make sure the Advertiser.creative_config.ias_client_id has been set to your IAS client ID.
  &quot;integrationCode&quot;: &quot;A String&quot;, # ID information used to link this creative to an external system. Must be UTF-8 encoded with a length of no more than 10,000 characters.
  &quot;jsTrackerUrl&quot;: &quot;A String&quot;, # JavaScript measurement URL from supported third-party verification providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
  &quot;lineItemIds&quot;: [ # Output only. The IDs of the line items this creative is associated with. To associate a creative to a line item, use LineItem.creative_ids instead.
    &quot;A String&quot;,
  ],
  &quot;mediaDuration&quot;: &quot;A String&quot;, # Output only. Media duration of the creative. Applicable when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
  &quot;mp3Audio&quot;: True or False, # Output only. Indicates the third-party audio creative supports MP3. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &quot;notes&quot;: &quot;A String&quot;, # User notes for this creative. Must be UTF-8 encoded with a length of no more than 20,000 characters.
  &quot;obaIcon&quot;: { # OBA Icon for a Creative # Specifies the OBA icon for a video creative. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # Required. The click tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;dimensions&quot;: { # Dimensions. # The dimensions of the OBA icon.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
    &quot;landingPageUrl&quot;: &quot;A String&quot;, # Required. The landing page URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &quot;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;viewTrackingUrl&quot;: &quot;A String&quot;, # Required. The view tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
  },
  &quot;oggAudio&quot;: True or False, # Output only. Indicates the third-party audio creative supports OGG. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;progressOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before counting a view. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;requireHtml5&quot;: True or False, # Optional. Indicates that the creative relies on HTML5 to render properly. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requireMraid&quot;: True or False, # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad Interface Definitions system). Set this if the creative relies on mobile gestures for interactivity, such as swiping or tapping. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requirePingForAttribution&quot;: True or False, # Optional. Indicates that the creative will wait for a return ping for attribution. Only valid when using a Campaign Manager 360 tracking ad with a third-party ad server parameter and the ${DC_DBM_TOKEN} macro. Optional and only valid for third-party tag creatives or third-party VAST tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;approvalStatus&quot;: &quot;A String&quot;, # Represents the basic approval needed for a creative to begin serving. Summary of creative_and_landing_page_review_status and content_and_policy_review_status.
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    &quot;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
      },
    ],
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
      },
    ],
  },
  &quot;skipOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before the skip button appears. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;skippable&quot;: True or False, # Whether the user can choose to skip a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;thirdPartyTag&quot;: &quot;A String&quot;, # Optional. The original third-party tag used for the creative. Required and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;thirdPartyUrls&quot;: [ # Tracking URLs from third parties to track interactions with a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
    { # Tracking URLs from third parties to track interactions with an audio or a video creative.
      &quot;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      &quot;url&quot;: &quot;A String&quot;, # Tracking URL used to track the interaction. Provide a URL with optional path or query string, beginning with `https:`. For example, https://www.example.com/path
    },
  ],
  &quot;timerEvents&quot;: [ # Timer custom events for a rich media creative. Timers track the time during which a user views and interacts with a specified part of a rich media creative. A creative can have multiple timer events, each timed independently. Leave it empty or unset for creatives containing image assets only.
    { # Timer event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the timer event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this timer event in reports.
    },
  ],
  &quot;trackerUrls&quot;: [ # Tracking URLs for analytics providers or third-party ad technology vendors. The URLs must start with https (except on inventory that doesn&#x27;t require SSL compliance). If using macros in your URL, use only macros supported by Display &amp; Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;transcodes&quot;: [ # Output only. Audio/Video transcodes. Display &amp; Video 360 transcodes the main asset into a number of alternative versions that use different file formats or have different properties (resolution, audio bit rate, and video bit rate), each designed for specific video players or bandwidths. These transcodes give a publisher&#x27;s system more options to choose from for each impression on your video and ensures that the appropriate file serves based on the viewer’s connection and screen size. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_AUDIO`
    { # Represents information about the transcoded audio or video file.
      &quot;audioBitRateKbps&quot;: &quot;A String&quot;, # The bit rate for the audio stream of the transcoded video, or the bit rate for the transcoded audio, in kilobits per second.
      &quot;audioSampleRateHz&quot;: &quot;A String&quot;, # The sample rate for the audio stream of the transcoded video, or the sample rate for the transcoded audio, in hertz.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      &quot;dimensions&quot;: { # Dimensions. # The dimensions of the transcoded video.
        &quot;heightPixels&quot;: 42, # The height in pixels.
        &quot;widthPixels&quot;: 42, # The width in pixels.
      },
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
    },
  ],
  &quot;universalAdId&quot;: { # A creative identifier provided by a registry that is unique across all platforms. This is part of the VAST 4.0 standard. # Optional. An optional creative identifier provided by a registry that is unique across all platforms. Universal Ad ID is part of the VAST 4.0 standard. It can be modified after the creative is created. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    &quot;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &quot;vastTagUrl&quot;: &quot;A String&quot;, # Optional. The URL of the VAST tag for a third-party VAST tag creative. Required and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;vpaid&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires VPAID (Digital Video Player-Ad Interface). Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(advertiserId, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists creatives in an advertiser. The order is defined by the order_by parameter. If a filter by entity_status is not specified, creatives with `ENTITY_STATUS_ARCHIVED` will not be included in the results.

Args:
  advertiserId: string, Required. The ID of the advertiser to list creatives for. (required)
  filter: string, Allows filtering by creative properties. Supported syntax: * Filter expressions are made up of one or more restrictions. * Restriction for the same field must be combined by `OR`. * Restriction for different fields must be combined by `AND`. * Between `(` and `)` there can only be restrictions combined by `OR` for the same field. * A restriction has the form of `{field} {operator} {value}`. * The operator must be `EQUALS (=)` for the following fields: - `entityStatus` - `creativeType`. - `dimensions` - `minDuration` - `maxDuration` - `approvalStatus` - `exchangeReviewStatus` - `dynamic` - `creativeId` * The operator must be `HAS (:)` for the following fields: - `lineItemIds` * For `entityStatus`, `minDuration`, `maxDuration`, and `dynamic` there may be at most one restriction. * For `dimensions`, the value is in the form of `&quot;{width}x{height}&quot;`. * For `exchangeReviewStatus`, the value is in the form of `{exchange}-{reviewStatus}`. * For `minDuration` and `maxDuration`, the value is in the form of `&quot;{duration}s&quot;`. Only seconds are supported with millisecond granularity. * There may be multiple `lineItemIds` restrictions in order to search against multiple possible line item IDs. * There may be multiple `creativeId` restrictions in order to search against multiple possible creative IDs. Examples: * All native creatives: `creativeType=&quot;CREATIVE_TYPE_NATIVE&quot;` * All active creatives with 300x400 or 50x100 dimensions: `entityStatus=&quot;ENTITY_STATUS_ACTIVE&quot; AND (dimensions=&quot;300x400&quot; OR dimensions=&quot;50x100&quot;)` * All dynamic creatives that are approved by AdX or AppNexus, with a minimum duration of 5 seconds and 200ms. `dynamic=&quot;true&quot; AND minDuration=&quot;5.2s&quot; AND (exchangeReviewStatus=&quot;EXCHANGE_GOOGLE_AD_MANAGER-REVIEW_STATUS_APPROVED&quot; OR exchangeReviewStatus=&quot;EXCHANGE_APPNEXUS-REVIEW_STATUS_APPROVED&quot;)` * All video creatives that are associated with line item ID 1 or 2: `creativeType=&quot;CREATIVE_TYPE_VIDEO&quot; AND (lineItemIds:1 OR lineItemIds:2)` * Find creatives by multiple creative IDs: `creativeId=1 OR creativeId=2` The length of this field should be no more than 500 characters.
  orderBy: string, Field by which to sort the list. Acceptable values are: * `creativeId` (default) * `createTime` * `mediaDuration` * `dimensions` (sorts by width first, then by height) The default sorting order is ascending. To specify descending order for a field, a suffix &quot;desc&quot; should be added to the field name. Example: `createTime desc`.
  pageSize: integer, Requested page size. Must be between `1` and `100`. If unspecified will default to `100`. Returns error code `INVALID_ARGUMENT` if an invalid value is specified.
  pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of next_page_token returned from the previous call to `ListCreatives` method. If not specified, the first page of results will be returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;creatives&quot;: [ # The list of creatives. This list will be absent if empty.
    { # A single Creative.
      &quot;additionalDimensions&quot;: [ # Additional dimensions. Applicable when creative_type is one of: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If this field is specified, width_pixels and height_pixels are both required and must be greater than or equal to 0.
        { # Dimensions.
          &quot;heightPixels&quot;: 42, # The height in pixels.
          &quot;widthPixels&quot;: 42, # The width in pixels.
        },
      ],
      &quot;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
      &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
      &quot;assets&quot;: [ # Required. Assets associated to this creative. Assets can be associated to the creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
        { # Asset association for the creative.
          &quot;asset&quot;: { # A single asset. # The associated asset.
            &quot;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
            &quot;mediaId&quot;: &quot;A String&quot;, # Media ID of the uploaded asset. This is a unique identifier for the asset. This ID can be passed to other API calls, e.g. CreateCreative to associate the asset with a creative.
          },
          &quot;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
        },
      ],
      &quot;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager 360 placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
      &quot;cmTrackingAd&quot;: { # A Campaign Manager 360 tracking ad. # The Campaign Manager 360 tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 360 and third-party ad serving: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` Output only for other cases.
        &quot;cmAdId&quot;: &quot;A String&quot;, # The ad ID of the campaign manager 360 tracking Ad.
        &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager 360 tracking Ad.
        &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager 360 tracking Ad.
      },
      &quot;companionCreativeIds&quot;: [ # The IDs of companion creatives for a video creative. You can assign existing display creatives (with image or HTML5 assets) to serve surrounding the publisher&#x27;s video player. Companions display around the video player while the video is playing and remain after the video has completed. Creatives contain additional dimensions can not be companion creatives. This field is only supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
        &quot;A String&quot;,
      ],
      &quot;counterEvents&quot;: [ # Counter events for a rich media creative. Counters track the number of times that a user interacts with any part of a rich media creative in a specified way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries, etc.). Any event that can be captured in the creative can be recorded as a counter. Leave it empty or unset for creatives containing image assets only.
        { # Counter event of the creative.
          &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
          &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
        },
      ],
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
      &quot;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
        &quot;A String&quot;,
      ],
      &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
      &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
      &quot;dimensions&quot;: { # Dimensions. # Required. Primary dimensions of the creative. Applicable to all creative types. The value of width_pixels and height_pixels defaults to `0` when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_INTERSTITIAL` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_VIDEO`
        &quot;heightPixels&quot;: 42, # The height in pixels.
        &quot;widthPixels&quot;: 42, # The width in pixels.
      },
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the creative. Must be UTF-8 encoded with a maximum size of 240 bytes.
      &quot;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
      &quot;entityStatus&quot;: &quot;A String&quot;, # Required. Controls whether or not the creative can serve. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
      &quot;exitEvents&quot;: [ # Required. Exit events for this creative. An exit (also known as a click tag) is any area in your creative that someone can click or tap to open an advertiser&#x27;s landing page. Every creative must include at least one exit. You can add an exit to your creative in any of the following ways: * Use Google Web Designer&#x27;s tap area. * Define a JavaScript variable called &quot;clickTag&quot;. * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
        { # Exit event of the creative.
          &quot;name&quot;: &quot;A String&quot;, # The name of the click tag of the exit event. The name must be unique within one creative. Leave it empty or unset for creatives containing image assets only.
          &quot;reportingName&quot;: &quot;A String&quot;, # The name used to identify this event in reports. Leave it empty or unset for creatives containing image assets only.
          &quot;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
          &quot;url&quot;: &quot;A String&quot;, # Required. The click through URL of the exit event. This is required when type is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
        },
      ],
      &quot;expandOnHover&quot;: True or False, # Optional. Indicates the creative will automatically expand on hover. Optional and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
      &quot;expandingDirection&quot;: &quot;A String&quot;, # Optional. Specifies the expanding direction of the creative. Required and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
      &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
      &quot;html5Video&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires HTML5 Video support. Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
      &quot;iasCampaignMonitoring&quot;: True or False, # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To enable this for the creative, make sure the Advertiser.creative_config.ias_client_id has been set to your IAS client ID.
      &quot;integrationCode&quot;: &quot;A String&quot;, # ID information used to link this creative to an external system. Must be UTF-8 encoded with a length of no more than 10,000 characters.
      &quot;jsTrackerUrl&quot;: &quot;A String&quot;, # JavaScript measurement URL from supported third-party verification providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
      &quot;lineItemIds&quot;: [ # Output only. The IDs of the line items this creative is associated with. To associate a creative to a line item, use LineItem.creative_ids instead.
        &quot;A String&quot;,
      ],
      &quot;mediaDuration&quot;: &quot;A String&quot;, # Output only. Media duration of the creative. Applicable when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
      &quot;mp3Audio&quot;: True or False, # Output only. Indicates the third-party audio creative supports MP3. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
      &quot;notes&quot;: &quot;A String&quot;, # User notes for this creative. Must be UTF-8 encoded with a length of no more than 20,000 characters.
      &quot;obaIcon&quot;: { # OBA Icon for a Creative # Specifies the OBA icon for a video creative. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO`
        &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # Required. The click tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
        &quot;dimensions&quot;: { # Dimensions. # The dimensions of the OBA icon.
          &quot;heightPixels&quot;: 42, # The height in pixels.
          &quot;widthPixels&quot;: 42, # The width in pixels.
        },
        &quot;landingPageUrl&quot;: &quot;A String&quot;, # Required. The landing page URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
        &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
        &quot;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
        &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
        &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
        &quot;viewTrackingUrl&quot;: &quot;A String&quot;, # Required. The view tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
      },
      &quot;oggAudio&quot;: True or False, # Output only. Indicates the third-party audio creative supports OGG. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
      &quot;progressOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before counting a view. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
        &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
        &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      },
      &quot;requireHtml5&quot;: True or False, # Optional. Indicates that the creative relies on HTML5 to render properly. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
      &quot;requireMraid&quot;: True or False, # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad Interface Definitions system). Set this if the creative relies on mobile gestures for interactivity, such as swiping or tapping. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
      &quot;requirePingForAttribution&quot;: True or False, # Optional. Indicates that the creative will wait for a return ping for attribution. Only valid when using a Campaign Manager 360 tracking ad with a third-party ad server parameter and the ${DC_DBM_TOKEN} macro. Optional and only valid for third-party tag creatives or third-party VAST tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
      &quot;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
        &quot;approvalStatus&quot;: &quot;A String&quot;, # Represents the basic approval needed for a creative to begin serving. Summary of creative_and_landing_page_review_status and content_and_policy_review_status.
        &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
        &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
        &quot;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
          { # Exchange review status for the creative.
            &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
            &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
          },
        ],
        &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
          { # Publisher review status for the creative.
            &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
            &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
          },
        ],
      },
      &quot;skipOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before the skip button appears. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
        &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
        &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      },
      &quot;skippable&quot;: True or False, # Whether the user can choose to skip a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
      &quot;thirdPartyTag&quot;: &quot;A String&quot;, # Optional. The original third-party tag used for the creative. Required and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
      &quot;thirdPartyUrls&quot;: [ # Tracking URLs from third parties to track interactions with a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
        { # Tracking URLs from third parties to track interactions with an audio or a video creative.
          &quot;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
          &quot;url&quot;: &quot;A String&quot;, # Tracking URL used to track the interaction. Provide a URL with optional path or query string, beginning with `https:`. For example, https://www.example.com/path
        },
      ],
      &quot;timerEvents&quot;: [ # Timer custom events for a rich media creative. Timers track the time during which a user views and interacts with a specified part of a rich media creative. A creative can have multiple timer events, each timed independently. Leave it empty or unset for creatives containing image assets only.
        { # Timer event of the creative.
          &quot;name&quot;: &quot;A String&quot;, # Required. The name of the timer event.
          &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this timer event in reports.
        },
      ],
      &quot;trackerUrls&quot;: [ # Tracking URLs for analytics providers or third-party ad technology vendors. The URLs must start with https (except on inventory that doesn&#x27;t require SSL compliance). If using macros in your URL, use only macros supported by Display &amp; Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
        &quot;A String&quot;,
      ],
      &quot;transcodes&quot;: [ # Output only. Audio/Video transcodes. Display &amp; Video 360 transcodes the main asset into a number of alternative versions that use different file formats or have different properties (resolution, audio bit rate, and video bit rate), each designed for specific video players or bandwidths. These transcodes give a publisher&#x27;s system more options to choose from for each impression on your video and ensures that the appropriate file serves based on the viewer’s connection and screen size. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_AUDIO`
        { # Represents information about the transcoded audio or video file.
          &quot;audioBitRateKbps&quot;: &quot;A String&quot;, # The bit rate for the audio stream of the transcoded video, or the bit rate for the transcoded audio, in kilobits per second.
          &quot;audioSampleRateHz&quot;: &quot;A String&quot;, # The sample rate for the audio stream of the transcoded video, or the sample rate for the transcoded audio, in hertz.
          &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
          &quot;dimensions&quot;: { # Dimensions. # The dimensions of the transcoded video.
            &quot;heightPixels&quot;: 42, # The height in pixels.
            &quot;widthPixels&quot;: 42, # The width in pixels.
          },
          &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
          &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
          &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
          &quot;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
          &quot;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
        },
      ],
      &quot;universalAdId&quot;: { # A creative identifier provided by a registry that is unique across all platforms. This is part of the VAST 4.0 standard. # Optional. An optional creative identifier provided by a registry that is unique across all platforms. Universal Ad ID is part of the VAST 4.0 standard. It can be modified after the creative is created. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
        &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
        &quot;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
      },
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
      &quot;vastTagUrl&quot;: &quot;A String&quot;, # Optional. The URL of the VAST tag for a third-party VAST tag creative. Required and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
      &quot;vpaid&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires VPAID (Digital Video Player-Ad Interface). Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass this value in the page_token field in the subsequent call to `ListCreativesRequest` method to retrieve the next page of results. If this field is null, it means this is the last page.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(advertiserId, creativeId, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing creative. Returns the updated creative if successful.

Args:
  advertiserId: string, Output only. The unique ID of the advertiser the creative belongs to. (required)
  creativeId: string, Output only. The unique ID of the creative. Assigned by the system. (required)
  body: object, The request body.
    The object takes the form of:

{ # A single Creative.
  &quot;additionalDimensions&quot;: [ # Additional dimensions. Applicable when creative_type is one of: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If this field is specified, width_pixels and height_pixels are both required and must be greater than or equal to 0.
    { # Dimensions.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
  ],
  &quot;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  &quot;assets&quot;: [ # Required. Assets associated to this creative. Assets can be associated to the creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
    { # Asset association for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &quot;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        &quot;mediaId&quot;: &quot;A String&quot;, # Media ID of the uploaded asset. This is a unique identifier for the asset. This ID can be passed to other API calls, e.g. CreateCreative to associate the asset with a creative.
      },
      &quot;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
    },
  ],
  &quot;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager 360 placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &quot;cmTrackingAd&quot;: { # A Campaign Manager 360 tracking ad. # The Campaign Manager 360 tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 360 and third-party ad serving: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` Output only for other cases.
    &quot;cmAdId&quot;: &quot;A String&quot;, # The ad ID of the campaign manager 360 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager 360 tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager 360 tracking Ad.
  },
  &quot;companionCreativeIds&quot;: [ # The IDs of companion creatives for a video creative. You can assign existing display creatives (with image or HTML5 assets) to serve surrounding the publisher&#x27;s video player. Companions display around the video player while the video is playing and remain after the video has completed. Creatives contain additional dimensions can not be companion creatives. This field is only supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;counterEvents&quot;: [ # Counter events for a rich media creative. Counters track the number of times that a user interacts with any part of a rich media creative in a specified way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries, etc.). Any event that can be captured in the creative can be recorded as a counter. Leave it empty or unset for creatives containing image assets only.
    { # Counter event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &quot;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &quot;dimensions&quot;: { # Dimensions. # Required. Primary dimensions of the creative. Applicable to all creative types. The value of width_pixels and height_pixels defaults to `0` when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_INTERSTITIAL` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_VIDEO`
    &quot;heightPixels&quot;: 42, # The height in pixels.
    &quot;widthPixels&quot;: 42, # The width in pixels.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the creative. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &quot;entityStatus&quot;: &quot;A String&quot;, # Required. Controls whether or not the creative can serve. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
  &quot;exitEvents&quot;: [ # Required. Exit events for this creative. An exit (also known as a click tag) is any area in your creative that someone can click or tap to open an advertiser&#x27;s landing page. Every creative must include at least one exit. You can add an exit to your creative in any of the following ways: * Use Google Web Designer&#x27;s tap area. * Define a JavaScript variable called &quot;clickTag&quot;. * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
    { # Exit event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # The name of the click tag of the exit event. The name must be unique within one creative. Leave it empty or unset for creatives containing image assets only.
      &quot;reportingName&quot;: &quot;A String&quot;, # The name used to identify this event in reports. Leave it empty or unset for creatives containing image assets only.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &quot;url&quot;: &quot;A String&quot;, # Required. The click through URL of the exit event. This is required when type is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
    },
  ],
  &quot;expandOnHover&quot;: True or False, # Optional. Indicates the creative will automatically expand on hover. Optional and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;expandingDirection&quot;: &quot;A String&quot;, # Optional. Specifies the expanding direction of the creative. Required and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &quot;html5Video&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires HTML5 Video support. Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;iasCampaignMonitoring&quot;: True or False, # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To enable this for the creative, make sure the Advertiser.creative_config.ias_client_id has been set to your IAS client ID.
  &quot;integrationCode&quot;: &quot;A String&quot;, # ID information used to link this creative to an external system. Must be UTF-8 encoded with a length of no more than 10,000 characters.
  &quot;jsTrackerUrl&quot;: &quot;A String&quot;, # JavaScript measurement URL from supported third-party verification providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
  &quot;lineItemIds&quot;: [ # Output only. The IDs of the line items this creative is associated with. To associate a creative to a line item, use LineItem.creative_ids instead.
    &quot;A String&quot;,
  ],
  &quot;mediaDuration&quot;: &quot;A String&quot;, # Output only. Media duration of the creative. Applicable when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
  &quot;mp3Audio&quot;: True or False, # Output only. Indicates the third-party audio creative supports MP3. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &quot;notes&quot;: &quot;A String&quot;, # User notes for this creative. Must be UTF-8 encoded with a length of no more than 20,000 characters.
  &quot;obaIcon&quot;: { # OBA Icon for a Creative # Specifies the OBA icon for a video creative. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # Required. The click tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;dimensions&quot;: { # Dimensions. # The dimensions of the OBA icon.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
    &quot;landingPageUrl&quot;: &quot;A String&quot;, # Required. The landing page URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &quot;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;viewTrackingUrl&quot;: &quot;A String&quot;, # Required. The view tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
  },
  &quot;oggAudio&quot;: True or False, # Output only. Indicates the third-party audio creative supports OGG. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;progressOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before counting a view. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;requireHtml5&quot;: True or False, # Optional. Indicates that the creative relies on HTML5 to render properly. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requireMraid&quot;: True or False, # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad Interface Definitions system). Set this if the creative relies on mobile gestures for interactivity, such as swiping or tapping. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requirePingForAttribution&quot;: True or False, # Optional. Indicates that the creative will wait for a return ping for attribution. Only valid when using a Campaign Manager 360 tracking ad with a third-party ad server parameter and the ${DC_DBM_TOKEN} macro. Optional and only valid for third-party tag creatives or third-party VAST tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;approvalStatus&quot;: &quot;A String&quot;, # Represents the basic approval needed for a creative to begin serving. Summary of creative_and_landing_page_review_status and content_and_policy_review_status.
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    &quot;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
      },
    ],
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
      },
    ],
  },
  &quot;skipOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before the skip button appears. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;skippable&quot;: True or False, # Whether the user can choose to skip a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;thirdPartyTag&quot;: &quot;A String&quot;, # Optional. The original third-party tag used for the creative. Required and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;thirdPartyUrls&quot;: [ # Tracking URLs from third parties to track interactions with a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
    { # Tracking URLs from third parties to track interactions with an audio or a video creative.
      &quot;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      &quot;url&quot;: &quot;A String&quot;, # Tracking URL used to track the interaction. Provide a URL with optional path or query string, beginning with `https:`. For example, https://www.example.com/path
    },
  ],
  &quot;timerEvents&quot;: [ # Timer custom events for a rich media creative. Timers track the time during which a user views and interacts with a specified part of a rich media creative. A creative can have multiple timer events, each timed independently. Leave it empty or unset for creatives containing image assets only.
    { # Timer event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the timer event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this timer event in reports.
    },
  ],
  &quot;trackerUrls&quot;: [ # Tracking URLs for analytics providers or third-party ad technology vendors. The URLs must start with https (except on inventory that doesn&#x27;t require SSL compliance). If using macros in your URL, use only macros supported by Display &amp; Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;transcodes&quot;: [ # Output only. Audio/Video transcodes. Display &amp; Video 360 transcodes the main asset into a number of alternative versions that use different file formats or have different properties (resolution, audio bit rate, and video bit rate), each designed for specific video players or bandwidths. These transcodes give a publisher&#x27;s system more options to choose from for each impression on your video and ensures that the appropriate file serves based on the viewer’s connection and screen size. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_AUDIO`
    { # Represents information about the transcoded audio or video file.
      &quot;audioBitRateKbps&quot;: &quot;A String&quot;, # The bit rate for the audio stream of the transcoded video, or the bit rate for the transcoded audio, in kilobits per second.
      &quot;audioSampleRateHz&quot;: &quot;A String&quot;, # The sample rate for the audio stream of the transcoded video, or the sample rate for the transcoded audio, in hertz.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      &quot;dimensions&quot;: { # Dimensions. # The dimensions of the transcoded video.
        &quot;heightPixels&quot;: 42, # The height in pixels.
        &quot;widthPixels&quot;: 42, # The width in pixels.
      },
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
    },
  ],
  &quot;universalAdId&quot;: { # A creative identifier provided by a registry that is unique across all platforms. This is part of the VAST 4.0 standard. # Optional. An optional creative identifier provided by a registry that is unique across all platforms. Universal Ad ID is part of the VAST 4.0 standard. It can be modified after the creative is created. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    &quot;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &quot;vastTagUrl&quot;: &quot;A String&quot;, # Optional. The URL of the VAST tag for a third-party VAST tag creative. Required and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;vpaid&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires VPAID (Digital Video Player-Ad Interface). Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
}

  updateMask: string, Required. The mask to control which fields to update.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single Creative.
  &quot;additionalDimensions&quot;: [ # Additional dimensions. Applicable when creative_type is one of: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_LIGHTBOX` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_PUBLISHER_HOSTED` If this field is specified, width_pixels and height_pixels are both required and must be greater than or equal to 0.
    { # Dimensions.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
  ],
  &quot;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  &quot;assets&quot;: [ # Required. Assets associated to this creative. Assets can be associated to the creative in one of following roles: * `ASSET_ROLE_UNSPECIFIED` * `ASSET_ROLE_MAIN` * `ASSET_ROLE_BACKUP` * `ASSET_ROLE_POLITE_LOAD`
    { # Asset association for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &quot;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        &quot;mediaId&quot;: &quot;A String&quot;, # Media ID of the uploaded asset. This is a unique identifier for the asset. This ID can be passed to other API calls, e.g. CreateCreative to associate the asset with a creative.
      },
      &quot;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
    },
  ],
  &quot;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager 360 placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &quot;cmTrackingAd&quot;: { # A Campaign Manager 360 tracking ad. # The Campaign Manager 360 tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 360 and third-party ad serving: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` Output only for other cases.
    &quot;cmAdId&quot;: &quot;A String&quot;, # The ad ID of the campaign manager 360 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager 360 tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager 360 tracking Ad.
  },
  &quot;companionCreativeIds&quot;: [ # The IDs of companion creatives for a video creative. You can assign existing display creatives (with image or HTML5 assets) to serve surrounding the publisher&#x27;s video player. Companions display around the video player while the video is playing and remain after the video has completed. Creatives contain additional dimensions can not be companion creatives. This field is only supported for following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;counterEvents&quot;: [ # Counter events for a rich media creative. Counters track the number of times that a user interacts with any part of a rich media creative in a specified way (mouse-overs, mouse-outs, clicks, taps, data loading, keyboard entries, etc.). Any event that can be captured in the creative can be recorded as a counter. Leave it empty or unset for creatives containing image assets only.
    { # Counter event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &quot;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &quot;dimensions&quot;: { # Dimensions. # Required. Primary dimensions of the creative. Applicable to all creative types. The value of width_pixels and height_pixels defaults to `0` when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_INTERSTITIAL` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_TEMPLATED_APP_INSTALL_VIDEO`
    &quot;heightPixels&quot;: 42, # The height in pixels.
    &quot;widthPixels&quot;: 42, # The width in pixels.
  },
  &quot;displayName&quot;: &quot;A String&quot;, # Required. The display name of the creative. Must be UTF-8 encoded with a maximum size of 240 bytes.
  &quot;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &quot;entityStatus&quot;: &quot;A String&quot;, # Required. Controls whether or not the creative can serve. Accepted values are: * `ENTITY_STATUS_ACTIVE` * `ENTITY_STATUS_ARCHIVED` * `ENTITY_STATUS_PAUSED`
  &quot;exitEvents&quot;: [ # Required. Exit events for this creative. An exit (also known as a click tag) is any area in your creative that someone can click or tap to open an advertiser&#x27;s landing page. Every creative must include at least one exit. You can add an exit to your creative in any of the following ways: * Use Google Web Designer&#x27;s tap area. * Define a JavaScript variable called &quot;clickTag&quot;. * Use the Enabler (Enabler.exit()) to track exits in rich media formats.
    { # Exit event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # The name of the click tag of the exit event. The name must be unique within one creative. Leave it empty or unset for creatives containing image assets only.
      &quot;reportingName&quot;: &quot;A String&quot;, # The name used to identify this event in reports. Leave it empty or unset for creatives containing image assets only.
      &quot;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &quot;url&quot;: &quot;A String&quot;, # Required. The click through URL of the exit event. This is required when type is: * `EXIT_EVENT_TYPE_DEFAULT` * `EXIT_EVENT_TYPE_BACKUP`
    },
  ],
  &quot;expandOnHover&quot;: True or False, # Optional. Indicates the creative will automatically expand on hover. Optional and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;expandingDirection&quot;: &quot;A String&quot;, # Optional. Specifies the expanding direction of the creative. Required and only valid for third-party expandable creatives. Third-party expandable creatives are creatives with following hosting source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_EXPANDABLE`
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &quot;html5Video&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires HTML5 Video support. Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;iasCampaignMonitoring&quot;: True or False, # Indicates whether Integral Ad Science (IAS) campaign monitoring is enabled. To enable this for the creative, make sure the Advertiser.creative_config.ias_client_id has been set to your IAS client ID.
  &quot;integrationCode&quot;: &quot;A String&quot;, # ID information used to link this creative to an external system. Must be UTF-8 encoded with a length of no more than 10,000 characters.
  &quot;jsTrackerUrl&quot;: &quot;A String&quot;, # JavaScript measurement URL from supported third-party verification providers (ComScore, DoubleVerify, IAS, Moat). HTML script tags are not supported. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
  &quot;lineItemIds&quot;: [ # Output only. The IDs of the line items this creative is associated with. To associate a creative to a line item, use LineItem.creative_ids instead.
    &quot;A String&quot;,
  ],
  &quot;mediaDuration&quot;: &quot;A String&quot;, # Output only. Media duration of the creative. Applicable when creative_type is one of: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_PUBLISHER_HOSTED`
  &quot;mp3Audio&quot;: True or False, # Output only. Indicates the third-party audio creative supports MP3. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &quot;notes&quot;: &quot;A String&quot;, # User notes for this creative. Must be UTF-8 encoded with a length of no more than 20,000 characters.
  &quot;obaIcon&quot;: { # OBA Icon for a Creative # Specifies the OBA icon for a video creative. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # Required. The click tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;dimensions&quot;: { # Dimensions. # The dimensions of the OBA icon.
      &quot;heightPixels&quot;: 42, # The height in pixels.
      &quot;widthPixels&quot;: 42, # The width in pixels.
    },
    &quot;landingPageUrl&quot;: &quot;A String&quot;, # Required. The landing page URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &quot;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;viewTrackingUrl&quot;: &quot;A String&quot;, # Required. The view tracking URL of the OBA icon. Only URLs of the following domains are allowed: * https://info.evidon.com * https://l.betrad.com
  },
  &quot;oggAudio&quot;: True or False, # Output only. Indicates the third-party audio creative supports OGG. Output only and only valid for third-party audio creatives. Third-party audio creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO`
  &quot;progressOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before counting a view. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;requireHtml5&quot;: True or False, # Optional. Indicates that the creative relies on HTML5 to render properly. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requireMraid&quot;: True or False, # Optional. Indicates that the creative requires MRAID (Mobile Rich Media Ad Interface Definitions system). Set this if the creative relies on mobile gestures for interactivity, such as swiping or tapping. Optional and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;requirePingForAttribution&quot;: True or False, # Optional. Indicates that the creative will wait for a return ping for attribution. Only valid when using a Campaign Manager 360 tracking ad with a third-party ad server parameter and the ${DC_DBM_TOKEN} macro. Optional and only valid for third-party tag creatives or third-party VAST tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE` Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;approvalStatus&quot;: &quot;A String&quot;, # Represents the basic approval needed for a creative to begin serving. Summary of creative_and_landing_page_review_status and content_and_policy_review_status.
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    &quot;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
      },
    ],
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
      },
    ],
  },
  &quot;skipOffset&quot;: { # The length an audio or a video has been played. # Amount of time to play the video before the skip button appears. This field is required when skippable is true. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    &quot;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
  },
  &quot;skippable&quot;: True or False, # Whether the user can choose to skip a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
  &quot;thirdPartyTag&quot;: &quot;A String&quot;, # Optional. The original third-party tag used for the creative. Required and only valid for third-party tag creatives. Third-party tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_STANDARD` * `CREATIVE_TYPE_EXPANDABLE`
  &quot;thirdPartyUrls&quot;: [ # Tracking URLs from third parties to track interactions with a video creative. This field is only supported for the following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO`
    { # Tracking URLs from third parties to track interactions with an audio or a video creative.
      &quot;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      &quot;url&quot;: &quot;A String&quot;, # Tracking URL used to track the interaction. Provide a URL with optional path or query string, beginning with `https:`. For example, https://www.example.com/path
    },
  ],
  &quot;timerEvents&quot;: [ # Timer custom events for a rich media creative. Timers track the time during which a user views and interacts with a specified part of a rich media creative. A creative can have multiple timer events, each timed independently. Leave it empty or unset for creatives containing image assets only.
    { # Timer event of the creative.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the timer event.
      &quot;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this timer event in reports.
    },
  ],
  &quot;trackerUrls&quot;: [ # Tracking URLs for analytics providers or third-party ad technology vendors. The URLs must start with https (except on inventory that doesn&#x27;t require SSL compliance). If using macros in your URL, use only macros supported by Display &amp; Video 360. Standard URLs only, no IMG or SCRIPT tags. This field is only supported in following creative_type: * `CREATIVE_TYPE_NATIVE` * `CREATIVE_TYPE_NATIVE_SITE_SQUARE` * `CREATIVE_TYPE_NATIVE_APP_INSTALL` * `CREATIVE_TYPE_NATIVE_APP_INSTALL_SQUARE` * `CREATIVE_TYPE_NATIVE_VIDEO`
    &quot;A String&quot;,
  ],
  &quot;transcodes&quot;: [ # Output only. Audio/Video transcodes. Display &amp; Video 360 transcodes the main asset into a number of alternative versions that use different file formats or have different properties (resolution, audio bit rate, and video bit rate), each designed for specific video players or bandwidths. These transcodes give a publisher&#x27;s system more options to choose from for each impression on your video and ensures that the appropriate file serves based on the viewer’s connection and screen size. This field is only supported in following creative_type: * `CREATIVE_TYPE_VIDEO` * `CREATIVE_TYPE_NATIVE_VIDEO` * `CREATIVE_TYPE_AUDIO`
    { # Represents information about the transcoded audio or video file.
      &quot;audioBitRateKbps&quot;: &quot;A String&quot;, # The bit rate for the audio stream of the transcoded video, or the bit rate for the transcoded audio, in kilobits per second.
      &quot;audioSampleRateHz&quot;: &quot;A String&quot;, # The sample rate for the audio stream of the transcoded video, or the sample rate for the transcoded audio, in hertz.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      &quot;dimensions&quot;: { # Dimensions. # The dimensions of the transcoded video.
        &quot;heightPixels&quot;: 42, # The height in pixels.
        &quot;widthPixels&quot;: 42, # The width in pixels.
      },
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
    },
  ],
  &quot;universalAdId&quot;: { # A creative identifier provided by a registry that is unique across all platforms. This is part of the VAST 4.0 standard. # Optional. An optional creative identifier provided by a registry that is unique across all platforms. Universal Ad ID is part of the VAST 4.0 standard. It can be modified after the creative is created. This field is only supported for the following creative_type: * `CREATIVE_TYPE_VIDEO`
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    &quot;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
  },
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &quot;vastTagUrl&quot;: &quot;A String&quot;, # Optional. The URL of the VAST tag for a third-party VAST tag creative. Required and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_AUDIO` * `CREATIVE_TYPE_VIDEO`
  &quot;vpaid&quot;: True or False, # Output only. Indicates the third-party VAST tag creative requires VPAID (Digital Video Player-Ad Interface). Output only and only valid for third-party VAST tag creatives. Third-party VAST tag creatives are creatives with following hosting_source: * `HOSTING_SOURCE_THIRD_PARTY` combined with following creative_type: * `CREATIVE_TYPE_VIDEO`
}</pre>
</div>

</body></html>