<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.firstAndThirdPartyAudiences.html">firstAndThirdPartyAudiences</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(firstAndThirdPartyAudienceId, partnerId=None, advertiserId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a first and third party audience.</p>
<p class="toc_element">
  <code><a href="#list">list(orderBy=None, partnerId=None, pageSize=None, pageToken=None, filter=None, advertiserId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists first and third party 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(firstAndThirdPartyAudienceId, partnerId=None, advertiserId=None, x__xgafv=None)</code>
  <pre>Gets a first and third party audience.

Args:
  firstAndThirdPartyAudienceId: string, Required. The ID of the first and third party audience to fetch. (required)
  partnerId: string, The ID of the partner that has access to the fetched first and third party audience.
  advertiserId: string, The ID of the advertiser that has access to the fetched first and third party 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 first or third party audience list used for targeting. First party audiences are created via usage of client data. Third party audiences are provided by Third Party data providers and can only be licensed to customers.
    &quot;youtubeAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for YouTube network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
    &quot;displayDesktopAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated desktop audience size in Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
    &quot;displayName&quot;: &quot;A String&quot;, # The display name of the first and third party audience.
    &quot;audienceType&quot;: &quot;A String&quot;, # Output only. The type of the audience.
    &quot;gmailAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for Gmail network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
    &quot;membershipDurationDays&quot;: &quot;A String&quot;, # The duration in days that an entry remains in the audience after the qualifying event. Only applicable to first party audiences.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
    &quot;description&quot;: &quot;A String&quot;, # The user-provided description of the audience. Only applicable to first party audiences.
    &quot;displayAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for the Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only returned in GET request.
    &quot;displayMobileAppAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated mobile app audience size in Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
    &quot;activeDisplayAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for the Display network in the past month. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only returned in GET request.
    &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
    &quot;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Output only. Whether the audience is a first or third party audience.
    &quot;firstAndThirdPartyAudienceId&quot;: &quot;A String&quot;, # Output only. The unique ID of the first and third party audience. Assigned by the system.
    &quot;displayMobileWebAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated mobile web audience size in Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
  }</pre>
</div>

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

Args:
  orderBy: string, Field by which to sort the list. Acceptable values are: * `firstAndThirdPartyAudienceId` (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`.
  partnerId: string, The ID of the partner that has access to the fetched first and third party 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.
  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 `ListFirstAndThirdPartyAudiences` method. If not specified, the first page of results will be returned.
  filter: string, Allows filtering by first and third party audience fields. Supported syntax: * Filter expressions for first and third party 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 first and third party 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.
  advertiserId: string, The ID of the advertiser that has access to the fetched first and third party audiences.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;firstAndThirdPartyAudiences&quot;: [ # The list of first and third party audiences. Audience size properties will not be included. This list will be absent if empty.
      { # Describes a first or third party audience list used for targeting. First party audiences are created via usage of client data. Third party audiences are provided by Third Party data providers and can only be licensed to customers.
        &quot;youtubeAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for YouTube network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
        &quot;displayDesktopAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated desktop audience size in Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
        &quot;displayName&quot;: &quot;A String&quot;, # The display name of the first and third party audience.
        &quot;audienceType&quot;: &quot;A String&quot;, # Output only. The type of the audience.
        &quot;gmailAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for Gmail network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
        &quot;membershipDurationDays&quot;: &quot;A String&quot;, # The duration in days that an entry remains in the audience after the qualifying event. Only applicable to first party audiences.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
        &quot;description&quot;: &quot;A String&quot;, # The user-provided description of the audience. Only applicable to first party audiences.
        &quot;displayAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for the Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only returned in GET request.
        &quot;displayMobileAppAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated mobile app audience size in Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
        &quot;activeDisplayAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated audience size for the Display network in the past month. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only returned in GET request.
        &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
        &quot;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Output only. Whether the audience is a first or third party audience.
        &quot;firstAndThirdPartyAudienceId&quot;: &quot;A String&quot;, # Output only. The unique ID of the first and third party audience. Assigned by the system.
        &quot;displayMobileWebAudienceSize&quot;: &quot;A String&quot;, # Output only. The estimated mobile web audience size in Display network. If the size is less than 1000, the number will be hidden and 0 will be returned due to privacy reasons. Otherwise, the number will be rounded off to two significant digits. Only applicable to first party audiences. Only returned in GET request.
      },
    ],
    &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 `ListFirstAndThirdPartyAudiences` 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>