<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_v3.html">Display & Video 360 API</a> . <a href="displayvideo_v3.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="#create">create(advertiserId=None, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a FirstAndThirdPartyAudience. Only supported for the following audience_type: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`</p>
<p class="toc_element">
  <code><a href="#editCustomerMatchMembers">editCustomerMatchMembers(firstAndThirdPartyAudienceId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the member list of a Customer Match audience. Only supported for the following audience_type: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`</p>
<p class="toc_element">
  <code><a href="#get">get(firstAndThirdPartyAudienceId, advertiserId=None, partnerId=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(advertiserId=None, filter=None, orderBy=None, pageSize=None, pageToken=None, partnerId=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()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(firstAndThirdPartyAudienceId, advertiserId=None, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing FirstAndThirdPartyAudience. Only supported for the following audience_type: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`</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="create">create(advertiserId=None, body=None, x__xgafv=None)</code>
  <pre>Creates a FirstAndThirdPartyAudience. Only supported for the following audience_type: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`

Args:
  body: object, The request body.
    The object takes the form of:

{ # 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;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;appId&quot;: &quot;A String&quot;, # The app_id matches with the type of the mobile_device_ids being uploaded. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
  &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
  &quot;audienceType&quot;: &quot;A String&quot;, # The type of the audience.
  &quot;contactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_CONTACT_INFO`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &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;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;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;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;displayName&quot;: &quot;A String&quot;, # The display name of the first and 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;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Whether the audience is a first or third party 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. The set value must be greater than 0 and less than or equal to 540. Only applicable to first party audiences. This field is required if one of the following audience_type is used: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`
  &quot;mobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
  &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.
}

  advertiserId: string, Required. The ID of the advertiser under whom the FirstAndThirdPartyAudience will be created.
  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;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;appId&quot;: &quot;A String&quot;, # The app_id matches with the type of the mobile_device_ids being uploaded. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
  &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
  &quot;audienceType&quot;: &quot;A String&quot;, # The type of the audience.
  &quot;contactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_CONTACT_INFO`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &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;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;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;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;displayName&quot;: &quot;A String&quot;, # The display name of the first and 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;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Whether the audience is a first or third party 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. The set value must be greater than 0 and less than or equal to 540. Only applicable to first party audiences. This field is required if one of the following audience_type is used: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`
  &quot;mobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
  &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.
}</pre>
</div>

<div class="method">
    <code class="details" id="editCustomerMatchMembers">editCustomerMatchMembers(firstAndThirdPartyAudienceId, body=None, x__xgafv=None)</code>
  <pre>Updates the member list of a Customer Match audience. Only supported for the following audience_type: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`

Args:
  firstAndThirdPartyAudienceId: string, Required. The ID of the Customer Match FirstAndThirdPartyAudience whose members will be edited. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for FirstAndThirdPartyAudienceService.EditCustomerMatchMembers.
  &quot;addedContactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the members to be added.
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &quot;addedMobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the members to be added.
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
  &quot;advertiserId&quot;: &quot;A String&quot;, # Required. The ID of the owner advertiser of the updated Customer Match FirstAndThirdPartyAudience.
  &quot;removedContactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the members to be removed.
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &quot;removedMobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the members to be removed.
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
}

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

Returns:
  An object of the form:

    { # The response of FirstAndThirdPartyAudienceService.EditCustomerMatchMembers.
  &quot;firstAndThirdPartyAudienceId&quot;: &quot;A String&quot;, # Required. The ID of the updated Customer Match FirstAndThirdPartyAudience.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(firstAndThirdPartyAudienceId, advertiserId=None, partnerId=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)
  advertiserId: string, The ID of the advertiser that has access to the fetched first and third party audience.
  partnerId: string, The ID of the partner 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;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;appId&quot;: &quot;A String&quot;, # The app_id matches with the type of the mobile_device_ids being uploaded. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
  &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
  &quot;audienceType&quot;: &quot;A String&quot;, # The type of the audience.
  &quot;contactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_CONTACT_INFO`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &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;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;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;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;displayName&quot;: &quot;A String&quot;, # The display name of the first and 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;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Whether the audience is a first or third party 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. The set value must be greater than 0 and less than or equal to 540. Only applicable to first party audiences. This field is required if one of the following audience_type is used: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`
  &quot;mobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
  &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.
}</pre>
</div>

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

Args:
  advertiserId: string, The ID of the advertiser that has access to the fetched first and third party audiences.
  filter: string, Allows filtering by first and third party audience fields. Supported syntax: * Filter expressions for first and third party audiences can only contain at most one restriction. * A restriction has the form of `{field} {operator} {value}`. * All fields must use the `HAS (:)` operator. 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. Reference our [filter `LIST` requests](/display-video/api/guides/how-tos/filters) guide for more information.
  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`.
  pageSize: integer, Requested page size. Must be between `1` and `5000`. If unspecified, this value defaults to `5000`. 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.
  partnerId: string, The ID of the partner 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;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;appId&quot;: &quot;A String&quot;, # The app_id matches with the type of the mobile_device_ids being uploaded. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
      &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
      &quot;audienceType&quot;: &quot;A String&quot;, # The type of the audience.
      &quot;contactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_CONTACT_INFO`
        &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
          &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
          &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
        },
        &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
          { # Contact information defining a Customer Match audience member.
            &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
            &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
              &quot;A String&quot;,
            ],
            &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
            &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
            &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
              &quot;A String&quot;,
            ],
            &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
              &quot;A String&quot;,
            ],
          },
        ],
      },
      &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;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;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;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;displayName&quot;: &quot;A String&quot;, # The display name of the first and 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;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Whether the audience is a first or third party 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. The set value must be greater than 0 and less than or equal to 540. Only applicable to first party audiences. This field is required if one of the following audience_type is used: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`
      &quot;mobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
        &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
          &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
          &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
        },
        &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
          &quot;A String&quot;,
        ],
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
      &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;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()</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>

<div class="method">
    <code class="details" id="patch">patch(firstAndThirdPartyAudienceId, advertiserId=None, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an existing FirstAndThirdPartyAudience. Only supported for the following audience_type: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`

Args:
  firstAndThirdPartyAudienceId: string, Output only. The unique ID of the first and third party audience. Assigned by the system. (required)
  body: object, The request body.
    The object takes the form of:

{ # 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;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;appId&quot;: &quot;A String&quot;, # The app_id matches with the type of the mobile_device_ids being uploaded. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
  &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
  &quot;audienceType&quot;: &quot;A String&quot;, # The type of the audience.
  &quot;contactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_CONTACT_INFO`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &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;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;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;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;displayName&quot;: &quot;A String&quot;, # The display name of the first and 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;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Whether the audience is a first or third party 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. The set value must be greater than 0 and less than or equal to 540. Only applicable to first party audiences. This field is required if one of the following audience_type is used: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`
  &quot;mobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
  &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.
}

  advertiserId: string, Required. The ID of the owner advertiser of the updated FirstAndThirdPartyAudience.
  updateMask: string, Required. The mask to control which fields to update. Updates are only supported for the following fields: * `displayName` * `description` * `membershipDurationDays`
  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;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;appId&quot;: &quot;A String&quot;, # The app_id matches with the type of the mobile_device_ids being uploaded. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
  &quot;audienceSource&quot;: &quot;A String&quot;, # Output only. The source of the audience.
  &quot;audienceType&quot;: &quot;A String&quot;, # The type of the audience.
  &quot;contactInfoList&quot;: { # Wrapper message for a list of contact information defining Customer Match audience members. # Input only. A list of contact information to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_CONTACT_INFO`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in contact_infos. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;contactInfos&quot;: [ # A list of ContactInfo objects defining Customer Match audience members. The size of members after splitting the contact_infos mustn&#x27;t be greater than 500,000.
      { # Contact information defining a Customer Match audience member.
        &quot;countryCode&quot;: &quot;A String&quot;, # Country code of the member. Must also be set with the following fields: * hashed_first_name * hashed_last_name * zip_codes
        &quot;hashedEmails&quot;: [ # A list of SHA256 hashed email of the member. Before hashing, remove all whitespace and make sure the string is all lowercase.
          &quot;A String&quot;,
        ],
        &quot;hashedFirstName&quot;: &quot;A String&quot;, # SHA256 hashed first name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_last_name * zip_codes
        &quot;hashedLastName&quot;: &quot;A String&quot;, # SHA256 hashed last name of the member. Before hashing, remove all whitespace and make sure the string is all lowercase. Must also be set with the following fields: * country_code * hashed_first_name * zip_codes
        &quot;hashedPhoneNumbers&quot;: [ # A list of SHA256 hashed phone numbers of the member. Before hashing, all phone numbers must be formatted using the [E.164 format](//en.wikipedia.org/wiki/E.164) and include the country calling code.
          &quot;A String&quot;,
        ],
        &quot;zipCodes&quot;: [ # A list of zip codes of the member. Must also be set with the following fields: * country_code * hashed_first_name * hashed_last_name
          &quot;A String&quot;,
        ],
      },
    ],
  },
  &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;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;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;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;displayName&quot;: &quot;A String&quot;, # The display name of the first and 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;firstAndThirdPartyAudienceType&quot;: &quot;A String&quot;, # Whether the audience is a first or third party 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. The set value must be greater than 0 and less than or equal to 540. Only applicable to first party audiences. This field is required if one of the following audience_type is used: * `CUSTOMER_MATCH_CONTACT_INFO` * `CUSTOMER_MATCH_DEVICE_ID`
  &quot;mobileDeviceIdList&quot;: { # Wrapper message for a list of mobile device IDs defining Customer Match audience members. # Input only. A list of mobile device IDs to define the initial audience members. Only applicable to audience_type `CUSTOMER_MATCH_DEVICE_ID`
    &quot;consent&quot;: { # User consent status. # Input only. The consent setting for the users in mobile_device_ids. Leaving this field unset indicates that consent is not specified. If ad_user_data or ad_personalization fields are set to `CONSENT_STATUS_DENIED`, the request will return an error.
      &quot;adPersonalization&quot;: &quot;A String&quot;, # Represents consent for ad personalization.
      &quot;adUserData&quot;: &quot;A String&quot;, # Represents consent for ad user data.
    },
    &quot;mobileDeviceIds&quot;: [ # A list of mobile device IDs defining Customer Match audience members. The size of mobile_device_ids mustn&#x27;t be greater than 500,000.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the first and third party audience.
  &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.
}</pre>
</div>

</body></html>