<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="adexchangebuyer2_v2beta1.html">Ad Exchange Buyer API II</a> . <a href="adexchangebuyer2_v2beta1.accounts.html">accounts</a> . <a href="adexchangebuyer2_v2beta1.accounts.creatives.html">creatives</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="adexchangebuyer2_v2beta1.accounts.creatives.dealAssociations.html">dealAssociations()</a></code>
</p>
<p class="firstline">Returns the dealAssociations Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(accountId, body, duplicateIdMode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a creative.</p>
<p class="toc_element">
  <code><a href="#get">get(accountId, creativeId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a creative.</p>
<p class="toc_element">
  <code><a href="#list">list(accountId, pageSize=None, pageToken=None, query=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="#stopWatching">stopWatching(accountId, creativeId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Stops watching a creative. Will stop push notifications being sent to the</p>
<p class="toc_element">
  <code><a href="#update">update(accountId, creativeId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a creative.</p>
<p class="toc_element">
  <code><a href="#watch">watch(accountId, creativeId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Watches a creative. Will result in push notifications being sent to the</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(accountId, body, duplicateIdMode=None, x__xgafv=None)</code>
  <pre>Creates a creative.

Args:
  accountId: string, The account that this creative belongs to.
Can be used to filter the response of the
creatives.list
method. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A creative and its classification data.
  "impressionTrackingUrls": [ # The set of URLs to be called to record an impression.
    "A String",
  ],
  "version": 42, # Output only. The version of this creative.
  "detectedLanguages": [ # Output only. 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.
    "A String",
  ],
  "advertiserName": "A String", # The name of the company being advertised in the creative.
  "clickThroughUrls": [ # The set of destination URLs for the creative.
    "A String",
  ],
  "video": { # Video content for a creative. # A video creative.
    "videoUrl": "A String", # The URL to fetch a video ad.
    "videoVastXml": "A String", # The contents of a VAST document for a video ad.
        # This document should conform to the VAST 2.0 or 3.0 standard.
  },
  "detectedSensitiveCategories": [ # Output only. Detected sensitive categories, if any.
      # 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,
  ],
  "creativeId": "A String", # The buyer-defined creative ID of this creative.
      # Can be used to filter the response of the
      # creatives.list
      # method.
  "detectedAdvertiserIds": [ # Output only. Detected advertiser IDs, if any.
    "A String",
  ],
  "adChoicesDestinationUrl": "A String", # The link to AdChoices destination page.
  "native": { # Native content for a creative. # A native creative.
    "body": "A String", # A long description of the ad.
    "videoUrl": "A String", # The URL to fetch a native video ad.
    "headline": "A String", # A short title for the ad.
    "image": { # An image resource. You may provide a larger image than was requested, # A large image.
        # so long as the aspect ratio is preserved.
      "url": "A String", # The URL of the image.
      "width": 42, # Image width in pixels.
      "height": 42, # Image height in pixels.
    },
    "clickTrackingUrl": "A String", # The URL to use for click tracking.
    "starRating": 3.14, # The app rating in the app store. Must be in the range [0-5].
    "advertiserName": "A String", # The name of the advertiser or sponsor, to be displayed in the ad creative.
    "priceDisplayText": "A String", # The price of the promoted app including currency info.
    "callToAction": "A String", # A label for the button that the user is supposed to click.
    "logo": { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser's logo.
        # so long as the aspect ratio is preserved.
      "url": "A String", # The URL of the image.
      "width": 42, # Image width in pixels.
      "height": 42, # Image height in pixels.
    },
    "appIcon": { # 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.
      "url": "A String", # The URL of the image.
      "width": 42, # Image width in pixels.
      "height": 42, # Image height in pixels.
    },
    "storeUrl": "A String", # The URL to the app store to purchase/download the promoted app.
    "clickLinkUrl": "A String", # The URL that the browser/SDK will load when the user clicks the ad.
  },
  "vendorIds": [ # All vendor IDs for the ads that may be shown from this creative.
      # See https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt
      # for possible values.
    42,
  ],
  "agencyId": "A String", # The agency ID for this creative.
  "html": { # HTML content for a creative. # An HTML creative.
    "snippet": "A String", # The HTML snippet that displays the ad when inserted in the web page.
    "width": 42, # The width of the HTML snippet in pixels.
    "height": 42, # The height of the HTML snippet in pixels.
  },
  "apiUpdateTime": "A String", # Output only. The last update timestamp of the creative via API.
  "accountId": "A String", # The account that this creative belongs to.
      # Can be used to filter the response of the
      # creatives.list
      # method.
  "detectedProductCategories": [ # Output only. Detected product categories, if any.
      # See the ad-product-categories.txt file in the technical documentation
      # for a list of IDs.
    42,
  ],
  "adTechnologyProviders": { # Detected ad technology provider information. # Output only. The detected ad technology providers.
    "hasUnidentifiedProvider": 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.
    "detectedProviderIds": [ # 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.
      "A String",
    ],
  },
  "detectedDomains": [ # Output only. The detected domains for this creative.
    "A String",
  ],
  "attributes": [ # All attributes for the ads that may be shown from this creative.
      # Can be used to filter the response of the
      # creatives.list
      # method.
    "A String",
  ],
  "dealsStatus": "A String", # Output only. The top-level deals status of this creative.
      # If disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in
      # serving_restrictions will also exist. Note
      # that this may be nuanced with other contextual restrictions, in which case,
      # it may be preferable to read from serving_restrictions directly.
      # Can be used to filter the response of the
      # creatives.list
      # method.
  "servingRestrictions": [ # Output only. The granular status of this ad in specific contexts.
      # A context here relates to where something ultimately serves (for example,
      # a physical location, a platform, an HTTPS vs HTTP request, or the type
      # of auction).
    { # Output only. A representation of the status of an ad in a
        # specific context. A context here relates to where something ultimately serves
        # (for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,
        # or the type of auction).
      "contexts": [ # The contexts for the restriction.
        { # The serving context for this restriction.
          "all": "A String", # Matches all contexts.
          "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
            "appTypes": [ # The app types this restriction applies to.
              "A String",
            ],
          },
          "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
            "securities": [ # The security types in this context.
              "A String",
            ],
          },
          "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
            "platforms": [ # The platforms this restriction applies to.
              "A String",
            ],
          },
          "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
              # location.
            "geoCriteriaIds": [ # IDs representing the geo location for this context.
                # Please refer to the
                # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                # file for different geo criteria IDs.
              42,
            ],
          },
          "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
            "auctionTypes": [ # The auction types this restriction applies to.
              "A String",
            ],
          },
        },
      ],
      "status": "A String", # The status of the creative in this context (for example, it has been
          # explicitly disapproved or is pending review).
      "disapprovalReasons": [ # Any disapprovals bound to this restriction.
          # Only present if status=DISAPPROVED.
          # Can be used to filter the response of the
          # creatives.list
          # method.
          # Deprecated; please use
          # disapproval
          # field instead.
        { # Output only. The reason and details for a disapproval.
          "reason": "A String", # The categorized reason for disapproval.
          "details": [ # Additional details about the reason for disapproval.
            "A String",
          ],
        },
      ],
      "disapproval": { # Output only. The reason and details for a disapproval. # Disapproval bound to this restriction.
          # Only present if status=DISAPPROVED.
          # Can be used to filter the response of the
          # creatives.list
          # method.
        "reason": "A String", # The categorized reason for disapproval.
        "details": [ # Additional details about the reason for disapproval.
          "A String",
        ],
      },
    },
  ],
  "declaredClickThroughUrls": [ # The set of declared destination URLs for the creative.
    "A String",
  ],
  "restrictedCategories": [ # All restricted categories for the ads that may be shown from this creative.
    "A String",
  ],
  "corrections": [ # Output only. Shows any corrections that were applied to this creative.
    { # Output only. Shows any corrections that were applied to this creative.
      "contexts": [ # The contexts for the correction.
        { # The serving context for this restriction.
          "all": "A String", # Matches all contexts.
          "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
            "appTypes": [ # The app types this restriction applies to.
              "A String",
            ],
          },
          "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
            "securities": [ # The security types in this context.
              "A String",
            ],
          },
          "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
            "platforms": [ # The platforms this restriction applies to.
              "A String",
            ],
          },
          "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
              # location.
            "geoCriteriaIds": [ # IDs representing the geo location for this context.
                # Please refer to the
                # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                # file for different geo criteria IDs.
              42,
            ],
          },
          "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
            "auctionTypes": [ # The auction types this restriction applies to.
              "A String",
            ],
          },
        },
      ],
      "type": "A String", # The type of correction that was applied to the creative.
      "details": [ # Additional details about what was corrected.
        "A String",
      ],
    },
  ],
  "openAuctionStatus": "A String", # Output only. The top-level open auction status of this creative.
      # If disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in
      # serving_restrictions will also exist. Note
      # that this may be nuanced with other contextual restrictions, in which case,
      # it may be preferable to read from serving_restrictions directly.
      # Can be used to filter the response of the
      # creatives.list
      # method.
}

  duplicateIdMode: string, Indicates if multiple creatives can share an ID or not. Default is
NO_DUPLICATES (one ID per creative).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A creative and its classification data.
    "impressionTrackingUrls": [ # The set of URLs to be called to record an impression.
      "A String",
    ],
    "version": 42, # Output only. The version of this creative.
    "detectedLanguages": [ # Output only. 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.
      "A String",
    ],
    "advertiserName": "A String", # The name of the company being advertised in the creative.
    "clickThroughUrls": [ # The set of destination URLs for the creative.
      "A String",
    ],
    "video": { # Video content for a creative. # A video creative.
      "videoUrl": "A String", # The URL to fetch a video ad.
      "videoVastXml": "A String", # The contents of a VAST document for a video ad.
          # This document should conform to the VAST 2.0 or 3.0 standard.
    },
    "detectedSensitiveCategories": [ # Output only. Detected sensitive categories, if any.
        # 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,
    ],
    "creativeId": "A String", # The buyer-defined creative ID of this creative.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "detectedAdvertiserIds": [ # Output only. Detected advertiser IDs, if any.
      "A String",
    ],
    "adChoicesDestinationUrl": "A String", # The link to AdChoices destination page.
    "native": { # Native content for a creative. # A native creative.
      "body": "A String", # A long description of the ad.
      "videoUrl": "A String", # The URL to fetch a native video ad.
      "headline": "A String", # A short title for the ad.
      "image": { # An image resource. You may provide a larger image than was requested, # A large image.
          # so long as the aspect ratio is preserved.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "clickTrackingUrl": "A String", # The URL to use for click tracking.
      "starRating": 3.14, # The app rating in the app store. Must be in the range [0-5].
      "advertiserName": "A String", # The name of the advertiser or sponsor, to be displayed in the ad creative.
      "priceDisplayText": "A String", # The price of the promoted app including currency info.
      "callToAction": "A String", # A label for the button that the user is supposed to click.
      "logo": { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser's logo.
          # so long as the aspect ratio is preserved.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "appIcon": { # 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.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "storeUrl": "A String", # The URL to the app store to purchase/download the promoted app.
      "clickLinkUrl": "A String", # The URL that the browser/SDK will load when the user clicks the ad.
    },
    "vendorIds": [ # All vendor IDs for the ads that may be shown from this creative.
        # See https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt
        # for possible values.
      42,
    ],
    "agencyId": "A String", # The agency ID for this creative.
    "html": { # HTML content for a creative. # An HTML creative.
      "snippet": "A String", # The HTML snippet that displays the ad when inserted in the web page.
      "width": 42, # The width of the HTML snippet in pixels.
      "height": 42, # The height of the HTML snippet in pixels.
    },
    "apiUpdateTime": "A String", # Output only. The last update timestamp of the creative via API.
    "accountId": "A String", # The account that this creative belongs to.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "detectedProductCategories": [ # Output only. Detected product categories, if any.
        # See the ad-product-categories.txt file in the technical documentation
        # for a list of IDs.
      42,
    ],
    "adTechnologyProviders": { # Detected ad technology provider information. # Output only. The detected ad technology providers.
      "hasUnidentifiedProvider": 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.
      "detectedProviderIds": [ # 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.
        "A String",
      ],
    },
    "detectedDomains": [ # Output only. The detected domains for this creative.
      "A String",
    ],
    "attributes": [ # All attributes for the ads that may be shown from this creative.
        # Can be used to filter the response of the
        # creatives.list
        # method.
      "A String",
    ],
    "dealsStatus": "A String", # Output only. The top-level deals status of this creative.
        # If disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in
        # serving_restrictions will also exist. Note
        # that this may be nuanced with other contextual restrictions, in which case,
        # it may be preferable to read from serving_restrictions directly.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "servingRestrictions": [ # Output only. The granular status of this ad in specific contexts.
        # A context here relates to where something ultimately serves (for example,
        # a physical location, a platform, an HTTPS vs HTTP request, or the type
        # of auction).
      { # Output only. A representation of the status of an ad in a
          # specific context. A context here relates to where something ultimately serves
          # (for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,
          # or the type of auction).
        "contexts": [ # The contexts for the restriction.
          { # The serving context for this restriction.
            "all": "A String", # Matches all contexts.
            "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
              "appTypes": [ # The app types this restriction applies to.
                "A String",
              ],
            },
            "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
              "securities": [ # The security types in this context.
                "A String",
              ],
            },
            "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
              "platforms": [ # The platforms this restriction applies to.
                "A String",
              ],
            },
            "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                # location.
              "geoCriteriaIds": [ # IDs representing the geo location for this context.
                  # Please refer to the
                  # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                  # file for different geo criteria IDs.
                42,
              ],
            },
            "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
              "auctionTypes": [ # The auction types this restriction applies to.
                "A String",
              ],
            },
          },
        ],
        "status": "A String", # The status of the creative in this context (for example, it has been
            # explicitly disapproved or is pending review).
        "disapprovalReasons": [ # Any disapprovals bound to this restriction.
            # Only present if status=DISAPPROVED.
            # Can be used to filter the response of the
            # creatives.list
            # method.
            # Deprecated; please use
            # disapproval
            # field instead.
          { # Output only. The reason and details for a disapproval.
            "reason": "A String", # The categorized reason for disapproval.
            "details": [ # Additional details about the reason for disapproval.
              "A String",
            ],
          },
        ],
        "disapproval": { # Output only. The reason and details for a disapproval. # Disapproval bound to this restriction.
            # Only present if status=DISAPPROVED.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          "reason": "A String", # The categorized reason for disapproval.
          "details": [ # Additional details about the reason for disapproval.
            "A String",
          ],
        },
      },
    ],
    "declaredClickThroughUrls": [ # The set of declared destination URLs for the creative.
      "A String",
    ],
    "restrictedCategories": [ # All restricted categories for the ads that may be shown from this creative.
      "A String",
    ],
    "corrections": [ # Output only. Shows any corrections that were applied to this creative.
      { # Output only. Shows any corrections that were applied to this creative.
        "contexts": [ # The contexts for the correction.
          { # The serving context for this restriction.
            "all": "A String", # Matches all contexts.
            "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
              "appTypes": [ # The app types this restriction applies to.
                "A String",
              ],
            },
            "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
              "securities": [ # The security types in this context.
                "A String",
              ],
            },
            "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
              "platforms": [ # The platforms this restriction applies to.
                "A String",
              ],
            },
            "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                # location.
              "geoCriteriaIds": [ # IDs representing the geo location for this context.
                  # Please refer to the
                  # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                  # file for different geo criteria IDs.
                42,
              ],
            },
            "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
              "auctionTypes": [ # The auction types this restriction applies to.
                "A String",
              ],
            },
          },
        ],
        "type": "A String", # The type of correction that was applied to the creative.
        "details": [ # Additional details about what was corrected.
          "A String",
        ],
      },
    ],
    "openAuctionStatus": "A String", # Output only. The top-level open auction status of this creative.
        # If disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in
        # serving_restrictions will also exist. Note
        # that this may be nuanced with other contextual restrictions, in which case,
        # it may be preferable to read from serving_restrictions directly.
        # Can be used to filter the response of the
        # creatives.list
        # method.
  }</pre>
</div>

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

Args:
  accountId: string, The account the creative belongs to. (required)
  creativeId: string, The ID of the creative to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A creative and its classification data.
    "impressionTrackingUrls": [ # The set of URLs to be called to record an impression.
      "A String",
    ],
    "version": 42, # Output only. The version of this creative.
    "detectedLanguages": [ # Output only. 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.
      "A String",
    ],
    "advertiserName": "A String", # The name of the company being advertised in the creative.
    "clickThroughUrls": [ # The set of destination URLs for the creative.
      "A String",
    ],
    "video": { # Video content for a creative. # A video creative.
      "videoUrl": "A String", # The URL to fetch a video ad.
      "videoVastXml": "A String", # The contents of a VAST document for a video ad.
          # This document should conform to the VAST 2.0 or 3.0 standard.
    },
    "detectedSensitiveCategories": [ # Output only. Detected sensitive categories, if any.
        # 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,
    ],
    "creativeId": "A String", # The buyer-defined creative ID of this creative.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "detectedAdvertiserIds": [ # Output only. Detected advertiser IDs, if any.
      "A String",
    ],
    "adChoicesDestinationUrl": "A String", # The link to AdChoices destination page.
    "native": { # Native content for a creative. # A native creative.
      "body": "A String", # A long description of the ad.
      "videoUrl": "A String", # The URL to fetch a native video ad.
      "headline": "A String", # A short title for the ad.
      "image": { # An image resource. You may provide a larger image than was requested, # A large image.
          # so long as the aspect ratio is preserved.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "clickTrackingUrl": "A String", # The URL to use for click tracking.
      "starRating": 3.14, # The app rating in the app store. Must be in the range [0-5].
      "advertiserName": "A String", # The name of the advertiser or sponsor, to be displayed in the ad creative.
      "priceDisplayText": "A String", # The price of the promoted app including currency info.
      "callToAction": "A String", # A label for the button that the user is supposed to click.
      "logo": { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser's logo.
          # so long as the aspect ratio is preserved.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "appIcon": { # 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.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "storeUrl": "A String", # The URL to the app store to purchase/download the promoted app.
      "clickLinkUrl": "A String", # The URL that the browser/SDK will load when the user clicks the ad.
    },
    "vendorIds": [ # All vendor IDs for the ads that may be shown from this creative.
        # See https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt
        # for possible values.
      42,
    ],
    "agencyId": "A String", # The agency ID for this creative.
    "html": { # HTML content for a creative. # An HTML creative.
      "snippet": "A String", # The HTML snippet that displays the ad when inserted in the web page.
      "width": 42, # The width of the HTML snippet in pixels.
      "height": 42, # The height of the HTML snippet in pixels.
    },
    "apiUpdateTime": "A String", # Output only. The last update timestamp of the creative via API.
    "accountId": "A String", # The account that this creative belongs to.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "detectedProductCategories": [ # Output only. Detected product categories, if any.
        # See the ad-product-categories.txt file in the technical documentation
        # for a list of IDs.
      42,
    ],
    "adTechnologyProviders": { # Detected ad technology provider information. # Output only. The detected ad technology providers.
      "hasUnidentifiedProvider": 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.
      "detectedProviderIds": [ # 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.
        "A String",
      ],
    },
    "detectedDomains": [ # Output only. The detected domains for this creative.
      "A String",
    ],
    "attributes": [ # All attributes for the ads that may be shown from this creative.
        # Can be used to filter the response of the
        # creatives.list
        # method.
      "A String",
    ],
    "dealsStatus": "A String", # Output only. The top-level deals status of this creative.
        # If disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in
        # serving_restrictions will also exist. Note
        # that this may be nuanced with other contextual restrictions, in which case,
        # it may be preferable to read from serving_restrictions directly.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "servingRestrictions": [ # Output only. The granular status of this ad in specific contexts.
        # A context here relates to where something ultimately serves (for example,
        # a physical location, a platform, an HTTPS vs HTTP request, or the type
        # of auction).
      { # Output only. A representation of the status of an ad in a
          # specific context. A context here relates to where something ultimately serves
          # (for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,
          # or the type of auction).
        "contexts": [ # The contexts for the restriction.
          { # The serving context for this restriction.
            "all": "A String", # Matches all contexts.
            "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
              "appTypes": [ # The app types this restriction applies to.
                "A String",
              ],
            },
            "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
              "securities": [ # The security types in this context.
                "A String",
              ],
            },
            "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
              "platforms": [ # The platforms this restriction applies to.
                "A String",
              ],
            },
            "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                # location.
              "geoCriteriaIds": [ # IDs representing the geo location for this context.
                  # Please refer to the
                  # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                  # file for different geo criteria IDs.
                42,
              ],
            },
            "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
              "auctionTypes": [ # The auction types this restriction applies to.
                "A String",
              ],
            },
          },
        ],
        "status": "A String", # The status of the creative in this context (for example, it has been
            # explicitly disapproved or is pending review).
        "disapprovalReasons": [ # Any disapprovals bound to this restriction.
            # Only present if status=DISAPPROVED.
            # Can be used to filter the response of the
            # creatives.list
            # method.
            # Deprecated; please use
            # disapproval
            # field instead.
          { # Output only. The reason and details for a disapproval.
            "reason": "A String", # The categorized reason for disapproval.
            "details": [ # Additional details about the reason for disapproval.
              "A String",
            ],
          },
        ],
        "disapproval": { # Output only. The reason and details for a disapproval. # Disapproval bound to this restriction.
            # Only present if status=DISAPPROVED.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          "reason": "A String", # The categorized reason for disapproval.
          "details": [ # Additional details about the reason for disapproval.
            "A String",
          ],
        },
      },
    ],
    "declaredClickThroughUrls": [ # The set of declared destination URLs for the creative.
      "A String",
    ],
    "restrictedCategories": [ # All restricted categories for the ads that may be shown from this creative.
      "A String",
    ],
    "corrections": [ # Output only. Shows any corrections that were applied to this creative.
      { # Output only. Shows any corrections that were applied to this creative.
        "contexts": [ # The contexts for the correction.
          { # The serving context for this restriction.
            "all": "A String", # Matches all contexts.
            "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
              "appTypes": [ # The app types this restriction applies to.
                "A String",
              ],
            },
            "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
              "securities": [ # The security types in this context.
                "A String",
              ],
            },
            "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
              "platforms": [ # The platforms this restriction applies to.
                "A String",
              ],
            },
            "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                # location.
              "geoCriteriaIds": [ # IDs representing the geo location for this context.
                  # Please refer to the
                  # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                  # file for different geo criteria IDs.
                42,
              ],
            },
            "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
              "auctionTypes": [ # The auction types this restriction applies to.
                "A String",
              ],
            },
          },
        ],
        "type": "A String", # The type of correction that was applied to the creative.
        "details": [ # Additional details about what was corrected.
          "A String",
        ],
      },
    ],
    "openAuctionStatus": "A String", # Output only. The top-level open auction status of this creative.
        # If disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in
        # serving_restrictions will also exist. Note
        # that this may be nuanced with other contextual restrictions, in which case,
        # it may be preferable to read from serving_restrictions directly.
        # Can be used to filter the response of the
        # creatives.list
        # method.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(accountId, pageSize=None, pageToken=None, query=None, x__xgafv=None)</code>
  <pre>Lists creatives.

Args:
  accountId: string, The account to list the creatives from.
Specify "-" to list all creatives the current user has access to. (required)
  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.
  pageToken: string, A token identifying a page of results the server should return.
Typically, this is the value of
ListCreativesResponse.next_page_token
returned from the previous call to 'ListCreatives' method.
  query: string, An optional query string to filter creatives. If no filter is specified,
all active creatives will be returned.
<p>Supported queries are:
<ul>
<li>accountId=<i>account_id_string</i>
<li>creativeId=<i>creative_id_string</i>
<li>dealsStatus: {approved, conditionally_approved, disapproved,
                   not_checked}
<li>openAuctionStatus: {approved, conditionally_approved, disapproved,
                          not_checked}
<li>attribute: {a numeric attribute from the list of attributes}
<li>disapprovalReason: {a reason from
DisapprovalReason}
</ul>
Example: 'accountId=12345 AND (dealsStatus:disapproved AND
disapprovalReason:unacceptable_content) OR attribute:47'
  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.
    "nextPageToken": "A String", # A token to retrieve the next page of results.
        # Pass this value in the
        # ListCreativesRequest.page_token
        # field in the subsequent call to `ListCreatives` method to retrieve the next
        # page of results.
    "creatives": [ # The list of creatives.
      { # A creative and its classification data.
        "impressionTrackingUrls": [ # The set of URLs to be called to record an impression.
          "A String",
        ],
        "version": 42, # Output only. The version of this creative.
        "detectedLanguages": [ # Output only. 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.
          "A String",
        ],
        "advertiserName": "A String", # The name of the company being advertised in the creative.
        "clickThroughUrls": [ # The set of destination URLs for the creative.
          "A String",
        ],
        "video": { # Video content for a creative. # A video creative.
          "videoUrl": "A String", # The URL to fetch a video ad.
          "videoVastXml": "A String", # The contents of a VAST document for a video ad.
              # This document should conform to the VAST 2.0 or 3.0 standard.
        },
        "detectedSensitiveCategories": [ # Output only. Detected sensitive categories, if any.
            # 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,
        ],
        "creativeId": "A String", # The buyer-defined creative ID of this creative.
            # Can be used to filter the response of the
            # creatives.list
            # method.
        "detectedAdvertiserIds": [ # Output only. Detected advertiser IDs, if any.
          "A String",
        ],
        "adChoicesDestinationUrl": "A String", # The link to AdChoices destination page.
        "native": { # Native content for a creative. # A native creative.
          "body": "A String", # A long description of the ad.
          "videoUrl": "A String", # The URL to fetch a native video ad.
          "headline": "A String", # A short title for the ad.
          "image": { # An image resource. You may provide a larger image than was requested, # A large image.
              # so long as the aspect ratio is preserved.
            "url": "A String", # The URL of the image.
            "width": 42, # Image width in pixels.
            "height": 42, # Image height in pixels.
          },
          "clickTrackingUrl": "A String", # The URL to use for click tracking.
          "starRating": 3.14, # The app rating in the app store. Must be in the range [0-5].
          "advertiserName": "A String", # The name of the advertiser or sponsor, to be displayed in the ad creative.
          "priceDisplayText": "A String", # The price of the promoted app including currency info.
          "callToAction": "A String", # A label for the button that the user is supposed to click.
          "logo": { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser's logo.
              # so long as the aspect ratio is preserved.
            "url": "A String", # The URL of the image.
            "width": 42, # Image width in pixels.
            "height": 42, # Image height in pixels.
          },
          "appIcon": { # 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.
            "url": "A String", # The URL of the image.
            "width": 42, # Image width in pixels.
            "height": 42, # Image height in pixels.
          },
          "storeUrl": "A String", # The URL to the app store to purchase/download the promoted app.
          "clickLinkUrl": "A String", # The URL that the browser/SDK will load when the user clicks the ad.
        },
        "vendorIds": [ # All vendor IDs for the ads that may be shown from this creative.
            # See https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt
            # for possible values.
          42,
        ],
        "agencyId": "A String", # The agency ID for this creative.
        "html": { # HTML content for a creative. # An HTML creative.
          "snippet": "A String", # The HTML snippet that displays the ad when inserted in the web page.
          "width": 42, # The width of the HTML snippet in pixels.
          "height": 42, # The height of the HTML snippet in pixels.
        },
        "apiUpdateTime": "A String", # Output only. The last update timestamp of the creative via API.
        "accountId": "A String", # The account that this creative belongs to.
            # Can be used to filter the response of the
            # creatives.list
            # method.
        "detectedProductCategories": [ # Output only. Detected product categories, if any.
            # See the ad-product-categories.txt file in the technical documentation
            # for a list of IDs.
          42,
        ],
        "adTechnologyProviders": { # Detected ad technology provider information. # Output only. The detected ad technology providers.
          "hasUnidentifiedProvider": 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.
          "detectedProviderIds": [ # 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.
            "A String",
          ],
        },
        "detectedDomains": [ # Output only. The detected domains for this creative.
          "A String",
        ],
        "attributes": [ # All attributes for the ads that may be shown from this creative.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          "A String",
        ],
        "dealsStatus": "A String", # Output only. The top-level deals status of this creative.
            # If disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in
            # serving_restrictions will also exist. Note
            # that this may be nuanced with other contextual restrictions, in which case,
            # it may be preferable to read from serving_restrictions directly.
            # Can be used to filter the response of the
            # creatives.list
            # method.
        "servingRestrictions": [ # Output only. The granular status of this ad in specific contexts.
            # A context here relates to where something ultimately serves (for example,
            # a physical location, a platform, an HTTPS vs HTTP request, or the type
            # of auction).
          { # Output only. A representation of the status of an ad in a
              # specific context. A context here relates to where something ultimately serves
              # (for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,
              # or the type of auction).
            "contexts": [ # The contexts for the restriction.
              { # The serving context for this restriction.
                "all": "A String", # Matches all contexts.
                "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
                  "appTypes": [ # The app types this restriction applies to.
                    "A String",
                  ],
                },
                "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
                  "securities": [ # The security types in this context.
                    "A String",
                  ],
                },
                "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
                  "platforms": [ # The platforms this restriction applies to.
                    "A String",
                  ],
                },
                "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                    # location.
                  "geoCriteriaIds": [ # IDs representing the geo location for this context.
                      # Please refer to the
                      # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                      # file for different geo criteria IDs.
                    42,
                  ],
                },
                "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
                  "auctionTypes": [ # The auction types this restriction applies to.
                    "A String",
                  ],
                },
              },
            ],
            "status": "A String", # The status of the creative in this context (for example, it has been
                # explicitly disapproved or is pending review).
            "disapprovalReasons": [ # Any disapprovals bound to this restriction.
                # Only present if status=DISAPPROVED.
                # Can be used to filter the response of the
                # creatives.list
                # method.
                # Deprecated; please use
                # disapproval
                # field instead.
              { # Output only. The reason and details for a disapproval.
                "reason": "A String", # The categorized reason for disapproval.
                "details": [ # Additional details about the reason for disapproval.
                  "A String",
                ],
              },
            ],
            "disapproval": { # Output only. The reason and details for a disapproval. # Disapproval bound to this restriction.
                # Only present if status=DISAPPROVED.
                # Can be used to filter the response of the
                # creatives.list
                # method.
              "reason": "A String", # The categorized reason for disapproval.
              "details": [ # Additional details about the reason for disapproval.
                "A String",
              ],
            },
          },
        ],
        "declaredClickThroughUrls": [ # The set of declared destination URLs for the creative.
          "A String",
        ],
        "restrictedCategories": [ # All restricted categories for the ads that may be shown from this creative.
          "A String",
        ],
        "corrections": [ # Output only. Shows any corrections that were applied to this creative.
          { # Output only. Shows any corrections that were applied to this creative.
            "contexts": [ # The contexts for the correction.
              { # The serving context for this restriction.
                "all": "A String", # Matches all contexts.
                "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
                  "appTypes": [ # The app types this restriction applies to.
                    "A String",
                  ],
                },
                "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
                  "securities": [ # The security types in this context.
                    "A String",
                  ],
                },
                "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
                  "platforms": [ # The platforms this restriction applies to.
                    "A String",
                  ],
                },
                "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                    # location.
                  "geoCriteriaIds": [ # IDs representing the geo location for this context.
                      # Please refer to the
                      # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                      # file for different geo criteria IDs.
                    42,
                  ],
                },
                "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
                  "auctionTypes": [ # The auction types this restriction applies to.
                    "A String",
                  ],
                },
              },
            ],
            "type": "A String", # The type of correction that was applied to the creative.
            "details": [ # Additional details about what was corrected.
              "A String",
            ],
          },
        ],
        "openAuctionStatus": "A String", # Output only. The top-level open auction status of this creative.
            # If disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in
            # serving_restrictions will also exist. Note
            # that this may be nuanced with other contextual restrictions, in which case,
            # it may be preferable to read from serving_restrictions directly.
            # 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 'execute()' 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="stopWatching">stopWatching(accountId, creativeId, body=None, x__xgafv=None)</code>
  <pre>Stops watching a creative. Will stop push notifications being sent to the
topics when the creative changes status.

Args:
  accountId: string, The account of the creative to stop notifications for. (required)
  creativeId: string, The creative ID of the creative to stop notifications for.
Specify "-" to specify stopping account level notifications. (required)
  body: object, The request body.
    The object takes the form of:

{ # A request for stopping notifications for changes to creative Status.
  }

  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="update">update(accountId, creativeId, body, x__xgafv=None)</code>
  <pre>Updates a creative.

Args:
  accountId: string, The account that this creative belongs to.
Can be used to filter the response of the
creatives.list
method. (required)
  creativeId: string, The buyer-defined creative ID of this creative.
Can be used to filter the response of the
creatives.list
method. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A creative and its classification data.
  "impressionTrackingUrls": [ # The set of URLs to be called to record an impression.
    "A String",
  ],
  "version": 42, # Output only. The version of this creative.
  "detectedLanguages": [ # Output only. 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.
    "A String",
  ],
  "advertiserName": "A String", # The name of the company being advertised in the creative.
  "clickThroughUrls": [ # The set of destination URLs for the creative.
    "A String",
  ],
  "video": { # Video content for a creative. # A video creative.
    "videoUrl": "A String", # The URL to fetch a video ad.
    "videoVastXml": "A String", # The contents of a VAST document for a video ad.
        # This document should conform to the VAST 2.0 or 3.0 standard.
  },
  "detectedSensitiveCategories": [ # Output only. Detected sensitive categories, if any.
      # 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,
  ],
  "creativeId": "A String", # The buyer-defined creative ID of this creative.
      # Can be used to filter the response of the
      # creatives.list
      # method.
  "detectedAdvertiserIds": [ # Output only. Detected advertiser IDs, if any.
    "A String",
  ],
  "adChoicesDestinationUrl": "A String", # The link to AdChoices destination page.
  "native": { # Native content for a creative. # A native creative.
    "body": "A String", # A long description of the ad.
    "videoUrl": "A String", # The URL to fetch a native video ad.
    "headline": "A String", # A short title for the ad.
    "image": { # An image resource. You may provide a larger image than was requested, # A large image.
        # so long as the aspect ratio is preserved.
      "url": "A String", # The URL of the image.
      "width": 42, # Image width in pixels.
      "height": 42, # Image height in pixels.
    },
    "clickTrackingUrl": "A String", # The URL to use for click tracking.
    "starRating": 3.14, # The app rating in the app store. Must be in the range [0-5].
    "advertiserName": "A String", # The name of the advertiser or sponsor, to be displayed in the ad creative.
    "priceDisplayText": "A String", # The price of the promoted app including currency info.
    "callToAction": "A String", # A label for the button that the user is supposed to click.
    "logo": { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser's logo.
        # so long as the aspect ratio is preserved.
      "url": "A String", # The URL of the image.
      "width": 42, # Image width in pixels.
      "height": 42, # Image height in pixels.
    },
    "appIcon": { # 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.
      "url": "A String", # The URL of the image.
      "width": 42, # Image width in pixels.
      "height": 42, # Image height in pixels.
    },
    "storeUrl": "A String", # The URL to the app store to purchase/download the promoted app.
    "clickLinkUrl": "A String", # The URL that the browser/SDK will load when the user clicks the ad.
  },
  "vendorIds": [ # All vendor IDs for the ads that may be shown from this creative.
      # See https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt
      # for possible values.
    42,
  ],
  "agencyId": "A String", # The agency ID for this creative.
  "html": { # HTML content for a creative. # An HTML creative.
    "snippet": "A String", # The HTML snippet that displays the ad when inserted in the web page.
    "width": 42, # The width of the HTML snippet in pixels.
    "height": 42, # The height of the HTML snippet in pixels.
  },
  "apiUpdateTime": "A String", # Output only. The last update timestamp of the creative via API.
  "accountId": "A String", # The account that this creative belongs to.
      # Can be used to filter the response of the
      # creatives.list
      # method.
  "detectedProductCategories": [ # Output only. Detected product categories, if any.
      # See the ad-product-categories.txt file in the technical documentation
      # for a list of IDs.
    42,
  ],
  "adTechnologyProviders": { # Detected ad technology provider information. # Output only. The detected ad technology providers.
    "hasUnidentifiedProvider": 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.
    "detectedProviderIds": [ # 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.
      "A String",
    ],
  },
  "detectedDomains": [ # Output only. The detected domains for this creative.
    "A String",
  ],
  "attributes": [ # All attributes for the ads that may be shown from this creative.
      # Can be used to filter the response of the
      # creatives.list
      # method.
    "A String",
  ],
  "dealsStatus": "A String", # Output only. The top-level deals status of this creative.
      # If disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in
      # serving_restrictions will also exist. Note
      # that this may be nuanced with other contextual restrictions, in which case,
      # it may be preferable to read from serving_restrictions directly.
      # Can be used to filter the response of the
      # creatives.list
      # method.
  "servingRestrictions": [ # Output only. The granular status of this ad in specific contexts.
      # A context here relates to where something ultimately serves (for example,
      # a physical location, a platform, an HTTPS vs HTTP request, or the type
      # of auction).
    { # Output only. A representation of the status of an ad in a
        # specific context. A context here relates to where something ultimately serves
        # (for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,
        # or the type of auction).
      "contexts": [ # The contexts for the restriction.
        { # The serving context for this restriction.
          "all": "A String", # Matches all contexts.
          "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
            "appTypes": [ # The app types this restriction applies to.
              "A String",
            ],
          },
          "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
            "securities": [ # The security types in this context.
              "A String",
            ],
          },
          "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
            "platforms": [ # The platforms this restriction applies to.
              "A String",
            ],
          },
          "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
              # location.
            "geoCriteriaIds": [ # IDs representing the geo location for this context.
                # Please refer to the
                # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                # file for different geo criteria IDs.
              42,
            ],
          },
          "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
            "auctionTypes": [ # The auction types this restriction applies to.
              "A String",
            ],
          },
        },
      ],
      "status": "A String", # The status of the creative in this context (for example, it has been
          # explicitly disapproved or is pending review).
      "disapprovalReasons": [ # Any disapprovals bound to this restriction.
          # Only present if status=DISAPPROVED.
          # Can be used to filter the response of the
          # creatives.list
          # method.
          # Deprecated; please use
          # disapproval
          # field instead.
        { # Output only. The reason and details for a disapproval.
          "reason": "A String", # The categorized reason for disapproval.
          "details": [ # Additional details about the reason for disapproval.
            "A String",
          ],
        },
      ],
      "disapproval": { # Output only. The reason and details for a disapproval. # Disapproval bound to this restriction.
          # Only present if status=DISAPPROVED.
          # Can be used to filter the response of the
          # creatives.list
          # method.
        "reason": "A String", # The categorized reason for disapproval.
        "details": [ # Additional details about the reason for disapproval.
          "A String",
        ],
      },
    },
  ],
  "declaredClickThroughUrls": [ # The set of declared destination URLs for the creative.
    "A String",
  ],
  "restrictedCategories": [ # All restricted categories for the ads that may be shown from this creative.
    "A String",
  ],
  "corrections": [ # Output only. Shows any corrections that were applied to this creative.
    { # Output only. Shows any corrections that were applied to this creative.
      "contexts": [ # The contexts for the correction.
        { # The serving context for this restriction.
          "all": "A String", # Matches all contexts.
          "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
            "appTypes": [ # The app types this restriction applies to.
              "A String",
            ],
          },
          "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
            "securities": [ # The security types in this context.
              "A String",
            ],
          },
          "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
            "platforms": [ # The platforms this restriction applies to.
              "A String",
            ],
          },
          "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
              # location.
            "geoCriteriaIds": [ # IDs representing the geo location for this context.
                # Please refer to the
                # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                # file for different geo criteria IDs.
              42,
            ],
          },
          "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
            "auctionTypes": [ # The auction types this restriction applies to.
              "A String",
            ],
          },
        },
      ],
      "type": "A String", # The type of correction that was applied to the creative.
      "details": [ # Additional details about what was corrected.
        "A String",
      ],
    },
  ],
  "openAuctionStatus": "A String", # Output only. The top-level open auction status of this creative.
      # If disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in
      # serving_restrictions will also exist. Note
      # that this may be nuanced with other contextual restrictions, in which case,
      # it may be preferable to read from serving_restrictions directly.
      # Can be used to filter the response of the
      # creatives.list
      # method.
}

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

Returns:
  An object of the form:

    { # A creative and its classification data.
    "impressionTrackingUrls": [ # The set of URLs to be called to record an impression.
      "A String",
    ],
    "version": 42, # Output only. The version of this creative.
    "detectedLanguages": [ # Output only. 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.
      "A String",
    ],
    "advertiserName": "A String", # The name of the company being advertised in the creative.
    "clickThroughUrls": [ # The set of destination URLs for the creative.
      "A String",
    ],
    "video": { # Video content for a creative. # A video creative.
      "videoUrl": "A String", # The URL to fetch a video ad.
      "videoVastXml": "A String", # The contents of a VAST document for a video ad.
          # This document should conform to the VAST 2.0 or 3.0 standard.
    },
    "detectedSensitiveCategories": [ # Output only. Detected sensitive categories, if any.
        # 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,
    ],
    "creativeId": "A String", # The buyer-defined creative ID of this creative.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "detectedAdvertiserIds": [ # Output only. Detected advertiser IDs, if any.
      "A String",
    ],
    "adChoicesDestinationUrl": "A String", # The link to AdChoices destination page.
    "native": { # Native content for a creative. # A native creative.
      "body": "A String", # A long description of the ad.
      "videoUrl": "A String", # The URL to fetch a native video ad.
      "headline": "A String", # A short title for the ad.
      "image": { # An image resource. You may provide a larger image than was requested, # A large image.
          # so long as the aspect ratio is preserved.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "clickTrackingUrl": "A String", # The URL to use for click tracking.
      "starRating": 3.14, # The app rating in the app store. Must be in the range [0-5].
      "advertiserName": "A String", # The name of the advertiser or sponsor, to be displayed in the ad creative.
      "priceDisplayText": "A String", # The price of the promoted app including currency info.
      "callToAction": "A String", # A label for the button that the user is supposed to click.
      "logo": { # An image resource. You may provide a larger image than was requested, # A smaller image, for the advertiser's logo.
          # so long as the aspect ratio is preserved.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "appIcon": { # 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.
        "url": "A String", # The URL of the image.
        "width": 42, # Image width in pixels.
        "height": 42, # Image height in pixels.
      },
      "storeUrl": "A String", # The URL to the app store to purchase/download the promoted app.
      "clickLinkUrl": "A String", # The URL that the browser/SDK will load when the user clicks the ad.
    },
    "vendorIds": [ # All vendor IDs for the ads that may be shown from this creative.
        # See https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt
        # for possible values.
      42,
    ],
    "agencyId": "A String", # The agency ID for this creative.
    "html": { # HTML content for a creative. # An HTML creative.
      "snippet": "A String", # The HTML snippet that displays the ad when inserted in the web page.
      "width": 42, # The width of the HTML snippet in pixels.
      "height": 42, # The height of the HTML snippet in pixels.
    },
    "apiUpdateTime": "A String", # Output only. The last update timestamp of the creative via API.
    "accountId": "A String", # The account that this creative belongs to.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "detectedProductCategories": [ # Output only. Detected product categories, if any.
        # See the ad-product-categories.txt file in the technical documentation
        # for a list of IDs.
      42,
    ],
    "adTechnologyProviders": { # Detected ad technology provider information. # Output only. The detected ad technology providers.
      "hasUnidentifiedProvider": 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.
      "detectedProviderIds": [ # 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.
        "A String",
      ],
    },
    "detectedDomains": [ # Output only. The detected domains for this creative.
      "A String",
    ],
    "attributes": [ # All attributes for the ads that may be shown from this creative.
        # Can be used to filter the response of the
        # creatives.list
        # method.
      "A String",
    ],
    "dealsStatus": "A String", # Output only. The top-level deals status of this creative.
        # If disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in
        # serving_restrictions will also exist. Note
        # that this may be nuanced with other contextual restrictions, in which case,
        # it may be preferable to read from serving_restrictions directly.
        # Can be used to filter the response of the
        # creatives.list
        # method.
    "servingRestrictions": [ # Output only. The granular status of this ad in specific contexts.
        # A context here relates to where something ultimately serves (for example,
        # a physical location, a platform, an HTTPS vs HTTP request, or the type
        # of auction).
      { # Output only. A representation of the status of an ad in a
          # specific context. A context here relates to where something ultimately serves
          # (for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,
          # or the type of auction).
        "contexts": [ # The contexts for the restriction.
          { # The serving context for this restriction.
            "all": "A String", # Matches all contexts.
            "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
              "appTypes": [ # The app types this restriction applies to.
                "A String",
              ],
            },
            "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
              "securities": [ # The security types in this context.
                "A String",
              ],
            },
            "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
              "platforms": [ # The platforms this restriction applies to.
                "A String",
              ],
            },
            "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                # location.
              "geoCriteriaIds": [ # IDs representing the geo location for this context.
                  # Please refer to the
                  # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                  # file for different geo criteria IDs.
                42,
              ],
            },
            "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
              "auctionTypes": [ # The auction types this restriction applies to.
                "A String",
              ],
            },
          },
        ],
        "status": "A String", # The status of the creative in this context (for example, it has been
            # explicitly disapproved or is pending review).
        "disapprovalReasons": [ # Any disapprovals bound to this restriction.
            # Only present if status=DISAPPROVED.
            # Can be used to filter the response of the
            # creatives.list
            # method.
            # Deprecated; please use
            # disapproval
            # field instead.
          { # Output only. The reason and details for a disapproval.
            "reason": "A String", # The categorized reason for disapproval.
            "details": [ # Additional details about the reason for disapproval.
              "A String",
            ],
          },
        ],
        "disapproval": { # Output only. The reason and details for a disapproval. # Disapproval bound to this restriction.
            # Only present if status=DISAPPROVED.
            # Can be used to filter the response of the
            # creatives.list
            # method.
          "reason": "A String", # The categorized reason for disapproval.
          "details": [ # Additional details about the reason for disapproval.
            "A String",
          ],
        },
      },
    ],
    "declaredClickThroughUrls": [ # The set of declared destination URLs for the creative.
      "A String",
    ],
    "restrictedCategories": [ # All restricted categories for the ads that may be shown from this creative.
      "A String",
    ],
    "corrections": [ # Output only. Shows any corrections that were applied to this creative.
      { # Output only. Shows any corrections that were applied to this creative.
        "contexts": [ # The contexts for the correction.
          { # The serving context for this restriction.
            "all": "A String", # Matches all contexts.
            "appType": { # Output only. The app type the restriction applies to for mobile device. # Matches impressions for a particular app type.
              "appTypes": [ # The app types this restriction applies to.
                "A String",
              ],
            },
            "securityType": { # Output only. A security context. # Matches impressions for a particular security type.
              "securities": [ # The security types in this context.
                "A String",
              ],
            },
            "platform": { # Output only. The type of platform the restriction applies to. # Matches impressions coming from a particular platform.
              "platforms": [ # The platforms this restriction applies to.
                "A String",
              ],
            },
            "location": { # Output only. The Geo criteria the restriction applies to. # Matches impressions coming from users *or* publishers in a specific
                # location.
              "geoCriteriaIds": [ # IDs representing the geo location for this context.
                  # Please refer to the
                  # [geo-table.csv](https://storage.googleapis.com/adx-rtb-dictionaries/geo-table.csv)
                  # file for different geo criteria IDs.
                42,
              ],
            },
            "auctionType": { # Output only. The auction type the restriction applies to. # Matches impressions for a particular auction type.
              "auctionTypes": [ # The auction types this restriction applies to.
                "A String",
              ],
            },
          },
        ],
        "type": "A String", # The type of correction that was applied to the creative.
        "details": [ # Additional details about what was corrected.
          "A String",
        ],
      },
    ],
    "openAuctionStatus": "A String", # Output only. The top-level open auction status of this creative.
        # If disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in
        # serving_restrictions will also exist. Note
        # that this may be nuanced with other contextual restrictions, in which case,
        # it may be preferable to read from serving_restrictions directly.
        # Can be used to filter the response of the
        # creatives.list
        # method.
  }</pre>
</div>

<div class="method">
    <code class="details" id="watch">watch(accountId, creativeId, body, x__xgafv=None)</code>
  <pre>Watches a creative. Will result in push notifications being sent to the
topic when the creative changes status.

Args:
  accountId: string, The account of the creative to watch. (required)
  creativeId: string, The creative ID to watch for status changes.
Specify "-" to watch all creatives under the above account.
If both creative-level and account-level notifications are
sent, only a single notification will be sent to the
creative-level notification topic. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A request for watching changes to creative Status.
    "topic": "A String", # The Pub/Sub topic to publish notifications to.
        # This topic must already exist and must give permission to
        # ad-exchange-buyside-reports@google.com to write to the topic.
        # This should be the full resource name in
        # "projects/{project_id}/topics/{topic_id}" format.
  }

  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>

</body></html>