<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.bidders.html">bidders</a> . <a href="adexchangebuyer2_v2beta1.bidders.filterSets.html">filterSets</a> . <a href="adexchangebuyer2_v2beta1.bidders.filterSets.nonBillableWinningBids.html">nonBillableWinningBids</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#list">list(filterSetName, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all reasons for which winning bids were not billable, with the number of bids not billed for each reason.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="list">list(filterSetName, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all reasons for which winning bids were not billable, with the number of bids not billed for each reason.

Args:
  filterSetName: string, Name of the filter set that should be applied to the requested metrics. For example: - For a bidder-level filter set for bidder 123: `bidders/123/filterSets/abc` - For an account-level filter set for the buyer account representing bidder 123: `bidders/123/accounts/123/filterSets/abc` - For an account-level filter set for the child seat buyer account 456 whose bidder is 123: `bidders/123/accounts/456/filterSets/abc` (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, A token identifying a page of results the server should return. Typically, this is the value of ListNonBillableWinningBidsResponse.nextPageToken returned from the previous call to the nonBillableWinningBids.list method.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for listing all reasons for which a buyer was not billed for a winning bid.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass this value in the ListNonBillableWinningBidsRequest.pageToken field in the subsequent call to the nonBillableWinningBids.list method to retrieve the next page of results.
  &quot;nonBillableWinningBidStatusRows&quot;: [ # List of rows, with counts of bids not billed aggregated by reason.
    { # The number of winning bids with the specified dimension values for which the buyer was not billed, as described by the specified status.
      &quot;bidCount&quot;: { # A metric value, with an expected value and a variance; represents a count that may be either exact or estimated (i.e. when sampled). # The number of bids with the specified status.
        &quot;value&quot;: &quot;A String&quot;, # The expected value of the metric.
        &quot;variance&quot;: &quot;A String&quot;, # The variance (i.e. square of the standard deviation) of the metric value. If value is exact, variance is 0. Can be used to calculate margin of error as a percentage of value, using the following formula, where Z is the standard constant that depends on the desired size of the confidence interval (e.g. for 90% confidence interval, use Z = 1.645): marginOfError = 100 * Z * sqrt(variance) / value
      },
      &quot;rowDimensions&quot;: { # A response may include multiple rows, breaking down along various dimensions. Encapsulates the values of all dimensions for a given row. # The values of all dimensions associated with metric values in this row.
        &quot;publisherIdentifier&quot;: &quot;A String&quot;, # The publisher identifier for this row, if a breakdown by [BreakdownDimension.PUBLISHER_IDENTIFIER](https://developers.google.com/authorized-buyers/apis/reference/rest/v2beta1/bidders.accounts.filterSets#FilterSet.BreakdownDimension) was requested.
        &quot;timeInterval&quot;: { # An interval of time, with an absolute start and end. # The time interval that this row represents.
          &quot;endTime&quot;: &quot;A String&quot;, # The timestamp marking the end of the range (exclusive) for which data is included.
          &quot;startTime&quot;: &quot;A String&quot;, # The timestamp marking the start of the range (inclusive) for which data is included.
        },
      },
      &quot;status&quot;: &quot;A String&quot;, # The status specifying why the winning bids were not billed.
    },
  ],
}</pre>
</div>

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

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

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

</body></html>