<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="cloudidentity_v1.html">Cloud Identity API</a> . <a href="cloudidentity_v1.devices.html">devices</a> . <a href="cloudidentity_v1.devices.deviceUsers.html">deviceUsers</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudidentity_v1.devices.deviceUsers.clientStates.html">clientStates()</a></code>
</p>
<p class="firstline">Returns the clientStates Resource.</p>

<p class="toc_element">
  <code><a href="#approve">approve(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Approves device to access user data.</p>
<p class="toc_element">
  <code><a href="#block">block(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Blocks device from accessing user data</p>
<p class="toc_element">
  <code><a href="#cancelWipe">cancelWipe(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Cancels an unfinished user account wipe. This operation can be used to cancel device wipe in the gap between the wipe operation returning success and the device being wiped.</p>
<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="#delete">delete(name, customer=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified DeviceUser. This also revokes the user's access to device data.</p>
<p class="toc_element">
  <code><a href="#get">get(name, customer=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified DeviceUser</p>
<p class="toc_element">
  <code><a href="#list">list(parent, customer=None, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists/Searches DeviceUsers.</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="#lookup">lookup(parent, androidId=None, pageSize=None, pageToken=None, rawResourceId=None, userId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Looks up resource names of the DeviceUsers associated with the caller's credentials, as well as the properties provided in the request. This method must be called with end-user credentials with the scope: https://www.googleapis.com/auth/cloud-identity.devices.lookup If multiple properties are provided, only DeviceUsers having all of these properties are considered as matches - i.e. the query behaves like an AND. Different platforms require different amounts of information from the caller to ensure that the DeviceUser is uniquely identified. - iOS: No properties need to be passed, the caller's credentials are sufficient to identify the corresponding DeviceUser. - Android: Specifying the 'android_id' field is required. - Desktop: Specifying the 'raw_resource_id' field is required.</p>
<p class="toc_element">
  <code><a href="#lookup_next">lookup_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#wipe">wipe(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Wipes the user's account on a device. Other data on the device that is not associated with the user's work account is not affected. For example, if a Gmail app is installed on a device that is used for personal and work purposes, and the user is logged in to the Gmail app with their personal account as well as their work account, wiping the "deviceUser" by their work administrator will not affect their personal account within Gmail or other apps such as Photos.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="approve">approve(name, body=None, x__xgafv=None)</code>
  <pre>Approves device to access user data.

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Device, and device_user is the unique ID assigned to the User. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for approving the device to access user data.
  &quot;customer&quot;: &quot;A String&quot;, # Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
}

  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &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.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &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;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="block">block(name, body=None, x__xgafv=None)</code>
  <pre>Blocks device from accessing user data

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Device, and device_user is the unique ID assigned to the User. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for blocking account on device.
  &quot;customer&quot;: &quot;A String&quot;, # Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
}

  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &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.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &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;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="cancelWipe">cancelWipe(name, body=None, x__xgafv=None)</code>
  <pre>Cancels an unfinished user account wipe. This operation can be used to cancel device wipe in the gap between the wipe operation returning success and the device being wiped.

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Device, and device_user is the unique ID assigned to the User. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for cancelling an unfinished user account wipe.
  &quot;customer&quot;: &quot;A String&quot;, # Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
}

  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &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.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &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;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, customer=None, x__xgafv=None)</code>
  <pre>Deletes the specified DeviceUser. This also revokes the user&#x27;s access to device data.

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Device, and device_user is the unique ID assigned to the User. (required)
  customer: string, Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &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.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &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;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, customer=None, x__xgafv=None)</code>
  <pre>Retrieves the specified DeviceUser

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Device, and device_user is the unique ID assigned to the User. (required)
  customer: string, Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a user&#x27;s use of a Device in the Cloud Identity Devices API. A DeviceUser is a resource representing a user&#x27;s use of a Device
  &quot;compromisedState&quot;: &quot;A String&quot;, # Compromised State of the DeviceUser object
  &quot;createTime&quot;: &quot;A String&quot;, # When the user first signed in to the device
  &quot;firstSyncTime&quot;: &quot;A String&quot;, # Output only. Most recent time when user registered with this service.
  &quot;languageCode&quot;: &quot;A String&quot;, # Output only. Default locale used on device, in IETF BCP-47 format.
  &quot;lastSyncTime&quot;: &quot;A String&quot;, # Output only. Last time when user synced with policies.
  &quot;managementState&quot;: &quot;A String&quot;, # Output only. Management state of the user on the device.
  &quot;name&quot;: &quot;A String&quot;, # Output only. [Resource name](https://cloud.google.com/apis/design/resource_names) of the DeviceUser in format: `devices/{device}/deviceUsers/{device_user}`, where `device_user` uniquely identifies a user&#x27;s use of a device.
  &quot;passwordState&quot;: &quot;A String&quot;, # Password state of the DeviceUser object
  &quot;userAgent&quot;: &quot;A String&quot;, # Output only. User agent on the device for this specific user
  &quot;userEmail&quot;: &quot;A String&quot;, # Email address of the user registered on the device.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, customer=None, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists/Searches DeviceUsers.

Args:
  parent: string, Required. To list all DeviceUsers, set this to &quot;devices/-&quot;. To list all DeviceUsers owned by a device, set this to the resource name of the device. Format: devices/{device} (required)
  customer: string, Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
  filter: string, Optional. Additional restrictions when fetching list of devices. For a list of search fields, refer to [Mobile device search fields](https://developers.google.com/admin-sdk/directory/v1/search-operators). Multiple search fields are separated by the space character.
  orderBy: string, Optional. Order specification for devices in the response.
  pageSize: integer, Optional. The maximum number of DeviceUsers to return. If unspecified, at most 5 DeviceUsers will be returned. The maximum value is 20; values above 20 will be coerced to 20.
  pageToken: string, Optional. A page token, received from a previous `ListDeviceUsers` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListBooks` must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message that is returned from the ListDeviceUsers method.
  &quot;deviceUsers&quot;: [ # Devices meeting the list restrictions.
    { # Represents a user&#x27;s use of a Device in the Cloud Identity Devices API. A DeviceUser is a resource representing a user&#x27;s use of a Device
      &quot;compromisedState&quot;: &quot;A String&quot;, # Compromised State of the DeviceUser object
      &quot;createTime&quot;: &quot;A String&quot;, # When the user first signed in to the device
      &quot;firstSyncTime&quot;: &quot;A String&quot;, # Output only. Most recent time when user registered with this service.
      &quot;languageCode&quot;: &quot;A String&quot;, # Output only. Default locale used on device, in IETF BCP-47 format.
      &quot;lastSyncTime&quot;: &quot;A String&quot;, # Output only. Last time when user synced with policies.
      &quot;managementState&quot;: &quot;A String&quot;, # Output only. Management state of the user on the device.
      &quot;name&quot;: &quot;A String&quot;, # Output only. [Resource name](https://cloud.google.com/apis/design/resource_names) of the DeviceUser in format: `devices/{device}/deviceUsers/{device_user}`, where `device_user` uniquely identifies a user&#x27;s use of a device.
      &quot;passwordState&quot;: &quot;A String&quot;, # Password state of the DeviceUser object
      &quot;userAgent&quot;: &quot;A String&quot;, # Output only. User agent on the device for this specific user
      &quot;userEmail&quot;: &quot;A String&quot;, # Email address of the user registered on the device.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results. Empty if there are no more 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="lookup">lookup(parent, androidId=None, pageSize=None, pageToken=None, rawResourceId=None, userId=None, x__xgafv=None)</code>
  <pre>Looks up resource names of the DeviceUsers associated with the caller&#x27;s credentials, as well as the properties provided in the request. This method must be called with end-user credentials with the scope: https://www.googleapis.com/auth/cloud-identity.devices.lookup If multiple properties are provided, only DeviceUsers having all of these properties are considered as matches - i.e. the query behaves like an AND. Different platforms require different amounts of information from the caller to ensure that the DeviceUser is uniquely identified. - iOS: No properties need to be passed, the caller&#x27;s credentials are sufficient to identify the corresponding DeviceUser. - Android: Specifying the &#x27;android_id&#x27; field is required. - Desktop: Specifying the &#x27;raw_resource_id&#x27; field is required.

Args:
  parent: string, Must be set to &quot;devices/-/deviceUsers&quot; to search across all DeviceUser belonging to the user. (required)
  androidId: string, Android Id returned by [Settings.Secure#ANDROID_ID](https://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID).
  pageSize: integer, The maximum number of DeviceUsers to return. If unspecified, at most 20 DeviceUsers will be returned. The maximum value is 20; values above 20 will be coerced to 20.
  pageToken: string, A page token, received from a previous `LookupDeviceUsers` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `LookupDeviceUsers` must match the call that provided the page token.
  rawResourceId: string, Raw Resource Id used by Google Endpoint Verification. If the user is enrolled into Google Endpoint Verification, this id will be saved as the &#x27;device_resource_id&#x27; field in the following platform dependent files. Mac: ~/.secureConnect/context_aware_config.json Windows: C:\Users\%USERPROFILE%\.secureConnect\context_aware_config.json Linux: ~/.secureConnect/context_aware_config.json
  userId: string, The user whose DeviceUser&#x27;s resource name will be fetched. Must be set to &#x27;me&#x27; to fetch the DeviceUser&#x27;s resource name for the calling user.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response containing resource names of the DeviceUsers associated with the caller&#x27;s credentials.
  &quot;customer&quot;: &quot;A String&quot;, # The customer resource name that may be passed back to other Devices API methods such as List, Get, etc.
  &quot;names&quot;: [ # [Resource names](https://cloud.google.com/apis/design/resource_names) of the DeviceUsers in the format: `devices/{device}/deviceUsers/{user_resource}`, where device is the unique ID assigned to a Device and user_resource is the unique user ID
    &quot;A String&quot;,
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results. Empty if there are no more results.
}</pre>
</div>

<div class="method">
    <code class="details" id="lookup_next">lookup_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="wipe">wipe(name, body=None, x__xgafv=None)</code>
  <pre>Wipes the user&#x27;s account on a device. Other data on the device that is not associated with the user&#x27;s work account is not affected. For example, if a Gmail app is installed on a device that is used for personal and work purposes, and the user is logged in to the Gmail app with their personal account as well as their work account, wiping the &quot;deviceUser&quot; by their work administrator will not affect their personal account within Gmail or other apps such as Photos.

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Device, and device_user is the unique ID assigned to the User. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for starting an account wipe on device.
  &quot;customer&quot;: &quot;A String&quot;, # Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you&#x27;re using this API for your own organization, use `customers/my_customer` If you&#x27;re using this API to manage another organization, use `customers/{customer}`, where customer is the customer to whom the device belongs.
}

  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;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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
    &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.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &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;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

</body></html>