<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.customers.html">customers</a> . <a href="androiddeviceprovisioning_v1.customers.devices.html">devices</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#applyConfiguration">applyConfiguration(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Applies a Configuration to the device to register the device for zero-touch</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the details of a device.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
<p class="firstline">Lists a customer's devices.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#removeConfiguration">removeConfiguration(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Removes a configuration from device.</p>
<p class="toc_element">
  <code><a href="#unclaim">unclaim(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Unclaims a device from a customer and removes it from zero-touch</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="applyConfiguration">applyConfiguration(parent, body, x__xgafv=None)</code>
  <pre>Applies a Configuration to the device to register the device for zero-touch
enrollment. After applying a configuration to a device, the device
automatically provisions itself on first boot, or next factory reset.

Args:
  parent: string, Required. The customer managing the device. An API resource name in the
format `customers/[CUSTOMER_ID]`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for customer to assign a configuration to device.
    "device": { # A `DeviceReference` is an API abstraction that lets you supply a _device_ # Required. The device the configuration is applied to.
        # argument to a method using one of the following identifier types:
        #
        # * A numeric API resource ID.
        # * Real-world hardware IDs, such as IMEI number, belonging to the manufactured
        #   device.
        #
        # Methods that operate on devices take a `DeviceReference` as a parameter type
        # because it's more flexible for the caller. To learn more about device
        # identifiers, read [Identifiers](/zero-touch/guides/identifiers).
      "deviceIdentifier": { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs of the device.
          # To understand requirements on identifier sets, read
          # [Identifiers](/zero-touch/guides/identifiers).
        "imei": "A String", # The device’s IMEI number. Validated on input.
        "model": "A String", # The device model's name. Matches the device's built-in value returned from
            # `android.os.Build.MODEL`. Allowed values are listed in
            # [models](/zero-touch/resources/manufacturer-names#model-names).
        "serialNumber": "A String", # The manufacturer's serial number for the device. This value might not be
            # unique across different device models.
        "meid": "A String", # The device’s MEID number.
        "manufacturer": "A String", # The device manufacturer’s name. Matches the device's built-in
            # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
            # listed in
            # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      },
      "deviceId": "A String", # The ID of the device.
    },
    "configuration": "A String", # Required. The configuration applied to the device in the format
        # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`.
  }

  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="get">get(name, x__xgafv=None)</code>
  <pre>Gets the details of a device.

Args:
  name: string, Required. The device to get. An API resource name in the format
`customers/[CUSTOMER_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.
    "deviceIdentifier": { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs that identify a manufactured device. To learn more, read
        # [Identifiers](/zero-touch/guides/identifiers).
        # To understand requirements on identifier sets, read
        # [Identifiers](/zero-touch/guides/identifiers).
      "imei": "A String", # The device’s IMEI number. Validated on input.
      "model": "A String", # The device model's name. Matches the device's built-in value returned from
          # `android.os.Build.MODEL`. Allowed values are listed in
          # [models](/zero-touch/resources/manufacturer-names#model-names).
      "serialNumber": "A String", # The manufacturer's serial number for the device. This value might not be
          # unique across different device models.
      "meid": "A String", # The device’s MEID number.
      "manufacturer": "A String", # The device manufacturer’s name. Matches the device's built-in
          # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
          # listed in
          # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
    },
    "name": "A String", # Output only. The API resource name in the format
        # `partners/[PARTNER_ID]/devices/[DEVICE_ID]`. Assigned by the server.
    "deviceMetadata": { # 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](/zero-touch/guides/metadata).
        # [Device metadata](/zero-touch/guides/metadata).
      "entries": { # Metadata entries recorded as key-value pairs.
        "a_key": "A String",
      },
    },
    "deviceId": "A String", # Output only. The ID of the device. Assigned by the server.
    "claims": [ # 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).
        "vacationModeStartTime": "A String", # The timestamp when the device was put into ‘vacation mode’. This value is
            # present iff the device is in 'vacation mode'.
        "resellerId": "A String", # The ID of the reseller that claimed the device.
        "vacationModeExpireTime": "A String", # The timestamp when the device will exit ‘vacation mode’. This value is
            # present iff the device is in 'vacation mode'.
        "sectionType": "A String", # Output only. The type of claim made on the device.
        "ownerCompanyId": "A String", # The ID of the Customer that purchased the device.
      },
    ],
    "configuration": "A String", # Not available to resellers.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</code>
  <pre>Lists a customer's devices.

Args:
  parent: string, Required. The customer managing the devices. An API resource name in the
format `customers/[CUSTOMER_ID]`. (required)
  pageToken: string, A token specifying which result page to return.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageSize: string, The maximum number of devices to show in a page of results.
Must be between 1 and 100 inclusive.

Returns:
  An object of the form:

    { # Response message of customer's liting devices.
    "nextPageToken": "A String", # A token used to access the next page of results. Omitted if no further
        # results are available.
    "devices": [ # The customer's devices.
      { # An Android device registered for zero-touch enrollment.
        "deviceIdentifier": { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs that identify a manufactured device. To learn more, read
            # [Identifiers](/zero-touch/guides/identifiers).
            # To understand requirements on identifier sets, read
            # [Identifiers](/zero-touch/guides/identifiers).
          "imei": "A String", # The device’s IMEI number. Validated on input.
          "model": "A String", # The device model's name. Matches the device's built-in value returned from
              # `android.os.Build.MODEL`. Allowed values are listed in
              # [models](/zero-touch/resources/manufacturer-names#model-names).
          "serialNumber": "A String", # The manufacturer's serial number for the device. This value might not be
              # unique across different device models.
          "meid": "A String", # The device’s MEID number.
          "manufacturer": "A String", # The device manufacturer’s name. Matches the device's built-in
              # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
              # listed in
              # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
        },
        "name": "A String", # Output only. The API resource name in the format
            # `partners/[PARTNER_ID]/devices/[DEVICE_ID]`. Assigned by the server.
        "deviceMetadata": { # 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](/zero-touch/guides/metadata).
            # [Device metadata](/zero-touch/guides/metadata).
          "entries": { # Metadata entries recorded as key-value pairs.
            "a_key": "A String",
          },
        },
        "deviceId": "A String", # Output only. The ID of the device. Assigned by the server.
        "claims": [ # 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).
            "vacationModeStartTime": "A String", # The timestamp when the device was put into ‘vacation mode’. This value is
                # present iff the device is in 'vacation mode'.
            "resellerId": "A String", # The ID of the reseller that claimed the device.
            "vacationModeExpireTime": "A String", # The timestamp when the device will exit ‘vacation mode’. This value is
                # present iff the device is in 'vacation mode'.
            "sectionType": "A String", # Output only. The type of claim made on the device.
            "ownerCompanyId": "A String", # The ID of the Customer that purchased the device.
          },
        ],
        "configuration": "A String", # Not available to resellers.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' 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="removeConfiguration">removeConfiguration(parent, body, x__xgafv=None)</code>
  <pre>Removes a configuration from device.

Args:
  parent: string, Required. The customer managing the device in the format
`customers/[CUSTOMER_ID]`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for customer to remove the configuration from device.
    "device": { # A `DeviceReference` is an API abstraction that lets you supply a _device_ # Required. The device to remove the configuration from.
        # argument to a method using one of the following identifier types:
        #
        # * A numeric API resource ID.
        # * Real-world hardware IDs, such as IMEI number, belonging to the manufactured
        #   device.
        #
        # Methods that operate on devices take a `DeviceReference` as a parameter type
        # because it's more flexible for the caller. To learn more about device
        # identifiers, read [Identifiers](/zero-touch/guides/identifiers).
      "deviceIdentifier": { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs of the device.
          # To understand requirements on identifier sets, read
          # [Identifiers](/zero-touch/guides/identifiers).
        "imei": "A String", # The device’s IMEI number. Validated on input.
        "model": "A String", # The device model's name. Matches the device's built-in value returned from
            # `android.os.Build.MODEL`. Allowed values are listed in
            # [models](/zero-touch/resources/manufacturer-names#model-names).
        "serialNumber": "A String", # The manufacturer's serial number for the device. This value might not be
            # unique across different device models.
        "meid": "A String", # The device’s MEID number.
        "manufacturer": "A String", # The device manufacturer’s name. Matches the device's built-in
            # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
            # listed in
            # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      },
      "deviceId": "A String", # The 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:

    { # 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="unclaim">unclaim(parent, body, x__xgafv=None)</code>
  <pre>Unclaims a device from a customer and removes it from zero-touch
enrollment.

After removing a device, a customer must contact their reseller to register
the device into zero-touch enrollment again.

Args:
  parent: string, Required. The customer managing the device. An API resource name in the
format `customers/[CUSTOMER_ID]`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for customer to unclaim a device.
    "device": { # A `DeviceReference` is an API abstraction that lets you supply a _device_ # Required. The device to unclaim.
        # argument to a method using one of the following identifier types:
        #
        # * A numeric API resource ID.
        # * Real-world hardware IDs, such as IMEI number, belonging to the manufactured
        #   device.
        #
        # Methods that operate on devices take a `DeviceReference` as a parameter type
        # because it's more flexible for the caller. To learn more about device
        # identifiers, read [Identifiers](/zero-touch/guides/identifiers).
      "deviceIdentifier": { # Encapsulates hardware and product IDs to identify a manufactured device. # The hardware IDs of the device.
          # To understand requirements on identifier sets, read
          # [Identifiers](/zero-touch/guides/identifiers).
        "imei": "A String", # The device’s IMEI number. Validated on input.
        "model": "A String", # The device model's name. Matches the device's built-in value returned from
            # `android.os.Build.MODEL`. Allowed values are listed in
            # [models](/zero-touch/resources/manufacturer-names#model-names).
        "serialNumber": "A String", # The manufacturer's serial number for the device. This value might not be
            # unique across different device models.
        "meid": "A String", # The device’s MEID number.
        "manufacturer": "A String", # The device manufacturer’s name. Matches the device's built-in
            # value returned from `android.os.Build.MANUFACTURER`. Allowed values are
            # listed in
            # [manufacturers](/zero-touch/resources/manufacturer-names#manufacturers-names).
      },
      "deviceId": "A String", # The 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:

    { # 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>

</body></html>