<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="androiddeviceprovisioning_v1.html">Android Device Provisioning Partner API</a> . <a href="androiddeviceprovisioning_v1.partners.html">partners</a> . <a href="androiddeviceprovisioning_v1.partners.customers.html">customers</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(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a customer for zero-touch enrollment. After the method returns successfully, admin and owner roles can manage devices and EMM configs by calling API methods or using their zero-touch enrollment portal. The customer receives an email that welcomes them to zero-touch enrollment and explains how to sign into the portal.</p>
<p class="toc_element">
  <code><a href="#list">list(partnerId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the customers that are enrolled to the reseller identified by the `partnerId` argument. This list includes customers that the reseller created and customers that enrolled themselves using the portal.</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>
<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(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a customer for zero-touch enrollment. After the method returns successfully, admin and owner roles can manage devices and EMM configs by calling API methods or using their zero-touch enrollment portal. The customer receives an email that welcomes them to zero-touch enrollment and explains how to sign into the portal.

Args:
  parent: string, Required. The parent resource ID in the format `partners/[PARTNER_ID]` that identifies the reseller. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message to create a customer.
  &quot;customer&quot;: { # A reseller, vendor, or customer in the zero-touch reseller and customer APIs. # Required. The company data to populate the new customer. Must contain a value for `companyName` and at least one `owner_email` that&#x27;s associated with a Google Account. The values for `companyId` and `name` must be empty.
    &quot;adminEmails&quot;: [ # Optional. Email address of customer&#x27;s users in the admin role. Each email address must be associated with a Google Account.
      &quot;A String&quot;,
    ],
    &quot;companyId&quot;: &quot;A String&quot;, # Output only. The ID of the company. Assigned by the server.
    &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the company. For example _XYZ Corp_. Displayed to the company&#x27;s employees in the zero-touch enrollment portal.
    &quot;googleWorkspaceAccount&quot;: { # A Google Workspace customer. # Output only. The Google Workspace account associated with this customer. Only used for customer Companies.
      &quot;customerId&quot;: &quot;A String&quot;, # Required. The customer ID.
      &quot;preProvisioningTokens&quot;: [ # Output only. The pre-provisioning tokens previously used to claim devices.
        &quot;A String&quot;,
      ],
    },
    &quot;languageCode&quot;: &quot;A String&quot;, # Input only. The preferred locale of the customer represented as a BCP47 language code. This field is validated on input and requests containing unsupported language codes will be rejected. Supported language codes: Arabic (ar) Chinese (Hong Kong) (zh-HK) Chinese (Simplified) (zh-CN) Chinese (Traditional) (zh-TW) Czech (cs) Danish (da) Dutch (nl) English (UK) (en-GB) English (US) (en-US) Filipino (fil) Finnish (fi) French (fr) German (de) Hebrew (iw) Hindi (hi) Hungarian (hu) Indonesian (id) Italian (it) Japanese (ja) Korean (ko) Norwegian (Bokmal) (no) Polish (pl) Portuguese (Brazil) (pt-BR) Portuguese (Portugal) (pt-PT) Russian (ru) Spanish (es) Spanish (Latin America) (es-419) Swedish (sv) Thai (th) Turkish (tr) Ukrainian (uk) Vietnamese (vi)
    &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name of the company. The resource name is one of the following formats: * `partners/[PARTNER_ID]/customers/[CUSTOMER_ID]` * `partners/[PARTNER_ID]/vendors/[VENDOR_ID]` * `partners/[PARTNER_ID]/vendors/[VENDOR_ID]/customers/[CUSTOMER_ID]` Assigned by the server.
    &quot;ownerEmails&quot;: [ # Required. Input only. Email address of customer&#x27;s users in the owner role. At least one `owner_email` is required. Owners share the same access as admins but can also add, delete, and edit your organization&#x27;s portal users.
      &quot;A String&quot;,
    ],
    &quot;skipWelcomeEmail&quot;: True or False, # Input only. If set to true, welcome email will not be sent to the customer. It is recommended to skip the welcome email if devices will be claimed with additional DEVICE_PROTECTION service, as the customer will receive separate emails at device claim time. This field is ignored if this is not a Zero-touch customer.
    &quot;termsStatus&quot;: &quot;A String&quot;, # Output only. Whether any user from the company has accepted the latest Terms of Service (ToS). See TermsStatus.
  },
}

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

Returns:
  An object of the form:

    { # A reseller, vendor, or customer in the zero-touch reseller and customer APIs.
  &quot;adminEmails&quot;: [ # Optional. Email address of customer&#x27;s users in the admin role. Each email address must be associated with a Google Account.
    &quot;A String&quot;,
  ],
  &quot;companyId&quot;: &quot;A String&quot;, # Output only. The ID of the company. Assigned by the server.
  &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the company. For example _XYZ Corp_. Displayed to the company&#x27;s employees in the zero-touch enrollment portal.
  &quot;googleWorkspaceAccount&quot;: { # A Google Workspace customer. # Output only. The Google Workspace account associated with this customer. Only used for customer Companies.
    &quot;customerId&quot;: &quot;A String&quot;, # Required. The customer ID.
    &quot;preProvisioningTokens&quot;: [ # Output only. The pre-provisioning tokens previously used to claim devices.
      &quot;A String&quot;,
    ],
  },
  &quot;languageCode&quot;: &quot;A String&quot;, # Input only. The preferred locale of the customer represented as a BCP47 language code. This field is validated on input and requests containing unsupported language codes will be rejected. Supported language codes: Arabic (ar) Chinese (Hong Kong) (zh-HK) Chinese (Simplified) (zh-CN) Chinese (Traditional) (zh-TW) Czech (cs) Danish (da) Dutch (nl) English (UK) (en-GB) English (US) (en-US) Filipino (fil) Finnish (fi) French (fr) German (de) Hebrew (iw) Hindi (hi) Hungarian (hu) Indonesian (id) Italian (it) Japanese (ja) Korean (ko) Norwegian (Bokmal) (no) Polish (pl) Portuguese (Brazil) (pt-BR) Portuguese (Portugal) (pt-PT) Russian (ru) Spanish (es) Spanish (Latin America) (es-419) Swedish (sv) Thai (th) Turkish (tr) Ukrainian (uk) Vietnamese (vi)
  &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name of the company. The resource name is one of the following formats: * `partners/[PARTNER_ID]/customers/[CUSTOMER_ID]` * `partners/[PARTNER_ID]/vendors/[VENDOR_ID]` * `partners/[PARTNER_ID]/vendors/[VENDOR_ID]/customers/[CUSTOMER_ID]` Assigned by the server.
  &quot;ownerEmails&quot;: [ # Required. Input only. Email address of customer&#x27;s users in the owner role. At least one `owner_email` is required. Owners share the same access as admins but can also add, delete, and edit your organization&#x27;s portal users.
    &quot;A String&quot;,
  ],
  &quot;skipWelcomeEmail&quot;: True or False, # Input only. If set to true, welcome email will not be sent to the customer. It is recommended to skip the welcome email if devices will be claimed with additional DEVICE_PROTECTION service, as the customer will receive separate emails at device claim time. This field is ignored if this is not a Zero-touch customer.
  &quot;termsStatus&quot;: &quot;A String&quot;, # Output only. Whether any user from the company has accepted the latest Terms of Service (ToS). See TermsStatus.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(partnerId, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the customers that are enrolled to the reseller identified by the `partnerId` argument. This list includes customers that the reseller created and customers that enrolled themselves using the portal.

Args:
  partnerId: string, Required. The ID of the reseller partner. (required)
  pageSize: integer, The maximum number of results to be returned. If not specified or 0, all the records are returned.
  pageToken: string, A token identifying a page of results returned by the server.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message of all customers related to this partner.
  &quot;customers&quot;: [ # List of customers related to this reseller partner.
    { # A reseller, vendor, or customer in the zero-touch reseller and customer APIs.
      &quot;adminEmails&quot;: [ # Optional. Email address of customer&#x27;s users in the admin role. Each email address must be associated with a Google Account.
        &quot;A String&quot;,
      ],
      &quot;companyId&quot;: &quot;A String&quot;, # Output only. The ID of the company. Assigned by the server.
      &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the company. For example _XYZ Corp_. Displayed to the company&#x27;s employees in the zero-touch enrollment portal.
      &quot;googleWorkspaceAccount&quot;: { # A Google Workspace customer. # Output only. The Google Workspace account associated with this customer. Only used for customer Companies.
        &quot;customerId&quot;: &quot;A String&quot;, # Required. The customer ID.
        &quot;preProvisioningTokens&quot;: [ # Output only. The pre-provisioning tokens previously used to claim devices.
          &quot;A String&quot;,
        ],
      },
      &quot;languageCode&quot;: &quot;A String&quot;, # Input only. The preferred locale of the customer represented as a BCP47 language code. This field is validated on input and requests containing unsupported language codes will be rejected. Supported language codes: Arabic (ar) Chinese (Hong Kong) (zh-HK) Chinese (Simplified) (zh-CN) Chinese (Traditional) (zh-TW) Czech (cs) Danish (da) Dutch (nl) English (UK) (en-GB) English (US) (en-US) Filipino (fil) Finnish (fi) French (fr) German (de) Hebrew (iw) Hindi (hi) Hungarian (hu) Indonesian (id) Italian (it) Japanese (ja) Korean (ko) Norwegian (Bokmal) (no) Polish (pl) Portuguese (Brazil) (pt-BR) Portuguese (Portugal) (pt-PT) Russian (ru) Spanish (es) Spanish (Latin America) (es-419) Swedish (sv) Thai (th) Turkish (tr) Ukrainian (uk) Vietnamese (vi)
      &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name of the company. The resource name is one of the following formats: * `partners/[PARTNER_ID]/customers/[CUSTOMER_ID]` * `partners/[PARTNER_ID]/vendors/[VENDOR_ID]` * `partners/[PARTNER_ID]/vendors/[VENDOR_ID]/customers/[CUSTOMER_ID]` Assigned by the server.
      &quot;ownerEmails&quot;: [ # Required. Input only. Email address of customer&#x27;s users in the owner role. At least one `owner_email` is required. Owners share the same access as admins but can also add, delete, and edit your organization&#x27;s portal users.
        &quot;A String&quot;,
      ],
      &quot;skipWelcomeEmail&quot;: True or False, # Input only. If set to true, welcome email will not be sent to the customer. It is recommended to skip the welcome email if devices will be claimed with additional DEVICE_PROTECTION service, as the customer will receive separate emails at device claim time. This field is ignored if this is not a Zero-touch customer.
      &quot;termsStatus&quot;: &quot;A String&quot;, # Output only. Whether any user from the company has accepted the latest Terms of Service (ToS). See TermsStatus.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Omitted if no further results are available.
  &quot;totalSize&quot;: 42, # The total count of items in the list irrespective of pagination.
}</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>

</body></html>