<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="displayvideo_v1.html">Display & Video 360 API</a> . <a href="displayvideo_v1.googleAudiences.html">googleAudiences</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="#get">get(googleAudienceId, advertiserId=None, partnerId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a Google audience.</p>
<p class="toc_element">
  <code><a href="#list">list(filter=None, partnerId=None, orderBy=None, pageToken=None, advertiserId=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists Google audiences. The order is defined by the order_by parameter.</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="get">get(googleAudienceId, advertiserId=None, partnerId=None, x__xgafv=None)</code>
  <pre>Gets a Google audience.

Args:
  googleAudienceId: string, Required. The ID of the Google audience to fetch. (required)
  advertiserId: string, The ID of the advertiser that has access to the fetched Google audience.
  partnerId: string, The ID of the partner that has access to the fetched Google audience.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Describes a Google audience resource. Includes Google audience lists.
    &quot;displayName&quot;: &quot;A String&quot;, # Output only. The display name of the Google audience. .
    &quot;googleAudienceId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Google audience. Assigned by the system.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the google audience.
    &quot;googleAudienceType&quot;: &quot;A String&quot;, # Output only. The type of Google audience. .
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(filter=None, partnerId=None, orderBy=None, pageToken=None, advertiserId=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists Google audiences. The order is defined by the order_by parameter.

Args:
  filter: string, Allows filtering by Google audience fields. Supported syntax: * Filter expressions for Google audiences currently can only contain at most one restriction. * A restriction has the form of `{field} {operator} {value}`. * The operator must be `CONTAINS (:)`. * Supported fields: - `displayName` Examples: * All Google audiences for which the display name contains &quot;Google&quot;: `displayName : &quot;Google&quot;`. The length of this field should be no more than 500 characters.
  partnerId: string, The ID of the partner that has access to the fetched Google audiences.
  orderBy: string, Field by which to sort the list. Acceptable values are: * `googleAudienceId` (default) * `displayName` The default sorting order is ascending. To specify descending order for a field, a suffix &quot;desc&quot; should be added to the field name. Example: `displayName desc`.
  pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of next_page_token returned from the previous call to `ListGoogleAudiences` method. If not specified, the first page of results will be returned.
  advertiserId: string, The ID of the advertiser that has access to the fetched Google audiences.
  pageSize: integer, Requested page size. Must be between `1` and `100`. If unspecified will default to `100`. Returns error code `INVALID_ARGUMENT` if an invalid value is specified.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;googleAudiences&quot;: [ # The list of Google audiences. This list will be absent if empty.
      { # Describes a Google audience resource. Includes Google audience lists.
        &quot;displayName&quot;: &quot;A String&quot;, # Output only. The display name of the Google audience. .
        &quot;googleAudienceId&quot;: &quot;A String&quot;, # Output only. The unique ID of the Google audience. Assigned by the system.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the google audience.
        &quot;googleAudienceType&quot;: &quot;A String&quot;, # Output only. The type of Google audience. .
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass this value in the page_token field in the subsequent call to `ListGoogleAudiences` method to retrieve the next page of results.
  }</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>