<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.finalizedProposals.html">finalizedProposals</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(accountId, pageSize=None, pageToken=None, x__xgafv=None, filterSyntax=None, filter=None)</a></code></p>
<p class="firstline">List finalized proposals, regardless if a proposal is being renegotiated.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(accountId, pageSize=None, pageToken=None, x__xgafv=None, filterSyntax=None, filter=None)</code>
  <pre>List finalized proposals, regardless if a proposal is being renegotiated.
A filter expression (PQL query) may be specified to filter the results.
The notes will not be returned.

Args:
  accountId: string, Account ID of the buyer. (required)
  pageSize: integer, Requested page size. The server may return fewer results than requested.
If unspecified, the server will pick an appropriate default.
  pageToken: string, The page token as returned from ListProposalsResponse.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  filterSyntax: string, Syntax the filter is written in. Current implementation defaults to PQL
but in the future it will be LIST_FILTER.
  filter: string, An optional PQL filter query used to query for proposals.

Nested repeated fields, such as proposal.deals.targetingCriterion,
cannot be filtered.

Returns:
  An object of the form:

    { # Response message for listing proposals.
    "nextPageToken": "A String", # Continuation token for fetching the next page of results.
    "proposals": [ # The list of proposals.
      { # Note: this resource requires whitelisting for access. Please contact your
          # account manager for access to Marketplace resources.
          #
          # Represents a proposal in the Marketplace. A proposal is the unit of
          # negotiation between a seller and a buyer and contains deals which
          # are served.
          #
          # Note: you can not update, create, or otherwise modify Private
          # Auction or Preferred Deals deals through the API.
          #
          # Fields are updatable unless noted otherwise.
        "sellerContacts": [ # Output only. Contact information for the seller.
          { # Contains information on how a buyer or seller can be reached.
            "email": "A String", # Email address for the contact.
            "name": "A String", # The name of the contact.
          },
        ],
        "updateTime": "A String", # Output only. The time when the proposal was last revised.
        "proposalState": "A String", # Output only. The current state of the proposal.
        "proposalRevision": "A String", # Output only. The revision number for the proposal.
            # Each update to the proposal or the deal causes the proposal revision number
            # to auto-increment. The buyer keeps track of the last revision number they
            # know of and pass it in when making an update. If the head revision number
            # on the server has since incremented, then an ABORTED error is returned
            # during the update operation to let the buyer know that a subsequent update
            # was made.
        "buyerPrivateData": { # Buyers are allowed to store certain types of private data in a proposal/deal. # Private data for buyer. (hidden from seller).
          "referenceId": "A String", # A buyer or seller specified reference ID. This can be queried in the list
              # operations (max-length: 1024 unicode code units).
        },
        "privateAuctionId": "A String", # Output only. Private auction ID if this proposal is a private auction
            # proposal.
        "billedBuyer": { # Represents a buyer of inventory. Each buyer is identified by a unique # Output only. Reference to the buyer that will get billed for this proposal.
            # Authorized Buyers account ID.
          "accountId": "A String", # Authorized Buyers account ID of the buyer.
        },
        "originatorRole": "A String", # Output only. Indicates whether the buyer/seller created the proposal.
        "seller": { # Represents a seller of inventory. Each seller is identified by a unique # Reference to the seller on the proposal.
            #
            # Note: This field may be set only when creating the resource. Modifying
            # this field while updating the resource will result in an error.
            # Ad Manager account ID.
          "subAccountId": "A String", # Optional sub-account ID for the seller.
          "accountId": "A String", # The unique ID for the seller. The seller fills in this field.
              # The seller account ID is then available to buyer in the product.
        },
        "deals": [ # The deals associated with this proposal. For Private Auction proposals
            # (whose deals have NonGuaranteedAuctionTerms), there will only be one deal.
          { # A deal represents a segment of inventory for displaying ads on.
              # A proposal can contain multiple deals. A deal contains the terms and
              # targeting information that is used for serving.
            "updateTime": "A String", # Output only. The time when the deal was last updated.
            "createProductRevision": "A String", # Optional revision number of the product that the deal was created from.
                # If present on create, and the server `product_revision` has advanced sinced
                # the passed-in `create_product_revision`, an `ABORTED` error will be
                # returned.
                #
                # Note: This field may be set only when creating the resource. Modifying
                # this field while updating the resource will result in an error.
            "sellerContacts": [ # Output only. Seller contact information for the deal.
              { # Contains information on how a buyer or seller can be reached.
                "email": "A String", # Email address for the contact.
                "name": "A String", # The name of the contact.
              },
            ],
            "availableStartTime": "A String", # Optional proposed flight start time of the deal.
                # This will generally be stored in the granularity of one second since deal
                # serving starts at seconds boundary. Any time specified with more
                # granularity (e.g., in milliseconds) will be truncated towards the start of
                # time in seconds.
            "availableEndTime": "A String", # Proposed flight end time of the deal.
                # This will generally be stored in a granularity of a second.
                # A value is not required for Private Auction deals or Preferred Deals.
            "creativeRestrictions": { # Represents creative restrictions associated to Programmatic Guaranteed/ # Output only. Restricitions about the creatives associated with the deal
                # (i.e., size) This is available for Programmatic Guaranteed/Preferred Deals
                # in Ad Manager.
                # Preferred Deal in Ad Manager.
                # This doesn't apply to Private Auction and AdX Preferred Deals.
              "creativeFormat": "A String", # The format of the environment that the creatives will be displayed in.
              "skippableAdType": "A String", # Skippable video ads allow viewers to skip ads after 5 seconds.
              "creativeSpecifications": [
                { # Represents information for a creative that is associated with a Programmatic
                    # Guaranteed/Preferred Deal in Ad Manager.
                  "creativeSize": { # Represents size of a single ad slot, or a creative. # The size of the creative.
                    "width": "A String", # The width of the ad slot in pixels.
                        # This field will be present only when size type is `PIXEL`.
                    "sizeType": "A String", # The size type of the ad slot.
                    "height": "A String", # The height of the ad slot in pixels.
                        # This field will be present only when size type is `PIXEL`.
                  },
                  "creativeCompanionSizes": [ # Companion sizes may be filled in only when this is a video creative.
                    { # Represents size of a single ad slot, or a creative.
                      "width": "A String", # The width of the ad slot in pixels.
                          # This field will be present only when size type is `PIXEL`.
                      "sizeType": "A String", # The size type of the ad slot.
                      "height": "A String", # The height of the ad slot in pixels.
                          # This field will be present only when size type is `PIXEL`.
                    },
                  ],
                },
              ],
            },
            "targeting": { # Targeting represents different criteria that can be used by advertisers to # Output only. Specifies the subset of inventory targeted by the deal.
                # target ad inventory. For example, they can choose to target ad requests only
                # if the user is in the US.
                # Multiple types of targeting are always applied as a logical AND, unless noted
                # otherwise.
              "videoTargeting": { # Represents targeting information about video. # Video targeting information.
                "excludedPositionTypes": [ # A list of video positions to be excluded.
                    # Position types can either be included or excluded (XOR).
                  "A String",
                ],
                "targetedPositionTypes": [ # A list of video positions to be included.
                    # When the included list is present, the excluded list must be empty.
                    # When the excluded list is present, the included list must be empty.
                  "A String",
                ],
              },
              "technologyTargeting": { # Represents targeting about various types of technology. # Technology targeting information, e.g., operating system, device category.
                "deviceCategoryTargeting": { # Generic targeting used for targeting dimensions that contains a list of # IDs of device categories to be included/excluded.
                    # included and excluded numeric IDs.
                  "targetedCriteriaIds": [ # A list of numeric IDs to be included.
                    "A String",
                  ],
                  "excludedCriteriaIds": [ # A list of numeric IDs to be excluded.
                    "A String",
                  ],
                },
                "operatingSystemTargeting": { # Represents targeting information for operating systems. # Operating system related targeting information.
                  "operatingSystemCriteria": { # Generic targeting used for targeting dimensions that contains a list of # IDs of operating systems to be included/excluded.
                      # included and excluded numeric IDs.
                    "targetedCriteriaIds": [ # A list of numeric IDs to be included.
                      "A String",
                    ],
                    "excludedCriteriaIds": [ # A list of numeric IDs to be excluded.
                      "A String",
                    ],
                  },
                  "operatingSystemVersionCriteria": { # Generic targeting used for targeting dimensions that contains a list of # IDs of operating system versions to be included/excluded.
                      # included and excluded numeric IDs.
                    "targetedCriteriaIds": [ # A list of numeric IDs to be included.
                      "A String",
                    ],
                    "excludedCriteriaIds": [ # A list of numeric IDs to be excluded.
                      "A String",
                    ],
                  },
                },
                "deviceCapabilityTargeting": { # Generic targeting used for targeting dimensions that contains a list of # IDs of device capabilities to be included/excluded.
                    # included and excluded numeric IDs.
                  "targetedCriteriaIds": [ # A list of numeric IDs to be included.
                    "A String",
                  ],
                  "excludedCriteriaIds": [ # A list of numeric IDs to be excluded.
                    "A String",
                  ],
                },
              },
              "geoTargeting": { # Generic targeting used for targeting dimensions that contains a list of # Geo criteria IDs to be included/excluded.
                  # included and excluded numeric IDs.
                "targetedCriteriaIds": [ # A list of numeric IDs to be included.
                  "A String",
                ],
                "excludedCriteriaIds": [ # A list of numeric IDs to be excluded.
                  "A String",
                ],
              },
              "placementTargeting": { # Represents targeting about where the ads can appear, e.g., certain sites or # Placement targeting information, e.g., URL, mobile applications.
                  # mobile applications.
                  # Different placement targeting types will be logically OR'ed.
                "urlTargeting": { # Represents a list of targeted and excluded URLs (e.g., google.com). # URLs to be included/excluded.
                    # For Private Auction and AdX Preferred Deals, URLs are either included or
                    # excluded.
                    # For Programmatic Guaranteed and Preferred Deals, this doesn't
                    # apply.
                  "excludedUrls": [ # A list of URLs to be excluded.
                    "A String",
                  ],
                  "targetedUrls": [ # A list of URLs to be included.
                    "A String",
                  ],
                },
                "mobileApplicationTargeting": { # Mobile application targeting settings. # Mobile application targeting information in a deal.
                    # This doesn't apply to Auction Packages.
                  "firstPartyTargeting": { # Represents a list of targeted and excluded mobile application IDs that # Publisher owned apps to be targeted or excluded by the publisher to
                      # display the ads in.
                      # publishers own.
                      # Mobile application IDs are from App Store and Google Play Store.
                      # Android App ID, for example, com.google.android.apps.maps, can be found in
                      # Google Play Store URL.
                      # iOS App ID (which is a number) can be found at the end of iTunes store URL.
                      # First party mobile applications is either included or excluded.
                    "excludedAppIds": [ # A list of application IDs to be excluded.
                      "A String",
                    ],
                    "targetedAppIds": [ # A list of application IDs to be included.
                      "A String",
                    ],
                  },
                },
              },
              "inventorySizeTargeting": { # Represents the size of an ad unit that can be targeted on an ad # Inventory sizes to be included/excluded.
                  # request. It only applies to Private Auction, AdX Preferred Deals and
                  # Auction Packages. This targeting does not apply to Programmatic Guaranteed
                  # and Preferred Deals in Ad Manager.
                "targetedInventorySizes": [ # A list of inventory sizes to be included.
                  { # Represents size of a single ad slot, or a creative.
                    "width": "A String", # The width of the ad slot in pixels.
                        # This field will be present only when size type is `PIXEL`.
                    "sizeType": "A String", # The size type of the ad slot.
                    "height": "A String", # The height of the ad slot in pixels.
                        # This field will be present only when size type is `PIXEL`.
                  },
                ],
                "excludedInventorySizes": [ # A list of inventory sizes to be excluded.
                  { # Represents size of a single ad slot, or a creative.
                    "width": "A String", # The width of the ad slot in pixels.
                        # This field will be present only when size type is `PIXEL`.
                    "sizeType": "A String", # The size type of the ad slot.
                    "height": "A String", # The height of the ad slot in pixels.
                        # This field will be present only when size type is `PIXEL`.
                  },
                ],
              },
            },
            "createProductId": "A String", # The product ID from which this deal was created.
                #
                # Note: This field may be set only when creating the resource. Modifying
                # this field while updating the resource will result in an error.
            "webPropertyCode": "A String", # The web property code for the seller copied over from the product.
            "proposalId": "A String", # Output only. ID of the proposal that this deal is part of.
            "deliveryControl": { # Message contains details about how the deals will be paced. # The set of fields around delivery control that are interesting for a buyer
                # to see but are non-negotiable. These are set by the publisher.
              "frequencyCaps": [ # Output only. Specifies any frequency caps.
                { # Frequency cap.
                  "numTimeUnits": 42, # The amount of time, in the units specified by time_unit_type. Defines the
                      # amount of time over which impressions per user are counted and capped.
                  "timeUnitType": "A String", # The time unit. Along with num_time_units defines the amount of time over
                      # which impressions per user are counted and capped.
                  "maxImpressions": 42, # The maximum number of impressions that can be served to a user within the
                      # specified time period.
                },
              ],
              "creativeBlockingLevel": "A String", # Output only. Specified the creative blocking levels to be applied.
              "deliveryRateType": "A String", # Output only. Specifies how the impression delivery will be paced.
            },
            "description": "A String", # Description for the deal terms.
            "dealId": "A String", # Output only. A unique deal ID for the deal (server-assigned).
            "creativeSafeFrameCompatibility": "A String", # Output only. Specifies whether the creative is safeFrame compatible.
            "creativePreApprovalPolicy": "A String", # Output only. Specifies the creative pre-approval policy.
            "externalDealId": "A String", # Output only. The external deal ID assigned to this deal once the deal is
                # finalized. This is the deal ID that shows up in serving/reporting etc.
            "createTime": "A String", # Output only. The time of the deal creation.
            "dealTerms": { # The deal terms specify the details of a Product/deal. They specify things # The negotiable terms of the deal.
                # like price per buyer, the type of pricing model (e.g., fixed price, auction)
                # and expected impressions from the publisher.
              "description": "A String", # Publisher provided description for the terms.
              "guaranteedFixedPriceTerms": { # Terms for Programmatic Guaranteed Deals. # The terms for guaranteed fixed price deals.
                "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage
                    # of guaranteed looks that the buyer is guaranteeing to buy.
                "fixedPrices": [ # Fixed price for the specified buyer.
                  { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in
                      # a product can become 0 or 1 deals. To check if there is a PricePerBuyer for
                      # a particular buyer or buyer/advertiser pair, we look for the most specific
                      # matching rule - we first look for a rule matching the buyer and advertiser,
                      # next a rule with the buyer but an empty advertiser list, and otherwise look
                      # for a matching rule where no buyer is set.
                    "buyer": { # Represents a buyer of inventory. Each buyer is identified by a unique # The buyer who will pay this price. If unset, all buyers can pay this price
                        # (if the
                        # advertisers match, and there's no more specific rule matching the buyer).
                        # Authorized Buyers account ID.
                      "accountId": "A String", # Authorized Buyers account ID of the buyer.
                    },
                    "advertiserIds": [ # The list of advertisers for this price when associated with this buyer.
                        # If empty, all advertisers with this buyer pay this price.
                      "A String",
                    ],
                    "price": { # Represents a price and a pricing type for a product / deal. # The specified price.
                      "pricingType": "A String", # The pricing type for the deal/product. (default: CPM)
                      "amount": { # Represents an amount of money with its currency type. # The actual price with currency specified.
                        "nanos": 42, # Number of nano (10^-9) units of the amount.
                            # The value must be between -999,999,999 and +999,999,999 inclusive.
                            # If `units` is positive, `nanos` must be positive or zero.
                            # If `units` is zero, `nanos` can be positive, zero, or negative.
                            # If `units` is negative, `nanos` must be negative or zero.
                            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                        "units": "A String", # The whole units of the amount.
                            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                      },
                    },
                  },
                ],
                "minimumDailyLooks": "A String", # Daily minimum looks for CPD deal types.
                "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
              },
              "sellerTimeZone": "A String", # The time zone name. For deals with Cost Per Day billing, defines the
                  # time zone used to mark the boundaries of a day. It should be an
                  # IANA TZ name, such as "America/Los_Angeles". For more information,
                  # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
              "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day.
                  # Can be set by buyer or seller.
              "nonGuaranteedFixedPriceTerms": { # Terms for Preferred Deals. Note that Preferred Deals cannot be created via # The terms for non-guaranteed fixed price deals.
                  # the API at this time, but can be returned in a get or list request.
                "fixedPrices": [ # Fixed price for the specified buyer.
                  { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in
                      # a product can become 0 or 1 deals. To check if there is a PricePerBuyer for
                      # a particular buyer or buyer/advertiser pair, we look for the most specific
                      # matching rule - we first look for a rule matching the buyer and advertiser,
                      # next a rule with the buyer but an empty advertiser list, and otherwise look
                      # for a matching rule where no buyer is set.
                    "buyer": { # Represents a buyer of inventory. Each buyer is identified by a unique # The buyer who will pay this price. If unset, all buyers can pay this price
                        # (if the
                        # advertisers match, and there's no more specific rule matching the buyer).
                        # Authorized Buyers account ID.
                      "accountId": "A String", # Authorized Buyers account ID of the buyer.
                    },
                    "advertiserIds": [ # The list of advertisers for this price when associated with this buyer.
                        # If empty, all advertisers with this buyer pay this price.
                      "A String",
                    ],
                    "price": { # Represents a price and a pricing type for a product / deal. # The specified price.
                      "pricingType": "A String", # The pricing type for the deal/product. (default: CPM)
                      "amount": { # Represents an amount of money with its currency type. # The actual price with currency specified.
                        "nanos": 42, # Number of nano (10^-9) units of the amount.
                            # The value must be between -999,999,999 and +999,999,999 inclusive.
                            # If `units` is positive, `nanos` must be positive or zero.
                            # If `units` is zero, `nanos` can be positive, zero, or negative.
                            # If `units` is negative, `nanos` must be negative or zero.
                            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                        "units": "A String", # The whole units of the amount.
                            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                      },
                    },
                  },
                ],
              },
              "estimatedGrossSpend": { # Represents a price and a pricing type for a product / deal. # Non-binding estimate of the estimated gross spend for this deal.
                  # Can be set by buyer or seller.
                "pricingType": "A String", # The pricing type for the deal/product. (default: CPM)
                "amount": { # Represents an amount of money with its currency type. # The actual price with currency specified.
                  "nanos": 42, # Number of nano (10^-9) units of the amount.
                      # The value must be between -999,999,999 and +999,999,999 inclusive.
                      # If `units` is positive, `nanos` must be positive or zero.
                      # If `units` is zero, `nanos` can be positive, zero, or negative.
                      # If `units` is negative, `nanos` must be negative or zero.
                      # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                  "units": "A String", # The whole units of the amount.
                      # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                  "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                },
              },
              "nonGuaranteedAuctionTerms": { # Terms for Private Auctions. Note that Private Auctions can be created only # The terms for non-guaranteed auction deals.
                  # by the seller, but they can be returned in a get or list request.
                "reservePricesPerBuyer": [ # Reserve price for the specified buyer.
                  { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in
                      # a product can become 0 or 1 deals. To check if there is a PricePerBuyer for
                      # a particular buyer or buyer/advertiser pair, we look for the most specific
                      # matching rule - we first look for a rule matching the buyer and advertiser,
                      # next a rule with the buyer but an empty advertiser list, and otherwise look
                      # for a matching rule where no buyer is set.
                    "buyer": { # Represents a buyer of inventory. Each buyer is identified by a unique # The buyer who will pay this price. If unset, all buyers can pay this price
                        # (if the
                        # advertisers match, and there's no more specific rule matching the buyer).
                        # Authorized Buyers account ID.
                      "accountId": "A String", # Authorized Buyers account ID of the buyer.
                    },
                    "advertiserIds": [ # The list of advertisers for this price when associated with this buyer.
                        # If empty, all advertisers with this buyer pay this price.
                      "A String",
                    ],
                    "price": { # Represents a price and a pricing type for a product / deal. # The specified price.
                      "pricingType": "A String", # The pricing type for the deal/product. (default: CPM)
                      "amount": { # Represents an amount of money with its currency type. # The actual price with currency specified.
                        "nanos": 42, # Number of nano (10^-9) units of the amount.
                            # The value must be between -999,999,999 and +999,999,999 inclusive.
                            # If `units` is positive, `nanos` must be positive or zero.
                            # If `units` is zero, `nanos` can be positive, zero, or negative.
                            # If `units` is negative, `nanos` must be negative or zero.
                            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                        "units": "A String", # The whole units of the amount.
                            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                      },
                    },
                  },
                ],
                "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers
                    # in this private auction.
              },
              "brandingType": "A String", # Visibility of the URL in bid requests. (default: BRANDED)
            },
            "programmaticCreativeSource": "A String", # Output only. Specifies the creative source for programmatic deals.
                # PUBLISHER means creative is provided by seller and ADVERTISER means
                # creative is provided by buyer.
            "displayName": "A String", # The name of the deal.
            "buyerPrivateData": { # Buyers are allowed to store certain types of private data in a proposal/deal. # Buyer private data (hidden from seller).
              "referenceId": "A String", # A buyer or seller specified reference ID. This can be queried in the list
                  # operations (max-length: 1024 unicode code units).
            },
            "syndicationProduct": "A String", # The syndication product associated with the deal.
                #
                # Note: This field may be set only when creating the resource. Modifying
                # this field while updating the resource will result in an error.
            "targetingCriterion": [ # The shared targeting visible to buyers and sellers. Each shared
                # targeting entity is AND'd together.
              { # Advertisers can target different attributes of an ad slot. For example,
                  # they can choose to show ads only if the user is in the U.S. Such
                  # targeting criteria can be specified as part of Shared Targeting.
                "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd
                    # together.
                  { # A polymorphic targeting value used as part of Shared Targeting.
                    "stringValue": "A String", # The string value to include/exclude.
                    "longValue": "A String", # The long value to include/exclude.
                    "creativeSizeValue": { # Specifies the size of the creative. # The creative size value to include/exclude.
                        # Filled in when key = GOOG_CREATIVE_SIZE
                      "companionSizes": [ # For video creatives specifies the sizes of companion ads (if present).
                          # Companion sizes may be filled in only when creative_size_type = VIDEO
                        { # Message depicting the size of the creative. The units of width and
                            # height depend on the type of the targeting.
                          "width": 42, # The width of the creative
                          "height": 42, # The height of the creative.
                        },
                      ],
                      "nativeTemplate": "A String", # Output only. The native template for this creative. It will have a value
                          # only if creative_size_type = CreativeSizeType.NATIVE.
                      "allowedFormats": [ # What formats are allowed by the publisher.
                          # If this repeated field is empty then all formats are allowed.
                          # For example, if this field contains AllowedFormatType.AUDIO then the
                          # publisher only allows an audio ad (without any video).
                        "A String",
                      ],
                      "skippableAdType": "A String", # The type of skippable ad for this creative. It will have a value only if
                          # creative_size_type = CreativeSizeType.VIDEO.
                      "creativeSizeType": "A String", # The creative size type.
                      "size": { # Message depicting the size of the creative. The units of width and # For regular or video creative size type, specifies the size
                          # of the creative
                          # height depend on the type of the targeting.
                        "width": 42, # The width of the creative
                        "height": 42, # The height of the creative.
                      },
                    },
                    "dayPartTargetingValue": { # Specifies the day part targeting criteria. # The daypart targeting to include / exclude.
                        # Filled in when the key is GOOG_DAYPART_TARGETING.
                        # The definition of this targeting is derived from the structure
                        # used by Ad Manager.
                      "dayParts": [ # A list of day part targeting criterion.
                        { # Daypart targeting message that specifies if the ad can be shown
                            # only during certain parts of a day/week.
                          "dayOfWeek": "A String", # The day of the week to target. If unspecified, applicable to all days.
                          "endTime": { # Represents a time of day. The date and time zone are either not significant # The ending time of the day for the ad to show (minute level
                              # granularity). The end time is exclusive. This field is not available
                              # for filtering in PQL queries.
                              # or are specified elsewhere. An API may choose to allow leap seconds. Related
                              # types are google.type.Date and `google.protobuf.Timestamp`.
                            "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
                                # allow the value 60 if it allows leap-seconds.
                            "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
                                # to allow the value "24:00:00" for scenarios like business closing time.
                            "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
                            "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
                          },
                          "startTime": { # Represents a time of day. The date and time zone are either not significant # The starting time of day for the ad to show (minute level granularity).
                              # The start time is inclusive.
                              # This field is not available for filtering in PQL queries.
                              # or are specified elsewhere. An API may choose to allow leap seconds. Related
                              # types are google.type.Date and `google.protobuf.Timestamp`.
                            "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
                                # allow the value 60 if it allows leap-seconds.
                            "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
                                # to allow the value "24:00:00" for scenarios like business closing time.
                            "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
                            "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
                          },
                        },
                      ],
                      "timeZoneType": "A String", # The timezone to use for interpreting the day part targeting.
                    },
                  },
                ],
                "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd
                    # together.
                  { # A polymorphic targeting value used as part of Shared Targeting.
                    "stringValue": "A String", # The string value to include/exclude.
                    "longValue": "A String", # The long value to include/exclude.
                    "creativeSizeValue": { # Specifies the size of the creative. # The creative size value to include/exclude.
                        # Filled in when key = GOOG_CREATIVE_SIZE
                      "companionSizes": [ # For video creatives specifies the sizes of companion ads (if present).
                          # Companion sizes may be filled in only when creative_size_type = VIDEO
                        { # Message depicting the size of the creative. The units of width and
                            # height depend on the type of the targeting.
                          "width": 42, # The width of the creative
                          "height": 42, # The height of the creative.
                        },
                      ],
                      "nativeTemplate": "A String", # Output only. The native template for this creative. It will have a value
                          # only if creative_size_type = CreativeSizeType.NATIVE.
                      "allowedFormats": [ # What formats are allowed by the publisher.
                          # If this repeated field is empty then all formats are allowed.
                          # For example, if this field contains AllowedFormatType.AUDIO then the
                          # publisher only allows an audio ad (without any video).
                        "A String",
                      ],
                      "skippableAdType": "A String", # The type of skippable ad for this creative. It will have a value only if
                          # creative_size_type = CreativeSizeType.VIDEO.
                      "creativeSizeType": "A String", # The creative size type.
                      "size": { # Message depicting the size of the creative. The units of width and # For regular or video creative size type, specifies the size
                          # of the creative
                          # height depend on the type of the targeting.
                        "width": 42, # The width of the creative
                        "height": 42, # The height of the creative.
                      },
                    },
                    "dayPartTargetingValue": { # Specifies the day part targeting criteria. # The daypart targeting to include / exclude.
                        # Filled in when the key is GOOG_DAYPART_TARGETING.
                        # The definition of this targeting is derived from the structure
                        # used by Ad Manager.
                      "dayParts": [ # A list of day part targeting criterion.
                        { # Daypart targeting message that specifies if the ad can be shown
                            # only during certain parts of a day/week.
                          "dayOfWeek": "A String", # The day of the week to target. If unspecified, applicable to all days.
                          "endTime": { # Represents a time of day. The date and time zone are either not significant # The ending time of the day for the ad to show (minute level
                              # granularity). The end time is exclusive. This field is not available
                              # for filtering in PQL queries.
                              # or are specified elsewhere. An API may choose to allow leap seconds. Related
                              # types are google.type.Date and `google.protobuf.Timestamp`.
                            "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
                                # allow the value 60 if it allows leap-seconds.
                            "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
                                # to allow the value "24:00:00" for scenarios like business closing time.
                            "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
                            "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
                          },
                          "startTime": { # Represents a time of day. The date and time zone are either not significant # The starting time of day for the ad to show (minute level granularity).
                              # The start time is inclusive.
                              # This field is not available for filtering in PQL queries.
                              # or are specified elsewhere. An API may choose to allow leap seconds. Related
                              # types are google.type.Date and `google.protobuf.Timestamp`.
                            "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
                                # allow the value 60 if it allows leap-seconds.
                            "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
                                # to allow the value "24:00:00" for scenarios like business closing time.
                            "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
                            "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
                          },
                        },
                      ],
                      "timeZoneType": "A String", # The timezone to use for interpreting the day part targeting.
                    },
                  },
                ],
                "key": "A String", # The key representing the shared targeting criterion.
                    # Targeting criteria defined by Google ad servers will begin with GOOG_.
                    # Third parties may define their own keys.
                    # A list of permissible keys along with the acceptable values will be
                    # provided as part of the external documentation.
              },
            ],
            "dealServingMetadata": { # Message captures metadata about the serving status of a deal. # Output only. Metadata about the serving status of this deal.
              "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. # Output only. Tracks which parties (if any) have paused a deal.
                  # The deal is considered paused if either hasBuyerPaused or
                  # hasSellPaused is true.
                "hasSellerPaused": True or False, # True, if the seller has paused the deal unilaterally.
                "buyerPauseReason": "A String", # The buyer's reason for pausing, if the buyer paused the deal.
                "sellerPauseReason": "A String", # The seller's reason for pausing, if the seller paused the deal.
                "hasBuyerPaused": True or False, # True, if the buyer has paused the deal unilaterally.
                "firstPausedBy": "A String", # The role of the person who first paused this deal.
              },
            },
            "isSetupComplete": True or False, # Output only. True, if the buyside inventory setup is complete for this
                # deal.
          },
        ],
        "proposalId": "A String", # Output only. The unique ID of the proposal.
        "displayName": "A String", # The name for the proposal.
        "isRenegotiating": True or False, # Output only. True if the proposal is being renegotiated.
        "buyer": { # Represents a buyer of inventory. Each buyer is identified by a unique # Reference to the buyer on the proposal.
            #
            # Note: This field may be set only when creating the resource. Modifying
            # this field while updating the resource will result in an error.
            # Authorized Buyers account ID.
          "accountId": "A String", # Authorized Buyers account ID of the buyer.
        },
        "isSetupComplete": True or False, # Output only. True, if the buyside inventory setup is complete for this
            # proposal.
        "notes": [ # Output only. The notes associated with this proposal.
          { # A proposal may be associated to several notes.
            "note": "A String", # The actual note to attach.
                # (max-length: 1024 unicode code units)
                #
                # Note: This field may be set only when creating the resource. Modifying
                # this field while updating the resource will result in an error.
            "creatorRole": "A String", # Output only. The role of the person (buyer/seller) creating the note.
            "proposalRevision": "A String", # Output only. The revision number of the proposal when the note is created.
            "createTime": "A String", # Output only. The timestamp for when this note was created.
            "noteId": "A String", # Output only. The unique ID for the note.
          },
        ],
        "lastUpdaterOrCommentorRole": "A String", # Output only. The role of the last user that either updated the proposal or
            # left a comment.
        "buyerContacts": [ # Contact information for the buyer.
          { # Contains information on how a buyer or seller can be reached.
            "email": "A String", # Email address for the contact.
            "name": "A String", # The name of the contact.
          },
        ],
      },
    ],
  }</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>

</body></html>