<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="#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, pageToken=None, pageSize=None, orderBy=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="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;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 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_VIDEO`
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &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;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;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &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;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;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;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;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
      },
    ],
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &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;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
      },
    ],
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
  },
  &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;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;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &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;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
      },
    },
  ],
  &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;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;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
    },
  ],
  &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;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;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &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;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;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;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;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
    },
  ],
  &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;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
  },
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
  },
  &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;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &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;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &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;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_VIDEO`
  &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;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;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &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;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;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;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
    },
  ],
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &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;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;cmTrackingAd&quot;: { # A Campaign Manager tracking ad. # The Campaign Manager tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 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 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager tracking Ad.
  },
  &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;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;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;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &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;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;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &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;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;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;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;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
  },
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
}

  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;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 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_VIDEO`
    &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
    &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;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;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
      &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
      &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
      &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
      &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;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;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;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;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
      &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
        { # Publisher review status for the creative.
          &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
          &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        },
      ],
      &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
      &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;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
        { # Exchange review status for the creative.
          &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
          &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        },
      ],
      &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    },
    &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;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;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
        &quot;asset&quot;: { # A single asset. # The associated asset.
          &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;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        },
      },
    ],
    &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;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;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      },
    ],
    &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;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;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
    &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;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;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;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;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
        &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      },
    ],
    &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;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
      &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    },
    &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
    &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    },
    &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;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
    &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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
    &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;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
      &quot;A String&quot;,
    ],
    &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;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_VIDEO`
    &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;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;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
        &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
        &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
        &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;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;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;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
        &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
        &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      },
    ],
    &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
    &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;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;cmTrackingAd&quot;: { # A Campaign Manager tracking ad. # The Campaign Manager tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 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 tracking Ad.
      &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager tracking Ad.
      &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager tracking Ad.
    },
    &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;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;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;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
        &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;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;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
    &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;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;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;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;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
    &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    },
    &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  }</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;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 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_VIDEO`
    &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
    &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;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;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
      &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
      &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
      &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
      &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;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;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;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;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
      &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
        { # Publisher review status for the creative.
          &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
          &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        },
      ],
      &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
      &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;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
        { # Exchange review status for the creative.
          &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
          &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        },
      ],
      &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    },
    &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;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;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
        &quot;asset&quot;: { # A single asset. # The associated asset.
          &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;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        },
      },
    ],
    &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;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;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      },
    ],
    &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;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;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
    &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;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;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;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;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
        &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      },
    ],
    &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;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
      &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    },
    &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
    &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    },
    &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;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
    &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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
    &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;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
      &quot;A String&quot;,
    ],
    &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;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_VIDEO`
    &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;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;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
        &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
        &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
        &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;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;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;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
        &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
        &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      },
    ],
    &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
    &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;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;cmTrackingAd&quot;: { # A Campaign Manager tracking ad. # The Campaign Manager tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 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 tracking Ad.
      &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager tracking Ad.
      &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager tracking Ad.
    },
    &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;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;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;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
        &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;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;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
    &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;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;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;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;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
    &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    },
    &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(advertiserId, filter=None, pageToken=None, pageSize=None, orderBy=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.
  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.
  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.
  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`.
  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;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 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_VIDEO`
        &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
        &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;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;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
          &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
          &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
          &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
          &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;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;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;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;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
          &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
            { # Publisher review status for the creative.
              &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
              &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
            },
          ],
          &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
          &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;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
            { # Exchange review status for the creative.
              &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
              &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
            },
          ],
          &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
        },
        &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;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;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
            &quot;asset&quot;: { # A single asset. # The associated asset.
              &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;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
            },
          },
        ],
        &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;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;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
          },
        ],
        &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;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;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
        &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;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;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;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;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
            &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
          },
        ],
        &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;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
          &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
        },
        &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
        &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
          &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
        },
        &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;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
        &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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
        &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;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
          &quot;A String&quot;,
        ],
        &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;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_VIDEO`
        &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;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;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
            &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
            &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
            &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;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;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;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
            &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
            &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
          },
        ],
        &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
        &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;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;cmTrackingAd&quot;: { # A Campaign Manager tracking ad. # The Campaign Manager tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 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 tracking Ad.
          &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager tracking Ad.
          &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager tracking Ad.
        },
        &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;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;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;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
            &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;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;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
        &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;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;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;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;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
        &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
          &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
        },
        &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
      },
    ],
    &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;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 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_VIDEO`
  &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
  &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;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;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
    &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
    &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
    &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
    &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;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;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;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;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
    &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
      { # Publisher review status for the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
        &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
      },
    ],
    &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
    &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;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
      { # Exchange review status for the creative.
        &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
        &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
      },
    ],
    &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
  },
  &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;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;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
      &quot;asset&quot;: { # A single asset. # The associated asset.
        &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;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
      },
    },
  ],
  &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;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;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
    },
  ],
  &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;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;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
  &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;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;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;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;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
      &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
    },
  ],
  &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;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
    &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
  },
  &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
  &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
  },
  &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;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
  &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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
  &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;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
    &quot;A String&quot;,
  ],
  &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;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_VIDEO`
  &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;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;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
      &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
      &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
      &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;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;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;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
      &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
      &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
    },
  ],
  &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
  &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;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;cmTrackingAd&quot;: { # A Campaign Manager tracking ad. # The Campaign Manager tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 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 tracking Ad.
    &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager tracking Ad.
    &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager tracking Ad.
  },
  &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;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;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;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
      &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;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;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
  &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;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;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;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;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
  &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
    &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
  },
  &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
}

  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;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 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_VIDEO`
    &quot;creativeId&quot;: &quot;A String&quot;, # Output only. The unique ID of the creative. Assigned by the system.
    &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;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;program&quot;: &quot;A String&quot;, # The program of the OBA icon. For example: “AdChoices”.
      &quot;resourceUrl&quot;: &quot;A String&quot;, # The URL of the OBA icon resource.
      &quot;resourceMimeType&quot;: &quot;A String&quot;, # The MIME type of the OBA icon resource.
      &quot;position&quot;: &quot;A String&quot;, # The position of the OBA icon on the creative.
      &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;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;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;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;reviewStatus&quot;: { # Review statuses for the creative. # Output only. The current status of the creative review process.
      &quot;publisherReviewStatuses&quot;: [ # Publisher review statuses for the creative.
        { # Publisher review status for the creative.
          &quot;status&quot;: &quot;A String&quot;, # Status of the publisher review.
          &quot;publisherName&quot;: &quot;A String&quot;, # The publisher reviewing the creative.
        },
      ],
      &quot;contentAndPolicyReviewStatus&quot;: &quot;A String&quot;, # Content and policy review status for the creative.
      &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;exchangeReviewStatuses&quot;: [ # Exchange review statuses for the creative.
        { # Exchange review status for the creative.
          &quot;status&quot;: &quot;A String&quot;, # Status of the exchange review.
          &quot;exchange&quot;: &quot;A String&quot;, # The exchange reviewing the creative.
        },
      ],
      &quot;creativeAndLandingPageReviewStatus&quot;: &quot;A String&quot;, # Creative and landing page review status for the creative.
    },
    &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;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;role&quot;: &quot;A String&quot;, # The role of this asset for the creative.
        &quot;asset&quot;: { # A single asset. # The associated asset.
          &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;content&quot;: &quot;A String&quot;, # The asset content. For uploaded assets, the content is the serving path.
        },
      },
    ],
    &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;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;type&quot;: &quot;A String&quot;, # The type of interaction needs to be tracked by the tracking URL
      },
    ],
    &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;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;advertiserId&quot;: &quot;A String&quot;, # Output only. The unique ID of the advertiser the creative belongs to.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the creative.
    &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;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;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;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;reportingName&quot;: &quot;A String&quot;, # Required. The name used to identify this counter event in reports.
        &quot;name&quot;: &quot;A String&quot;, # Required. The name of the counter event.
      },
    ],
    &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;registry&quot;: &quot;A String&quot;, # The registry provides unique creative identifiers.
      &quot;id&quot;: &quot;A String&quot;, # The unique creative identifier.
    },
    &quot;hostingSource&quot;: &quot;A String&quot;, # Required. Indicates where the creative is hosted.
    &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    },
    &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;dynamic&quot;: True or False, # Output only. Indicates whether the creative is dynamic.
    &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;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;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was last updated. Assigned by the system.
    &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;creativeAttributes&quot;: [ # Output only. A list of attributes of the creative that is generated by the system.
      &quot;A String&quot;,
    ],
    &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;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_VIDEO`
    &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;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;name&quot;: &quot;A String&quot;, # The name of the transcoded file.
        &quot;frameRate&quot;: 3.14, # The frame rate of the transcoded video, in frames per second.
        &quot;fileSizeBytes&quot;: &quot;A String&quot;, # The size of the transcoded file, in bytes.
        &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;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;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;transcoded&quot;: True or False, # Indicates if the transcoding was successful.
        &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of the transcoded file.
        &quot;bitRateKbps&quot;: &quot;A String&quot;, # The transcoding bit rate of the transcoded video, in kilobits per second.
      },
    ],
    &quot;creativeType&quot;: &quot;A String&quot;, # Required. Immutable. The type of the creative.
    &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;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;cmTrackingAd&quot;: { # A Campaign Manager tracking ad. # The Campaign Manager tracking ad associated with the creative. Optional for the following creative_type when created by an advertiser that uses both Campaign Manager 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 tracking Ad.
      &quot;cmCreativeId&quot;: &quot;A String&quot;, # The creative ID of the campaign manager tracking Ad.
      &quot;cmPlacementId&quot;: &quot;A String&quot;, # The placement ID of the campaign manager tracking Ad.
    },
    &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;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;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;type&quot;: &quot;A String&quot;, # Required. The type of the exit event.
        &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;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;cmPlacementId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Campaign Manager placement associated with the creative. This field is only applicable for creatives that are synced from Campaign Manager.
    &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;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;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;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;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the creative was created. Assigned by the system.
    &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;seconds&quot;: &quot;A String&quot;, # The offset in seconds from the start of the audio or video.
      &quot;percentage&quot;: &quot;A String&quot;, # The offset in percentage of the audio or video duration.
    },
    &quot;appendedTag&quot;: &quot;A String&quot;, # Third-party HTML tracking tag to be appended to the creative tag.
  }</pre>
</div>

</body></html>