<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.devices.html">devices</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#claim">claim(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Claims a device for a customer and adds it to zero-touch enrollment. If the</p>
<p class="toc_element">
  <code><a href="#claimAsync">claimAsync(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Claims a batch of devices for a customer asynchronously. Adds the devices</p>
<p class="toc_element">
  <code><a href="#findByIdentifier">findByIdentifier(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Finds devices by hardware identifiers, such as IMEI.</p>
<p class="toc_element">
  <code><a href="#findByIdentifier_next">findByIdentifier_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#findByOwner">findByOwner(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Finds devices claimed for customers. The results only contain devices</p>
<p class="toc_element">
  <code><a href="#findByOwner_next">findByOwner_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a device.</p>
<p class="toc_element">
  <code><a href="#metadata">metadata(metadataOwnerId, deviceId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates reseller metadata associated with the device.</p>
<p class="toc_element">
  <code><a href="#unclaim">unclaim(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Unclaims a device from a customer and removes it from zero-touch</p>
<p class="toc_element">
  <code><a href="#unclaimAsync">unclaimAsync(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Unclaims a batch of devices for a customer asynchronously. Removes the</p>
<p class="toc_element">
  <code><a href="#updateMetadataAsync">updateMetadataAsync(partnerId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the reseller metadata attached to a batch of devices. This method</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="claim">claim(partnerId, body=None, x__xgafv=None)</code>
  <pre>Claims a device for a customer and adds it to zero-touch enrollment. If the
device is already claimed by another customer, the call returns an error.

Args:
  partnerId: string, Required. The ID of the reseller partner. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message to claim a device on behalf of a customer.
    &quot;sectionType&quot;: &quot;A String&quot;, # Required. The section type of the device&#x27;s provisioning record.
    &quot;customerId&quot;: &quot;A String&quot;, # Required. The ID of the customer for whom the device is being claimed.
    &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # Optional. The metadata to attach to the device.
        # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
      &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
    },
    &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # Required. Required. The device identifier of the device to claim.
        # To understand requirements on identifier sets, read
        # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
      &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
          # unique across different device models.
      &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
          # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
          # listed in
          # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
      &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
      &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
          # `android.os.Build.MODEL`. Allowed values are listed in
          # [models](/zero-touch/resources/manufacturer-names#model-names).
    },
  }

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

Returns:
  An object of the form:

    { # Response message containing device id of the claim.
    &quot;deviceName&quot;: &quot;A String&quot;, # The resource name of the device in the format
        # `partners/[PARTNER_ID]/devices/[DEVICE_ID]`.
    &quot;deviceId&quot;: &quot;A String&quot;, # The device ID of the claimed device.
  }</pre>
</div>

<div class="method">
    <code class="details" id="claimAsync">claimAsync(partnerId, body=None, x__xgafv=None)</code>
  <pre>Claims a batch of devices for a customer asynchronously. Adds the devices
to zero-touch enrollment. To learn more, read [Long‑running batch
operations](/zero-touch/guides/how-it-works#operations).

Args:
  partnerId: string, Required. The ID of the reseller partner. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to claim devices asynchronously in batch. Claiming a device adds the
      # device to zero-touch enrollment and shows the device in the customer&#x27;s view
      # of the portal.
    &quot;claims&quot;: [ # Required. A list of device claims.
      { # Identifies one claim request.
        &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # Required. The metadata to attach to the device at claim.
            # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
          &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
        &quot;sectionType&quot;: &quot;A String&quot;, # Required. The section type of the device&#x27;s provisioning record.
        &quot;customerId&quot;: &quot;A String&quot;, # Required. The ID of the customer for whom the device is being claimed.
        &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # Required. Required. Device identifier of the device.
            # To understand requirements on identifier sets, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
          &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
              # unique across different device models.
          &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
              # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
              # listed in
              # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
          &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
          &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
          &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
              # `android.os.Build.MODEL`. Allowed values are listed in
              # [models](/zero-touch/resources/manufacturer-names#model-names).
        },
      },
    ],
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;response&quot;: { # This field will contain a `DevicesLongRunningOperationResponse` object if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;metadata&quot;: { # This field will contain a `DevicesLongRunningOperationMetadata` object if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # This field will always be not set if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`. In this case, error information for each device is set in `response.perDeviceStatus.result.status`.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="findByIdentifier">findByIdentifier(partnerId, body=None, x__xgafv=None)</code>
  <pre>Finds devices by hardware identifiers, such as IMEI.

Args:
  partnerId: string, Required. The ID of the reseller partner. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to find devices.
    &quot;limit&quot;: &quot;A String&quot;, # Required. The maximum number of devices to show in a page of results. Must
        # be between 1 and 100 inclusive.
    &quot;pageToken&quot;: &quot;A String&quot;, # A token specifying which result page to return.
    &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # Required. Required. The device identifier to search for.
        # To understand requirements on identifier sets, read
        # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
      &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
          # unique across different device models.
      &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
          # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
          # listed in
          # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
      &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
      &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
          # `android.os.Build.MODEL`. Allowed values are listed in
          # [models](/zero-touch/resources/manufacturer-names#model-names).
    },
  }

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

Returns:
  An object of the form:

    { # Response containing found devices.
    &quot;devices&quot;: [ # Found devices.
      { # An Android device registered for zero-touch enrollment.
        &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # The metadata attached to the device. Structured as key-value pairs. To
            # learn more, read [Device
            # metadata](https://developers.google.com/zero-touch/guides/metadata).
            # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
          &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
        &quot;deviceId&quot;: &quot;A String&quot;, # Output only. The ID of the device. Assigned by the server.
        &quot;configuration&quot;: &quot;A String&quot;, # Not available to resellers.
        &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs that identify a manufactured device. To learn more, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
            # To understand requirements on identifier sets, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
          &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
              # unique across different device models.
          &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
              # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
              # listed in
              # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
          &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
          &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
          &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
              # `android.os.Build.MODEL`. Allowed values are listed in
              # [models](/zero-touch/resources/manufacturer-names#model-names).
        },
        &quot;claims&quot;: [ # Output only. The provisioning claims for a device. Devices claimed for
            # zero-touch enrollment have a claim with the type `SECTION_TYPE_ZERO_TOUCH`.
            # Call
            # `partners.devices.unclaim`
            # or
            # `partners.devices.unclaimAsync`
            # to remove the device from zero-touch enrollment.
          { # A record of a device claimed by a reseller for a customer. Devices claimed
              # for zero-touch enrollment have a claim with the type
              # `SECTION_TYPE_ZERO_TOUCH`. To learn more, read
              # [Claim devices for customers](/zero-touch/guides/how-it-works#claim).
            &quot;vacationModeStartTime&quot;: &quot;A String&quot;, # The timestamp when the device was put into ‘vacation mode’. This value is
                # present iff the device is in &#x27;vacation mode&#x27;.
            &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of claim made on the device.
            &quot;vacationModeExpireTime&quot;: &quot;A String&quot;, # The timestamp when the device will exit ‘vacation mode’. This value is
                # present iff the device is in &#x27;vacation mode&#x27;.
            &quot;resellerId&quot;: &quot;A String&quot;, # The ID of the reseller that claimed the device.
            &quot;ownerCompanyId&quot;: &quot;A String&quot;, # The ID of the Customer that purchased the device.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
            # `partners/[PARTNER_ID]/devices/[DEVICE_ID]`. Assigned by the server.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token used to access 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="findByIdentifier_next">findByIdentifier_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>

<div class="method">
    <code class="details" id="findByOwner">findByOwner(partnerId, body=None, x__xgafv=None)</code>
  <pre>Finds devices claimed for customers. The results only contain devices
registered to the reseller that&#x27;s identified by the `partnerId` argument.
The customer&#x27;s devices purchased from other resellers don&#x27;t appear in the
results.

Args:
  partnerId: string, Required. The ID of the reseller partner. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to find devices by customers.
    &quot;customerId&quot;: [ # Required. The list of customer IDs to search for.
      &quot;A String&quot;,
    ],
    &quot;limit&quot;: &quot;A String&quot;, # Required. The maximum number of devices to show in a page of results. Must
        # be between 1 and 100 inclusive.
    &quot;sectionType&quot;: &quot;A String&quot;, # Required. The section type of the device&#x27;s provisioning record.
    &quot;pageToken&quot;: &quot;A String&quot;, # A token specifying which result page to return.
  }

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

Returns:
  An object of the form:

    { # Response containing found devices.
    &quot;devices&quot;: [ # The customer&#x27;s devices.
      { # An Android device registered for zero-touch enrollment.
        &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # The metadata attached to the device. Structured as key-value pairs. To
            # learn more, read [Device
            # metadata](https://developers.google.com/zero-touch/guides/metadata).
            # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
          &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
        &quot;deviceId&quot;: &quot;A String&quot;, # Output only. The ID of the device. Assigned by the server.
        &quot;configuration&quot;: &quot;A String&quot;, # Not available to resellers.
        &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs that identify a manufactured device. To learn more, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
            # To understand requirements on identifier sets, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
          &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
              # unique across different device models.
          &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
              # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
              # listed in
              # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
          &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
          &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
          &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
              # `android.os.Build.MODEL`. Allowed values are listed in
              # [models](/zero-touch/resources/manufacturer-names#model-names).
        },
        &quot;claims&quot;: [ # Output only. The provisioning claims for a device. Devices claimed for
            # zero-touch enrollment have a claim with the type `SECTION_TYPE_ZERO_TOUCH`.
            # Call
            # `partners.devices.unclaim`
            # or
            # `partners.devices.unclaimAsync`
            # to remove the device from zero-touch enrollment.
          { # A record of a device claimed by a reseller for a customer. Devices claimed
              # for zero-touch enrollment have a claim with the type
              # `SECTION_TYPE_ZERO_TOUCH`. To learn more, read
              # [Claim devices for customers](/zero-touch/guides/how-it-works#claim).
            &quot;vacationModeStartTime&quot;: &quot;A String&quot;, # The timestamp when the device was put into ‘vacation mode’. This value is
                # present iff the device is in &#x27;vacation mode&#x27;.
            &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of claim made on the device.
            &quot;vacationModeExpireTime&quot;: &quot;A String&quot;, # The timestamp when the device will exit ‘vacation mode’. This value is
                # present iff the device is in &#x27;vacation mode&#x27;.
            &quot;resellerId&quot;: &quot;A String&quot;, # The ID of the reseller that claimed the device.
            &quot;ownerCompanyId&quot;: &quot;A String&quot;, # The ID of the Customer that purchased the device.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
            # `partners/[PARTNER_ID]/devices/[DEVICE_ID]`. Assigned by the server.
      },
    ],
    &quot;totalSize&quot;: 42, # The total count of items in the list irrespective of pagination.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token used to access the next page of results.
        # Omitted if no further results are available.
  }</pre>
</div>

<div class="method">
    <code class="details" id="findByOwner_next">findByOwner_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>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a device.

Args:
  name: string, Required. The device API resource name in the format
`partners/[PARTNER_ID]/devices/[DEVICE_ID]`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Android device registered for zero-touch enrollment.
    &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # The metadata attached to the device. Structured as key-value pairs. To
        # learn more, read [Device
        # metadata](https://developers.google.com/zero-touch/guides/metadata).
        # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
      &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
    },
    &quot;deviceId&quot;: &quot;A String&quot;, # Output only. The ID of the device. Assigned by the server.
    &quot;configuration&quot;: &quot;A String&quot;, # Not available to resellers.
    &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs that identify a manufactured device. To learn more, read
        # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
        # To understand requirements on identifier sets, read
        # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
      &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
          # unique across different device models.
      &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
          # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
          # listed in
          # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
      &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
      &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
          # `android.os.Build.MODEL`. Allowed values are listed in
          # [models](/zero-touch/resources/manufacturer-names#model-names).
    },
    &quot;claims&quot;: [ # Output only. The provisioning claims for a device. Devices claimed for
        # zero-touch enrollment have a claim with the type `SECTION_TYPE_ZERO_TOUCH`.
        # Call
        # `partners.devices.unclaim`
        # or
        # `partners.devices.unclaimAsync`
        # to remove the device from zero-touch enrollment.
      { # A record of a device claimed by a reseller for a customer. Devices claimed
          # for zero-touch enrollment have a claim with the type
          # `SECTION_TYPE_ZERO_TOUCH`. To learn more, read
          # [Claim devices for customers](/zero-touch/guides/how-it-works#claim).
        &quot;vacationModeStartTime&quot;: &quot;A String&quot;, # The timestamp when the device was put into ‘vacation mode’. This value is
            # present iff the device is in &#x27;vacation mode&#x27;.
        &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of claim made on the device.
        &quot;vacationModeExpireTime&quot;: &quot;A String&quot;, # The timestamp when the device will exit ‘vacation mode’. This value is
            # present iff the device is in &#x27;vacation mode&#x27;.
        &quot;resellerId&quot;: &quot;A String&quot;, # The ID of the reseller that claimed the device.
        &quot;ownerCompanyId&quot;: &quot;A String&quot;, # The ID of the Customer that purchased the device.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
        # `partners/[PARTNER_ID]/devices/[DEVICE_ID]`. Assigned by the server.
  }</pre>
</div>

<div class="method">
    <code class="details" id="metadata">metadata(metadataOwnerId, deviceId, body=None, x__xgafv=None)</code>
  <pre>Updates reseller metadata associated with the device.

Args:
  metadataOwnerId: string, Required. The owner of the newly set metadata. Set this to the partner ID. (required)
  deviceId: string, Required. The ID of the device. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to set metadata for a device.
    &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # Required. The metadata to attach to the device.
        # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
      &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
        &quot;a_key&quot;: &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:

    { # Metadata entries that can be attached to a `Device`. To learn more, read
      # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
    &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="unclaim">unclaim(partnerId, body=None, x__xgafv=None)</code>
  <pre>Unclaims a device from a customer and removes it from zero-touch
enrollment.

Args:
  partnerId: string, Required. The ID of the reseller partner. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message to unclaim a device.
    &quot;deviceId&quot;: &quot;A String&quot;, # Required. The device ID returned by `ClaimDevice`.
    &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # Required. The device identifier you used when you claimed this device.
        # To understand requirements on identifier sets, read
        # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
      &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
          # unique across different device models.
      &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
          # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
          # listed in
          # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
      &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
      &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
          # `android.os.Build.MODEL`. Allowed values are listed in
          # [models](/zero-touch/resources/manufacturer-names#model-names).
    },
    &quot;vacationModeDays&quot;: 42, # The duration of the vacation unlock starting from when the request is
        # processed. (1 day is treated as 24 hours)
    &quot;sectionType&quot;: &quot;A String&quot;, # Required. The section type of the device&#x27;s provisioning record.
    &quot;vacationModeExpireTime&quot;: &quot;A String&quot;, # The expiration time of the vacation unlock.
  }

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

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="unclaimAsync">unclaimAsync(partnerId, body=None, x__xgafv=None)</code>
  <pre>Unclaims a batch of devices for a customer asynchronously. Removes the
devices from zero-touch enrollment. To learn more, read [Long‑running batch
operations](/zero-touch/guides/how-it-works#operations).

Args:
  partnerId: string, Required. The reseller partner ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to unclaim devices asynchronously in batch.
    &quot;unclaims&quot;: [ # Required. The list of devices to unclaim.
      { # Identifies one unclaim request.
        &quot;vacationModeDays&quot;: 42, # Optional. The duration of the vacation unlock starting from when the request is
            # processed. (1 day is treated as 24 hours)
        &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # Required. Device identifier of the device.
            # To understand requirements on identifier sets, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
          &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
              # unique across different device models.
          &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
              # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
              # listed in
              # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
          &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
          &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
          &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
              # `android.os.Build.MODEL`. Allowed values are listed in
              # [models](/zero-touch/resources/manufacturer-names#model-names).
        },
        &quot;vacationModeExpireTime&quot;: &quot;A String&quot;, # Optional. The expiration time of the vacation unlock.
        &quot;sectionType&quot;: &quot;A String&quot;, # Required. The section type of the device&#x27;s provisioning record.
        &quot;deviceId&quot;: &quot;A String&quot;, # Required. Device ID of the device.
      },
    ],
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;response&quot;: { # This field will contain a `DevicesLongRunningOperationResponse` object if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;metadata&quot;: { # This field will contain a `DevicesLongRunningOperationMetadata` object if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # This field will always be not set if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`. In this case, error information for each device is set in `response.perDeviceStatus.result.status`.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateMetadataAsync">updateMetadataAsync(partnerId, body=None, x__xgafv=None)</code>
  <pre>Updates the reseller metadata attached to a batch of devices. This method
updates devices asynchronously and returns an `Operation` that can be used
to track progress. Read [Long‑running batch
operations](/zero-touch/guides/how-it-works#operations).

Args:
  partnerId: string, Required. The reseller partner ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to update device metadata in batch.
    &quot;updates&quot;: [ # Required. The list of metadata updates.
      { # Identifies metadata updates to one device.
        &quot;deviceId&quot;: &quot;A String&quot;, # Required. Device ID of the device.
        &quot;deviceMetadata&quot;: { # Metadata entries that can be attached to a `Device`. To learn more, read # Required. The metadata to update.
            # [Device metadata](https://developers.google.com/zero-touch/guides/metadata).
          &quot;entries&quot;: { # Metadata entries recorded as key-value pairs.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
        &quot;deviceIdentifier&quot;: { # Encapsulates hardware and product IDs to identify a manufactured device. # Required. Device identifier.
            # To understand requirements on identifier sets, read
            # [Identifiers](https://developers.google.com/zero-touch/guides/identifiers).
          &quot;serialNumber&quot;: &quot;A String&quot;, # The manufacturer&#x27;s serial number for the device. This value might not be
              # unique across different device models.
          &quot;manufacturer&quot;: &quot;A String&quot;, # The device manufacturer’s name. Matches the device&#x27;s built-in
              # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
              # listed in
              # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
          &quot;meid&quot;: &quot;A String&quot;, # The device’s MEID number.
          &quot;imei&quot;: &quot;A String&quot;, # The device’s IMEI number. Validated on input.
          &quot;model&quot;: &quot;A String&quot;, # The device model&#x27;s name. Matches the device&#x27;s built-in value returned from
              # `android.os.Build.MODEL`. Allowed values are listed in
              # [models](/zero-touch/resources/manufacturer-names#model-names).
        },
      },
    ],
  }

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;response&quot;: { # This field will contain a `DevicesLongRunningOperationResponse` object if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;metadata&quot;: { # This field will contain a `DevicesLongRunningOperationMetadata` object if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # This field will always be not set if the operation is created by `claimAsync`, `unclaimAsync`, or `updateMetadataAsync`. In this case, error information for each device is set in `response.perDeviceStatus.result.status`.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
    },
  }</pre>
</div>

</body></html>