<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="realtimebidding_v1.html">Real-time Bidding API</a> . <a href="realtimebidding_v1.bidders.html">bidders</a> . <a href="realtimebidding_v1.bidders.creatives.html">creatives</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, view=None, pageSize=None, filter=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists creatives.</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="#watch">watch(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Watches all creatives pertaining to a bidder. It is sufficient to invoke</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, view=None, pageSize=None, filter=None, x__xgafv=None)</code>
  <pre>Lists creatives.

Args:
  parent: string, Required. Name of the parent buyer that owns the creatives.

The pattern for this resource is either `buyers/{buyerAccountId}` or
`bidders/{bidderAccountId}`.

For `buyers/{buyerAccountId}`, the `buyerAccountId` can be one of the
following:
1. The ID of the buyer that is accessing their own creatives.
2. The ID of the child seat buyer under a bidder account.
   So for listing creatives pertaining to the child seat buyer (`456`)
   under bidder account (`123`), you would use the pattern: `buyers/456`.
3. The ID of the bidder itself.
   So for listing creatives pertaining to bidder (`123`),
   you would use `buyers/123`.

If you want to access all creatives pertaining to both the bidder and all
of its child seat accounts, you would use `bidders/{bidderAccountId}`,
e.g., for all creatives pertaining to bidder (`123`), use `bidders/123`. (required)
  pageToken: string, A token identifying a page of results the server should return.
Typically, this is the value of
ListCreativesResponse.nextPageToken
returned from the previous call to the &#x27;ListCreatives&#x27; method.
  view: string, Controls the amount of information included in the response.
By default only
creativeServingDecision
is included. To retrieve the entire creative
resource (including the declared
fields and the creative content) specify the view as &quot;FULL&quot;.
  pageSize: integer, Requested page size. The server may return fewer creatives than requested
(due to timeout constraint) even if more are available via another call.
If unspecified, server will pick an appropriate default.
Acceptable values are 1 to 1000, inclusive.
  filter: string, Query string to filter creatives. If no filter is specified,
all active creatives will be returned.

Example: &#x27;accountId=12345 AND (dealsStatus:DISAPPROVED AND
disapprovalReason:UNACCEPTABLE_CONTENT) OR
declaredAttributes:IS_COOKIE_TARGETED&#x27;
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A response for listing creatives.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results.
        # Pass this value in the
        # ListCreativesRequest.pageToken
        # field in the subsequent call to the `ListCreatives` method to retrieve the
        # next page of results.
    &quot;creatives&quot;: [ # The list of creatives.
      { # A creative and its classification data.
        &quot;creativeServingDecision&quot;: { # Top level status and detected attributes of a creative. # Output only. Top level status and detected attributes of a creative (for example domain,
            # language, advertiser, product category, etc.) that affect whether (status)
            # and where (context) a creative will be allowed to serve.
          &quot;detectedSensitiveCategories&quot;: [ # Detected sensitive categories, if any.
              # Can be used to filter the response of the
              # creatives.list
              # method.
              #
              # See the ad-sensitive-categories.txt file in the technical documentation
              # for a list of IDs. You should use these IDs along with the
              # excluded-sensitive-category field in the bid request to filter your bids.
            42,
          ],
          &quot;detectedClickThroughUrls&quot;: [ # The set of detected destination URLs for the creative.
              # Can be used to filter the response of the
              # creatives.list
              # method.
            &quot;A String&quot;,
          ],
          &quot;detectedVendorIds&quot;: [ # IDs of the ad technology vendors that were detected to be
              # used by this creative. See
              # https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt for
              # possible values.
              # Can be used to filter the response of the
              # creatives.list
              # method.
              #
              # If the `allowed_vendor_type` field of a [bid
              # request](https://developers.google.com/authorized-buyers/rtb/downloads/realtime-bidding-proto)
              # does not contain one of the vendor type IDs that were declared or
              # detected for a given creative, and a bid is submitted with that creative,
              # the bid will be filtered before the auction.
            42,
          ],
          &quot;dealsServingStatus&quot;: { # Serving status of the creative for a transaction type or a region. # Status of this creative when bidding on PG and PD deals (outside of
              # Russia and China).
            &quot;topics&quot;: [ # Policy topics related to the serving decision for this transaction type
                # (e.g., open auction, deals) or region (e.g., China, Russia).
                # Topics may be present only if status is DISAPPROVED.
              { # Each policy topic entry will represent a violation of a policy topic for a
                  # creative, with the policy topic information and optional evidence for the
                  # policy violation.
                &quot;helpCenterUrl&quot;: &quot;A String&quot;, # URL of the help center article describing this policy topic.
                &quot;evidences&quot;: [ # Pieces of evidence associated with this policy topic entry.
                  { # Evidence associated with a policy topic entry.
                    &quot;downloadSize&quot;: { # Total download size and URL-level download size breakdown for resources in # Total download size and URL-level download size breakdown for resources
                        # in a creative.
                        # a creative.
                      &quot;topUrlDownloadSizeBreakdowns&quot;: [ # Download size broken down by URLs with the top download size.
                        { # The URL-level breakdown for the download size.
                          &quot;normalizedUrl&quot;: &quot;A String&quot;, # The normalized URL with query parameters and fragment removed.
                          &quot;downloadSizeKb&quot;: 42, # Download size of the URL in kilobytes.
                        },
                      ],
                      &quot;totalDownloadSizeKb&quot;: 42, # Total download size (in kilobytes) for all the resources in the creative.
                    },
                    &quot;httpCookie&quot;: { # Evidence for HTTP cookie-related policy violations. # Evidence for HTTP cookie-related policy violations.
                      &quot;maxCookieCount&quot;: 42, # The largest number of cookies set by a creative. If this field is set,
                          # cookie_names above will be set to the cookie names of top domains with
                          # the largest number of cookies.
                          # This field will only be set for TOO_MANY_COOKIES policy.
                      &quot;cookieNames&quot;: [ # Names of cookies that violate Google policies.
                          # For TOO_MANY_COOKIES policy, this will be the cookie names of top domains
                          # with the largest number of cookies. For other policies, this will be all
                          # the cookie names that violate the policy.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationUrl&quot;: { # The full landing page URL of the destination. # URL of the actual landing page.
                      &quot;destinationUrl&quot;: &quot;A String&quot;, # The full landing page URL of the destination.
                    },
                    &quot;httpCall&quot;: { # HTTP calls made by a creative that resulted in policy violations. # HTTP calls made by the creative that resulted in policy violations.
                      &quot;urls&quot;: [ # URLs of HTTP calls made by the creative.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationNotCrawlable&quot;: { # Evidence that the creative&#x27;s destination URL was not crawlable by Google. # The creative&#x27;s destination URL was not crawlable by Google.
                      &quot;crawlTime&quot;: &quot;A String&quot;, # Approximate time of the crawl.
                      &quot;reason&quot;: &quot;A String&quot;, # Reason of destination not crawlable.
                      &quot;crawledUrl&quot;: &quot;A String&quot;, # Destination URL that was attempted to be crawled.
                    },
                    &quot;domainCall&quot;: { # Number of HTTP calls made by a creative, broken down by domain. # Number of HTTP calls made by the creative, broken down by domain.
                      &quot;totalHttpCallCount&quot;: 42, # The total number of HTTP calls made by the creative, including but not
                          # limited to the number of calls in the top_http_call_domains.
                      &quot;topHttpCallDomains&quot;: [ # Breakdown of the most frequent domains called via HTTP by the creative.
                        { # The number of HTTP calls made to the given domain.
                          &quot;httpCallCount&quot;: 42, # Number of HTTP calls made to the domain.
                          &quot;domain&quot;: &quot;A String&quot;, # The domain name.
                        },
                      ],
                    },
                    &quot;destinationNotWorking&quot;: { # Evidence of the creative&#x27;s destination URL not functioning properly or # The creative&#x27;s destination URL did not function properly or was
                        # incorrectly set up.
                        # having been incorrectly set up.
                      &quot;platform&quot;: &quot;A String&quot;, # Platform of the non-working URL.
                      &quot;httpError&quot;: 42, # HTTP error code (e.g. 404 or 5xx)
                      &quot;invalidPage&quot;: &quot;A String&quot;, # Page was crawled successfully, but was detected as either a page with
                          # no content or an error page.
                      &quot;dnsError&quot;: &quot;A String&quot;, # DNS lookup errors.
                      &quot;urlRejected&quot;: &quot;A String&quot;, # Rejected because of malformed URLs or invalid requests.
                      &quot;lastCheckTime&quot;: &quot;A String&quot;, # Approximate time when the ad destination was last checked.
                      &quot;expandedUrl&quot;: &quot;A String&quot;, # The full non-working URL.
                      &quot;redirectionError&quot;: &quot;A String&quot;, # HTTP redirect chain error.
                    },
                  },
                ],
                &quot;policyTopic&quot;: &quot;A String&quot;, # Policy topic this entry refers to. For example, &quot;ALCOHOL&quot;,
                    # &quot;TRADEMARKS_IN_AD_TEXT&quot;, or &quot;DESTINATION_NOT_WORKING&quot;. The set of possible
                    # policy topics is not fixed for a particular API version and may change at
                    # any time.
                    # Can be used to filter the response of the
                    # creatives.list
                    # method
              },
            ],
            &quot;status&quot;: &quot;A String&quot;, # Serving status for the given transaction type (e.g., open auction,
                # deals) or region (e.g., China, Russia).
                # Can be used to filter the response of the
                # creatives.list
                # method.
          },
          &quot;detectedAdvertisers&quot;: [ # Detected advertisers and brands.
            { # Detected advertiser and brand information.
              &quot;advertiserId&quot;: &quot;A String&quot;, # See https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt
                  # for the list of possible values.
                  # Can be used to filter the response of the
                  # creatives.list
                  # method.
              &quot;brandName&quot;: &quot;A String&quot;, # Brand name.
                  # Can be used to filter the response of the
                  # creatives.list
                  # method.
              &quot;brandId&quot;: &quot;A String&quot;, # Detected brand ID or zero if no brand has been detected.
                  # See https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt for
                  # the list of possible values.
                  # Can be used to filter the response of the
                  # creatives.list
                  # method.
              &quot;advertiserName&quot;: &quot;A String&quot;, # Advertiser name.
                  # Can be used to filter the response of the
                  # creatives.list
                  # method.
            },
          ],
          &quot;adTechnologyProviders&quot;: { # Detected ad technology provider information. # The detected ad technology providers.
            &quot;detectedProviderIds&quot;: [ # The detected ad technology provider IDs for this creative.
                # See https://storage.googleapis.com/adx-rtb-dictionaries/providers.csv for
                # mapping of provider ID to provided name, a privacy policy URL, and a list
                # of domains which can be attributed to the provider.
                #
                # If the creative contains provider IDs that are outside of those listed in
                # the `BidRequest.adslot.consented_providers_settings.consented_providers`
                # field on the [Google bid
                # protocol](https://developers.google.com/authorized-buyers/rtb/downloads/realtime-bidding-proto)
                # and the
                # `BidRequest.user.ext.consented_providers_settings.consented_providers`
                # field on the [OpenRTB
                # protocol](https://developers.google.com/authorized-buyers/rtb/downloads/openrtb-adx-proto),
                # and a bid is submitted with that creative for an impression
                # that will serve to an EEA user, the bid will be filtered before the
                # auction.
              &quot;A String&quot;,
            ],
            &quot;hasUnidentifiedProvider&quot;: True or False, # Whether the creative contains an unidentified ad technology provider.
                #
                # If true for a given creative, any bid submitted with that creative for an
                # impression that will serve to an EEA user will be filtered before the
                # auction.
          },
          &quot;chinaServingStatus&quot;: { # Serving status of the creative for a transaction type or a region. # The serving status of this creative in China.
              # When approved or disapproved, this status applies to both deals and open
              # auction in China. When pending review, this creative is allowed to serve
              # for deals but not for open auction.
            &quot;topics&quot;: [ # Policy topics related to the serving decision for this transaction type
                # (e.g., open auction, deals) or region (e.g., China, Russia).
                # Topics may be present only if status is DISAPPROVED.
              { # Each policy topic entry will represent a violation of a policy topic for a
                  # creative, with the policy topic information and optional evidence for the
                  # policy violation.
                &quot;helpCenterUrl&quot;: &quot;A String&quot;, # URL of the help center article describing this policy topic.
                &quot;evidences&quot;: [ # Pieces of evidence associated with this policy topic entry.
                  { # Evidence associated with a policy topic entry.
                    &quot;downloadSize&quot;: { # Total download size and URL-level download size breakdown for resources in # Total download size and URL-level download size breakdown for resources
                        # in a creative.
                        # a creative.
                      &quot;topUrlDownloadSizeBreakdowns&quot;: [ # Download size broken down by URLs with the top download size.
                        { # The URL-level breakdown for the download size.
                          &quot;normalizedUrl&quot;: &quot;A String&quot;, # The normalized URL with query parameters and fragment removed.
                          &quot;downloadSizeKb&quot;: 42, # Download size of the URL in kilobytes.
                        },
                      ],
                      &quot;totalDownloadSizeKb&quot;: 42, # Total download size (in kilobytes) for all the resources in the creative.
                    },
                    &quot;httpCookie&quot;: { # Evidence for HTTP cookie-related policy violations. # Evidence for HTTP cookie-related policy violations.
                      &quot;maxCookieCount&quot;: 42, # The largest number of cookies set by a creative. If this field is set,
                          # cookie_names above will be set to the cookie names of top domains with
                          # the largest number of cookies.
                          # This field will only be set for TOO_MANY_COOKIES policy.
                      &quot;cookieNames&quot;: [ # Names of cookies that violate Google policies.
                          # For TOO_MANY_COOKIES policy, this will be the cookie names of top domains
                          # with the largest number of cookies. For other policies, this will be all
                          # the cookie names that violate the policy.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationUrl&quot;: { # The full landing page URL of the destination. # URL of the actual landing page.
                      &quot;destinationUrl&quot;: &quot;A String&quot;, # The full landing page URL of the destination.
                    },
                    &quot;httpCall&quot;: { # HTTP calls made by a creative that resulted in policy violations. # HTTP calls made by the creative that resulted in policy violations.
                      &quot;urls&quot;: [ # URLs of HTTP calls made by the creative.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationNotCrawlable&quot;: { # Evidence that the creative&#x27;s destination URL was not crawlable by Google. # The creative&#x27;s destination URL was not crawlable by Google.
                      &quot;crawlTime&quot;: &quot;A String&quot;, # Approximate time of the crawl.
                      &quot;reason&quot;: &quot;A String&quot;, # Reason of destination not crawlable.
                      &quot;crawledUrl&quot;: &quot;A String&quot;, # Destination URL that was attempted to be crawled.
                    },
                    &quot;domainCall&quot;: { # Number of HTTP calls made by a creative, broken down by domain. # Number of HTTP calls made by the creative, broken down by domain.
                      &quot;totalHttpCallCount&quot;: 42, # The total number of HTTP calls made by the creative, including but not
                          # limited to the number of calls in the top_http_call_domains.
                      &quot;topHttpCallDomains&quot;: [ # Breakdown of the most frequent domains called via HTTP by the creative.
                        { # The number of HTTP calls made to the given domain.
                          &quot;httpCallCount&quot;: 42, # Number of HTTP calls made to the domain.
                          &quot;domain&quot;: &quot;A String&quot;, # The domain name.
                        },
                      ],
                    },
                    &quot;destinationNotWorking&quot;: { # Evidence of the creative&#x27;s destination URL not functioning properly or # The creative&#x27;s destination URL did not function properly or was
                        # incorrectly set up.
                        # having been incorrectly set up.
                      &quot;platform&quot;: &quot;A String&quot;, # Platform of the non-working URL.
                      &quot;httpError&quot;: 42, # HTTP error code (e.g. 404 or 5xx)
                      &quot;invalidPage&quot;: &quot;A String&quot;, # Page was crawled successfully, but was detected as either a page with
                          # no content or an error page.
                      &quot;dnsError&quot;: &quot;A String&quot;, # DNS lookup errors.
                      &quot;urlRejected&quot;: &quot;A String&quot;, # Rejected because of malformed URLs or invalid requests.
                      &quot;lastCheckTime&quot;: &quot;A String&quot;, # Approximate time when the ad destination was last checked.
                      &quot;expandedUrl&quot;: &quot;A String&quot;, # The full non-working URL.
                      &quot;redirectionError&quot;: &quot;A String&quot;, # HTTP redirect chain error.
                    },
                  },
                ],
                &quot;policyTopic&quot;: &quot;A String&quot;, # Policy topic this entry refers to. For example, &quot;ALCOHOL&quot;,
                    # &quot;TRADEMARKS_IN_AD_TEXT&quot;, or &quot;DESTINATION_NOT_WORKING&quot;. The set of possible
                    # policy topics is not fixed for a particular API version and may change at
                    # any time.
                    # Can be used to filter the response of the
                    # creatives.list
                    # method
              },
            ],
            &quot;status&quot;: &quot;A String&quot;, # Serving status for the given transaction type (e.g., open auction,
                # deals) or region (e.g., China, Russia).
                # Can be used to filter the response of the
                # creatives.list
                # method.
          },
          &quot;detectedProductCategories&quot;: [ # Detected product categories, if any.
              # See the ad-product-categories.txt file in the technical documentation
              # for a list of IDs.
              # Can be used to filter the response of the
              # creatives.list
              # method.
            42,
          ],
          &quot;detectedAttributes&quot;: [ # Publisher-excludable attributes that were detected for this creative.
              # Can be used to filter the response of the
              # creatives.list
              # method.
              #
              # If the `excluded_attribute` field of a [bid
              # request](https://developers.google.com/authorized-buyers/rtb/downloads/realtime-bidding-proto)
              # contains one of the attributes that were declared or detected for a given
              # creative, and a bid is submitted with that creative, the bid will be
              # filtered before the auction.
            &quot;A String&quot;,
          ],
          &quot;lastStatusUpdate&quot;: &quot;A String&quot;, # The last time the creative status was updated.
              # Can be used to filter the response of the
              # creatives.list
              # method.
          &quot;openAuctionServingStatus&quot;: { # Serving status of the creative for a transaction type or a region. # Status of this creative when bidding in open auction, private auction, or
              # auction packages (outside of Russia and China).
            &quot;topics&quot;: [ # Policy topics related to the serving decision for this transaction type
                # (e.g., open auction, deals) or region (e.g., China, Russia).
                # Topics may be present only if status is DISAPPROVED.
              { # Each policy topic entry will represent a violation of a policy topic for a
                  # creative, with the policy topic information and optional evidence for the
                  # policy violation.
                &quot;helpCenterUrl&quot;: &quot;A String&quot;, # URL of the help center article describing this policy topic.
                &quot;evidences&quot;: [ # Pieces of evidence associated with this policy topic entry.
                  { # Evidence associated with a policy topic entry.
                    &quot;downloadSize&quot;: { # Total download size and URL-level download size breakdown for resources in # Total download size and URL-level download size breakdown for resources
                        # in a creative.
                        # a creative.
                      &quot;topUrlDownloadSizeBreakdowns&quot;: [ # Download size broken down by URLs with the top download size.
                        { # The URL-level breakdown for the download size.
                          &quot;normalizedUrl&quot;: &quot;A String&quot;, # The normalized URL with query parameters and fragment removed.
                          &quot;downloadSizeKb&quot;: 42, # Download size of the URL in kilobytes.
                        },
                      ],
                      &quot;totalDownloadSizeKb&quot;: 42, # Total download size (in kilobytes) for all the resources in the creative.
                    },
                    &quot;httpCookie&quot;: { # Evidence for HTTP cookie-related policy violations. # Evidence for HTTP cookie-related policy violations.
                      &quot;maxCookieCount&quot;: 42, # The largest number of cookies set by a creative. If this field is set,
                          # cookie_names above will be set to the cookie names of top domains with
                          # the largest number of cookies.
                          # This field will only be set for TOO_MANY_COOKIES policy.
                      &quot;cookieNames&quot;: [ # Names of cookies that violate Google policies.
                          # For TOO_MANY_COOKIES policy, this will be the cookie names of top domains
                          # with the largest number of cookies. For other policies, this will be all
                          # the cookie names that violate the policy.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationUrl&quot;: { # The full landing page URL of the destination. # URL of the actual landing page.
                      &quot;destinationUrl&quot;: &quot;A String&quot;, # The full landing page URL of the destination.
                    },
                    &quot;httpCall&quot;: { # HTTP calls made by a creative that resulted in policy violations. # HTTP calls made by the creative that resulted in policy violations.
                      &quot;urls&quot;: [ # URLs of HTTP calls made by the creative.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationNotCrawlable&quot;: { # Evidence that the creative&#x27;s destination URL was not crawlable by Google. # The creative&#x27;s destination URL was not crawlable by Google.
                      &quot;crawlTime&quot;: &quot;A String&quot;, # Approximate time of the crawl.
                      &quot;reason&quot;: &quot;A String&quot;, # Reason of destination not crawlable.
                      &quot;crawledUrl&quot;: &quot;A String&quot;, # Destination URL that was attempted to be crawled.
                    },
                    &quot;domainCall&quot;: { # Number of HTTP calls made by a creative, broken down by domain. # Number of HTTP calls made by the creative, broken down by domain.
                      &quot;totalHttpCallCount&quot;: 42, # The total number of HTTP calls made by the creative, including but not
                          # limited to the number of calls in the top_http_call_domains.
                      &quot;topHttpCallDomains&quot;: [ # Breakdown of the most frequent domains called via HTTP by the creative.
                        { # The number of HTTP calls made to the given domain.
                          &quot;httpCallCount&quot;: 42, # Number of HTTP calls made to the domain.
                          &quot;domain&quot;: &quot;A String&quot;, # The domain name.
                        },
                      ],
                    },
                    &quot;destinationNotWorking&quot;: { # Evidence of the creative&#x27;s destination URL not functioning properly or # The creative&#x27;s destination URL did not function properly or was
                        # incorrectly set up.
                        # having been incorrectly set up.
                      &quot;platform&quot;: &quot;A String&quot;, # Platform of the non-working URL.
                      &quot;httpError&quot;: 42, # HTTP error code (e.g. 404 or 5xx)
                      &quot;invalidPage&quot;: &quot;A String&quot;, # Page was crawled successfully, but was detected as either a page with
                          # no content or an error page.
                      &quot;dnsError&quot;: &quot;A String&quot;, # DNS lookup errors.
                      &quot;urlRejected&quot;: &quot;A String&quot;, # Rejected because of malformed URLs or invalid requests.
                      &quot;lastCheckTime&quot;: &quot;A String&quot;, # Approximate time when the ad destination was last checked.
                      &quot;expandedUrl&quot;: &quot;A String&quot;, # The full non-working URL.
                      &quot;redirectionError&quot;: &quot;A String&quot;, # HTTP redirect chain error.
                    },
                  },
                ],
                &quot;policyTopic&quot;: &quot;A String&quot;, # Policy topic this entry refers to. For example, &quot;ALCOHOL&quot;,
                    # &quot;TRADEMARKS_IN_AD_TEXT&quot;, or &quot;DESTINATION_NOT_WORKING&quot;. The set of possible
                    # policy topics is not fixed for a particular API version and may change at
                    # any time.
                    # Can be used to filter the response of the
                    # creatives.list
                    # method
              },
            ],
            &quot;status&quot;: &quot;A String&quot;, # Serving status for the given transaction type (e.g., open auction,
                # deals) or region (e.g., China, Russia).
                # Can be used to filter the response of the
                # creatives.list
                # method.
          },
          &quot;detectedLanguages&quot;: [ # The detected languages for this creative. The order is
              # arbitrary. The codes are 2 or 5 characters and are documented at
              # https://developers.google.com/adwords/api/docs/appendix/languagecodes.
              # Can be used to filter the response of the
              # creatives.list
              # method.
            &quot;A String&quot;,
          ],
          &quot;detectedDomains&quot;: [ # The detected domains for this creative.
            &quot;A String&quot;,
          ],
          &quot;russiaServingStatus&quot;: { # Serving status of the creative for a transaction type or a region. # The serving status of this creative in Russia.
              # When approved or disapproved, this status applies to both deals and open
              # auction in Russia. When pending review, this creative is allowed to serve
              # for deals but not for open auction.
            &quot;topics&quot;: [ # Policy topics related to the serving decision for this transaction type
                # (e.g., open auction, deals) or region (e.g., China, Russia).
                # Topics may be present only if status is DISAPPROVED.
              { # Each policy topic entry will represent a violation of a policy topic for a
                  # creative, with the policy topic information and optional evidence for the
                  # policy violation.
                &quot;helpCenterUrl&quot;: &quot;A String&quot;, # URL of the help center article describing this policy topic.
                &quot;evidences&quot;: [ # Pieces of evidence associated with this policy topic entry.
                  { # Evidence associated with a policy topic entry.
                    &quot;downloadSize&quot;: { # Total download size and URL-level download size breakdown for resources in # Total download size and URL-level download size breakdown for resources
                        # in a creative.
                        # a creative.
                      &quot;topUrlDownloadSizeBreakdowns&quot;: [ # Download size broken down by URLs with the top download size.
                        { # The URL-level breakdown for the download size.
                          &quot;normalizedUrl&quot;: &quot;A String&quot;, # The normalized URL with query parameters and fragment removed.
                          &quot;downloadSizeKb&quot;: 42, # Download size of the URL in kilobytes.
                        },
                      ],
                      &quot;totalDownloadSizeKb&quot;: 42, # Total download size (in kilobytes) for all the resources in the creative.
                    },
                    &quot;httpCookie&quot;: { # Evidence for HTTP cookie-related policy violations. # Evidence for HTTP cookie-related policy violations.
                      &quot;maxCookieCount&quot;: 42, # The largest number of cookies set by a creative. If this field is set,
                          # cookie_names above will be set to the cookie names of top domains with
                          # the largest number of cookies.
                          # This field will only be set for TOO_MANY_COOKIES policy.
                      &quot;cookieNames&quot;: [ # Names of cookies that violate Google policies.
                          # For TOO_MANY_COOKIES policy, this will be the cookie names of top domains
                          # with the largest number of cookies. For other policies, this will be all
                          # the cookie names that violate the policy.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationUrl&quot;: { # The full landing page URL of the destination. # URL of the actual landing page.
                      &quot;destinationUrl&quot;: &quot;A String&quot;, # The full landing page URL of the destination.
                    },
                    &quot;httpCall&quot;: { # HTTP calls made by a creative that resulted in policy violations. # HTTP calls made by the creative that resulted in policy violations.
                      &quot;urls&quot;: [ # URLs of HTTP calls made by the creative.
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;destinationNotCrawlable&quot;: { # Evidence that the creative&#x27;s destination URL was not crawlable by Google. # The creative&#x27;s destination URL was not crawlable by Google.
                      &quot;crawlTime&quot;: &quot;A String&quot;, # Approximate time of the crawl.
                      &quot;reason&quot;: &quot;A String&quot;, # Reason of destination not crawlable.
                      &quot;crawledUrl&quot;: &quot;A String&quot;, # Destination URL that was attempted to be crawled.
                    },
                    &quot;domainCall&quot;: { # Number of HTTP calls made by a creative, broken down by domain. # Number of HTTP calls made by the creative, broken down by domain.
                      &quot;totalHttpCallCount&quot;: 42, # The total number of HTTP calls made by the creative, including but not
                          # limited to the number of calls in the top_http_call_domains.
                      &quot;topHttpCallDomains&quot;: [ # Breakdown of the most frequent domains called via HTTP by the creative.
                        { # The number of HTTP calls made to the given domain.
                          &quot;httpCallCount&quot;: 42, # Number of HTTP calls made to the domain.
                          &quot;domain&quot;: &quot;A String&quot;, # The domain name.
                        },
                      ],
                    },
                    &quot;destinationNotWorking&quot;: { # Evidence of the creative&#x27;s destination URL not functioning properly or # The creative&#x27;s destination URL did not function properly or was
                        # incorrectly set up.
                        # having been incorrectly set up.
                      &quot;platform&quot;: &quot;A String&quot;, # Platform of the non-working URL.
                      &quot;httpError&quot;: 42, # HTTP error code (e.g. 404 or 5xx)
                      &quot;invalidPage&quot;: &quot;A String&quot;, # Page was crawled successfully, but was detected as either a page with
                          # no content or an error page.
                      &quot;dnsError&quot;: &quot;A String&quot;, # DNS lookup errors.
                      &quot;urlRejected&quot;: &quot;A String&quot;, # Rejected because of malformed URLs or invalid requests.
                      &quot;lastCheckTime&quot;: &quot;A String&quot;, # Approximate time when the ad destination was last checked.
                      &quot;expandedUrl&quot;: &quot;A String&quot;, # The full non-working URL.
                      &quot;redirectionError&quot;: &quot;A String&quot;, # HTTP redirect chain error.
                    },
                  },
                ],
                &quot;policyTopic&quot;: &quot;A String&quot;, # Policy topic this entry refers to. For example, &quot;ALCOHOL&quot;,
                    # &quot;TRADEMARKS_IN_AD_TEXT&quot;, or &quot;DESTINATION_NOT_WORKING&quot;. The set of possible
                    # policy topics is not fixed for a particular API version and may change at
                    # any time.
                    # Can be used to filter the response of the
                    # creatives.list
                    # method
              },
            ],
            &quot;status&quot;: &quot;A String&quot;, # Serving status for the given transaction type (e.g., open auction,
                # deals) or region (e.g., China, Russia).
                # Can be used to filter the response of the
                # creatives.list
                # method.
          },
        },
        &quot;version&quot;: 42, # Output only. The version of this creative.
            # Version for a new creative is 1 and it increments during subsequent
            # creative updates.
        &quot;declaredClickThroughUrls&quot;: [ # The set of declared destination URLs for the creative.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          &quot;A String&quot;,
        ],
        &quot;html&quot;: { # HTML content for a creative. # An HTML creative.
          &quot;height&quot;: 42, # The height of the HTML snippet in pixels.
              # Can be used to filter the response of the
              # creatives.list
              # method.
          &quot;snippet&quot;: &quot;A String&quot;, # The HTML snippet that displays the ad when inserted in the web page.
          &quot;width&quot;: 42, # The width of the HTML snippet in pixels.
              # Can be used to filter the response of the
              # creatives.list
              # method.
        },
        &quot;apiUpdateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the creative via API.
        &quot;impressionTrackingUrls&quot;: [ # The set of URLs to be called to record an impression.
          &quot;A String&quot;,
        ],
        &quot;native&quot;: { # Native content for a creative. # A native creative.
          &quot;advertiserName&quot;: &quot;A String&quot;, # The name of the advertiser or sponsor, to be displayed in the ad creative.
          &quot;appIcon&quot;: { # An image resource. You may provide a larger image than was requested, # The app icon, for app download ads.
              # so long as the aspect ratio is preserved.
            &quot;height&quot;: 42, # Image height in pixels.
            &quot;width&quot;: 42, # Image width in pixels.
            &quot;url&quot;: &quot;A String&quot;, # The URL of the image.
          },
          &quot;headline&quot;: &quot;A String&quot;, # A short title for the ad.
          &quot;logo&quot;: { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser&#x27;s logo.
              # so long as the aspect ratio is preserved.
            &quot;height&quot;: 42, # Image height in pixels.
            &quot;width&quot;: 42, # Image width in pixels.
            &quot;url&quot;: &quot;A String&quot;, # The URL of the image.
          },
          &quot;videoUrl&quot;: &quot;A String&quot;, # The URL to fetch a native video ad.
          &quot;starRating&quot;: 3.14, # The app rating in the app store. Must be in the range [0-5].
          &quot;clickTrackingUrl&quot;: &quot;A String&quot;, # The URL to use for click tracking.
          &quot;body&quot;: &quot;A String&quot;, # A long description of the ad.
          &quot;callToAction&quot;: &quot;A String&quot;, # A label for the button that the user is supposed to click.
          &quot;priceDisplayText&quot;: &quot;A String&quot;, # The price of the promoted app including currency info.
          &quot;image&quot;: { # An image resource. You may provide a larger image than was requested, # A large image.
              # so long as the aspect ratio is preserved.
            &quot;height&quot;: 42, # Image height in pixels.
            &quot;width&quot;: 42, # Image width in pixels.
            &quot;url&quot;: &quot;A String&quot;, # The URL of the image.
          },
          &quot;clickLinkUrl&quot;: &quot;A String&quot;, # The URL that the browser/SDK will load when the user clicks the ad.
        },
        &quot;dealIds&quot;: [ # Output only. IDs of all of the deals with which this creative has been used
            # in bidding.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          &quot;A String&quot;,
        ],
        &quot;restrictedCategories&quot;: [ # All restricted categories for the ads that may be shown from this creative.
          &quot;A String&quot;,
        ],
        &quot;declaredRestrictedCategories&quot;: [ # All declared restricted categories for the ads that may be shown from this
            # creative. Can be used to filter the response of the
            # creatives.list
            # method.
          &quot;A String&quot;,
        ],
        &quot;advertiserName&quot;: &quot;A String&quot;, # The name of the company being advertised in the creative.
            # Can be used to filter the response of the
            # creatives.list
            # method.
        &quot;video&quot;: { # Video content for a creative. # A video creative.
          &quot;videoMetadata&quot;: { # Video metadata for a creative. # Output only. Video metadata.
            &quot;vastVersion&quot;: &quot;A String&quot;, # The maximum VAST version across all wrapped VAST documents.
                # Can be used to filter the response of the
                # creatives.list
                # method.
            &quot;mediaFiles&quot;: [ # The list of all media files declared in the VAST. If there are multiple
                # VASTs in a wrapper chain, this includes the media files from the deepest
                # one in the chain.
              { # Information about each media file in the VAST.
                &quot;bitrate&quot;: &quot;A String&quot;, # Bitrate of the video file, in Kbps.
                    # Can be used to filter the response of the
                    # creatives.list
                    # method.
                &quot;mimeType&quot;: &quot;A String&quot;, # The MIME type of this media file.
                    # Can be used to filter the response of the
                    # creatives.list
                    # method.
              },
            ],
            &quot;isVpaid&quot;: True or False, # Is this a VPAID ad?
                # Can be used to filter the response of the
                # creatives.list
                # method.
            &quot;duration&quot;: &quot;A String&quot;, # The duration of the ad.
                # Can be used to filter the response of the
                # creatives.list
                # method.
            &quot;skipOffset&quot;: &quot;A String&quot;, # The minimum duration that the user has to watch before being able to
                # skip this ad. If the field is not set, the ad is not skippable. If
                # the field is set, the ad is skippable.
                # Can be used to filter the response of the
                # creatives.list
                # method.
            &quot;isValidVast&quot;: True or False, # Is this a valid VAST ad?
                # Can be used to filter the response of the
                # creatives.list
                # method.
          },
          &quot;videoVastXml&quot;: &quot;A String&quot;, # The contents of a VAST document for a video ad.
              # This document should conform to the VAST 2.0 or 3.0 standard.
          &quot;videoUrl&quot;: &quot;A String&quot;, # The URL to fetch a video ad.
        },
        &quot;adChoicesDestinationUrl&quot;: &quot;A String&quot;, # The link to AdChoices destination page. This is only supported for native
            # ads.
        &quot;creativeId&quot;: &quot;A String&quot;, # Buyer-specific creative ID that references this creative in bid responses.
            # This field is Ignored in update operations. Can be used to filter the
            # response of the
            # creatives.list
            # method.
            # The maximum length of the creative ID is 128 bytes.
        &quot;declaredAttributes&quot;: [ # All declared attributes for the ads that may be shown from this creative.
            # Can be used to filter the response of the
            # creatives.list
            # method.
            #
            # If the `excluded_attribute` field of a [bid
            # request](https://developers.google.com/authorized-buyers/rtb/downloads/realtime-bidding-proto&quot;)
            # contains one of the attributes that were declared or detected for a given
            # creative, and a bid is submitted with that creative, the bid will be
            # filtered before the auction.
          &quot;A String&quot;,
        ],
        &quot;agencyId&quot;: &quot;A String&quot;, # The agency ID for this creative.
        &quot;accountId&quot;: &quot;A String&quot;, # Output only. ID of the buyer account that this creative is owned by.
            # Can be used to filter the response of the
            # creatives.list
            # method with equality and inequality check.
        &quot;declaredVendorIds&quot;: [ # IDs for the declared ad technology vendors that may be used by this
            # creative. See
            # https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt for
            # possible values.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          42,
        ],
        &quot;name&quot;: &quot;A String&quot;, # Output only. Name of the creative.
            # Follows the pattern `buyers/{buyer}/creatives/{creative}`, where
            # `{buyer}` represents the account ID of the buyer who owns the creative,
            # and `{creative}` is the buyer-specific creative ID that references this
            # creative in the bid response.
        &quot;creativeFormat&quot;: &quot;A String&quot;, # Output only. The format of this creative.
            # Can be used to filter the response of the
            # creatives.list
            # method.
      },
    ],
  }</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="watch">watch(parent, body=None, x__xgafv=None)</code>
  <pre>Watches all creatives pertaining to a bidder. It is sufficient to invoke
this endpoint once per bidder. A Pub/Sub topic will be created and
notifications will be pushed to the topic when any of the bidder&#x27;s
creatives change status. All of the bidder&#x27;s service accounts will have
access to read from the topic.
Subsequent invocations of this method will return the existing
Pub/Sub configuration.

Args:
  parent: string, Required. To watch all creatives pertaining to the bidder and all its child seat
accounts, the bidder must follow the pattern `bidders/{bidderAccountId}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A request to receive push notifications when any of the creatives belonging
      # to the bidder changes status.
  }

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

Returns:
  An object of the form:

    { # A response for the request to receive push notification when a bidder&#x27;s
      # creatives change status.
    &quot;subscription&quot;: &quot;A String&quot;, # The Pub/Sub subscription that can be used to pull creative status
        # notifications. This would be of the format
        # `projects/{project_id}/subscriptions/{subscription_id}`.
        # Subscription is created with pull delivery. All service accounts belonging
        # to the bidder will have read access to this subscription.
        # Subscriptions that are inactive for more than 90 days will be disabled.
        # Please use
        # watchCreatives to
        # re-enable the subscription.
    &quot;topic&quot;: &quot;A String&quot;, # The Pub/Sub topic that will be used to publish creative serving
        # status notifications. This would be of the format
        # `projects/{project_id}/topics/{topic_id}`.
  }</pre>
</div>

</body></html>