<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> . <a href="cloudidentity_v1.devices.deviceUsers.clientStates.html">clientStates</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(name, customer=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the client state for the device user</p>
<p class="toc_element">
  <code><a href="#list">list(parent, customer=None, filter=None, orderBy=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the client states for the given search query.</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="#patch">patch(name, body=None, customer=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the client state for the device user **Note**: This method is available only to customers who have one of the following SKUs: Enterprise Standard, Enterprise Plus, Enterprise for Education, and Cloud Identity Premium</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, customer=None, x__xgafv=None)</code>
  <pre>Gets the client state for the device user

Args:
  name: string, Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the ClientState in format: `devices/{device_id}/deviceUsers/{device_user_id}/clientStates/{partner_id}`, where `device_id` is the unique ID assigned to the Device, `device_user_id` is the unique ID assigned to the User and `partner_id` identifies the partner storing the data. To get the client state for devices belonging to your own organization, the `partnerId` is in the format: `customerId-*anystring*`. Where the `customerId` is your organization&#x27;s customer ID and `anystring` is any suffix. This suffix is used in setting up Custom Access Levels in Context-Aware Access. You may use `my_customer` instead of the customer ID for devices managed by your own organization. You may specify `-` in place of the `{device_id}`, so the ClientState resource name can be: `devices/-/deviceUsers/{device_user_resource_id}/clientStates/{partner_id}`. (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_id}`, where customer_id 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 the state associated with an API client calling the Devices API. Resource representing ClientState and supports updates from API users
  &quot;assetTags&quot;: [ # The caller can specify asset tags for this resource
    &quot;A String&quot;,
  ],
  &quot;complianceState&quot;: &quot;A String&quot;, # The compliance state of the resource as specified by the API client.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time the client state data was created.
  &quot;customId&quot;: &quot;A String&quot;, # This field may be used to store a unique identifier for the API resource within which these CustomAttributes are a field.
  &quot;etag&quot;: &quot;A String&quot;, # The token that needs to be passed back for concurrency control in updates. Token needs to be passed back in UpdateRequest
  &quot;healthScore&quot;: &quot;A String&quot;, # The Health score of the resource. The Health score is the callers specification of the condition of the device from a usability point of view. For example, a third-party device management provider may specify a health score based on its compliance with organizational policies.
  &quot;keyValuePairs&quot;: { # The map of key-value attributes stored by callers specific to a device. The total serialized length of this map may not exceed 10KB. No limit is placed on the number of attributes in a map.
    &quot;a_key&quot;: { # Additional custom attribute values may be one of these types
      &quot;boolValue&quot;: True or False, # Represents a boolean value.
      &quot;numberValue&quot;: 3.14, # Represents a double value.
      &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
    },
  },
  &quot;lastUpdateTime&quot;: &quot;A String&quot;, # Output only. The time the client state data was last updated.
  &quot;managed&quot;: &quot;A String&quot;, # The management state of the resource as specified by the API client.
  &quot;name&quot;: &quot;A String&quot;, # Output only. [Resource name](https://cloud.google.com/apis/design/resource_names) of the ClientState in format: `devices/{device_id}/deviceUsers/{device_user_id}/clientState/{partner_id}`, where partner_id corresponds to the partner storing the data. For partners belonging to the &quot;BeyondCorp Alliance&quot;, this is the partner ID specified to you by Google. For all other callers, this is a string of the form: `{customer_id}-suffix`, where `customer_id` is your customer ID. The *suffix* is any string the caller specifies. This string will be displayed verbatim in the administration console. This suffix is used in setting up Custom Access Levels in Context-Aware Access. Your organization&#x27;s customer ID can be obtained from the URL: `GET https://www.googleapis.com/admin/directory/v1/customers/my_customer` The `id` field in the response contains the customer ID starting with the letter &#x27;C&#x27;. The customer ID to be used in this API is the string after the letter &#x27;C&#x27; (not including &#x27;C&#x27;)
  &quot;ownerType&quot;: &quot;A String&quot;, # Output only. The owner of the ClientState
  &quot;scoreReason&quot;: &quot;A String&quot;, # A descriptive cause of the health score.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, customer=None, filter=None, orderBy=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the client states for the given search query.

Args:
  parent: string, Required. To list all ClientStates, set this to &quot;devices/-/deviceUsers/-&quot;. To list all ClientStates owned by a DeviceUser, set this to the resource name of the DeviceUser. Format: devices/{device}/deviceUsers/{deviceUser} (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_id}`, where customer_id is the customer to whom the device belongs.
  filter: string, Optional. Additional restrictions when fetching list of client states.
  orderBy: string, Optional. Order specification for client states in the response.
  pageToken: string, Optional. A page token, received from a previous `ListClientStates` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListClientStates` 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 in ListClientStates.
  &quot;clientStates&quot;: [ # Client states meeting the list restrictions.
    { # Represents the state associated with an API client calling the Devices API. Resource representing ClientState and supports updates from API users
      &quot;assetTags&quot;: [ # The caller can specify asset tags for this resource
        &quot;A String&quot;,
      ],
      &quot;complianceState&quot;: &quot;A String&quot;, # The compliance state of the resource as specified by the API client.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time the client state data was created.
      &quot;customId&quot;: &quot;A String&quot;, # This field may be used to store a unique identifier for the API resource within which these CustomAttributes are a field.
      &quot;etag&quot;: &quot;A String&quot;, # The token that needs to be passed back for concurrency control in updates. Token needs to be passed back in UpdateRequest
      &quot;healthScore&quot;: &quot;A String&quot;, # The Health score of the resource. The Health score is the callers specification of the condition of the device from a usability point of view. For example, a third-party device management provider may specify a health score based on its compliance with organizational policies.
      &quot;keyValuePairs&quot;: { # The map of key-value attributes stored by callers specific to a device. The total serialized length of this map may not exceed 10KB. No limit is placed on the number of attributes in a map.
        &quot;a_key&quot;: { # Additional custom attribute values may be one of these types
          &quot;boolValue&quot;: True or False, # Represents a boolean value.
          &quot;numberValue&quot;: 3.14, # Represents a double value.
          &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
        },
      },
      &quot;lastUpdateTime&quot;: &quot;A String&quot;, # Output only. The time the client state data was last updated.
      &quot;managed&quot;: &quot;A String&quot;, # The management state of the resource as specified by the API client.
      &quot;name&quot;: &quot;A String&quot;, # Output only. [Resource name](https://cloud.google.com/apis/design/resource_names) of the ClientState in format: `devices/{device_id}/deviceUsers/{device_user_id}/clientState/{partner_id}`, where partner_id corresponds to the partner storing the data. For partners belonging to the &quot;BeyondCorp Alliance&quot;, this is the partner ID specified to you by Google. For all other callers, this is a string of the form: `{customer_id}-suffix`, where `customer_id` is your customer ID. The *suffix* is any string the caller specifies. This string will be displayed verbatim in the administration console. This suffix is used in setting up Custom Access Levels in Context-Aware Access. Your organization&#x27;s customer ID can be obtained from the URL: `GET https://www.googleapis.com/admin/directory/v1/customers/my_customer` The `id` field in the response contains the customer ID starting with the letter &#x27;C&#x27;. The customer ID to be used in this API is the string after the letter &#x27;C&#x27; (not including &#x27;C&#x27;)
      &quot;ownerType&quot;: &quot;A String&quot;, # Output only. The owner of the ClientState
      &quot;scoreReason&quot;: &quot;A String&quot;, # A descriptive cause of the health score.
    },
  ],
  &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(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="patch">patch(name, body=None, customer=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the client state for the device user **Note**: This method is available only to customers who have one of the following SKUs: Enterprise Standard, Enterprise Plus, Enterprise for Education, and Cloud Identity Premium

Args:
  name: string, Output only. [Resource name](https://cloud.google.com/apis/design/resource_names) of the ClientState in format: `devices/{device_id}/deviceUsers/{device_user_id}/clientState/{partner_id}`, where partner_id corresponds to the partner storing the data. For partners belonging to the &quot;BeyondCorp Alliance&quot;, this is the partner ID specified to you by Google. For all other callers, this is a string of the form: `{customer_id}-suffix`, where `customer_id` is your customer ID. The *suffix* is any string the caller specifies. This string will be displayed verbatim in the administration console. This suffix is used in setting up Custom Access Levels in Context-Aware Access. Your organization&#x27;s customer ID can be obtained from the URL: `GET https://www.googleapis.com/admin/directory/v1/customers/my_customer` The `id` field in the response contains the customer ID starting with the letter &#x27;C&#x27;. The customer ID to be used in this API is the string after the letter &#x27;C&#x27; (not including &#x27;C&#x27;) (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents the state associated with an API client calling the Devices API. Resource representing ClientState and supports updates from API users
  &quot;assetTags&quot;: [ # The caller can specify asset tags for this resource
    &quot;A String&quot;,
  ],
  &quot;complianceState&quot;: &quot;A String&quot;, # The compliance state of the resource as specified by the API client.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time the client state data was created.
  &quot;customId&quot;: &quot;A String&quot;, # This field may be used to store a unique identifier for the API resource within which these CustomAttributes are a field.
  &quot;etag&quot;: &quot;A String&quot;, # The token that needs to be passed back for concurrency control in updates. Token needs to be passed back in UpdateRequest
  &quot;healthScore&quot;: &quot;A String&quot;, # The Health score of the resource. The Health score is the callers specification of the condition of the device from a usability point of view. For example, a third-party device management provider may specify a health score based on its compliance with organizational policies.
  &quot;keyValuePairs&quot;: { # The map of key-value attributes stored by callers specific to a device. The total serialized length of this map may not exceed 10KB. No limit is placed on the number of attributes in a map.
    &quot;a_key&quot;: { # Additional custom attribute values may be one of these types
      &quot;boolValue&quot;: True or False, # Represents a boolean value.
      &quot;numberValue&quot;: 3.14, # Represents a double value.
      &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
    },
  },
  &quot;lastUpdateTime&quot;: &quot;A String&quot;, # Output only. The time the client state data was last updated.
  &quot;managed&quot;: &quot;A String&quot;, # The management state of the resource as specified by the API client.
  &quot;name&quot;: &quot;A String&quot;, # Output only. [Resource name](https://cloud.google.com/apis/design/resource_names) of the ClientState in format: `devices/{device_id}/deviceUsers/{device_user_id}/clientState/{partner_id}`, where partner_id corresponds to the partner storing the data. For partners belonging to the &quot;BeyondCorp Alliance&quot;, this is the partner ID specified to you by Google. For all other callers, this is a string of the form: `{customer_id}-suffix`, where `customer_id` is your customer ID. The *suffix* is any string the caller specifies. This string will be displayed verbatim in the administration console. This suffix is used in setting up Custom Access Levels in Context-Aware Access. Your organization&#x27;s customer ID can be obtained from the URL: `GET https://www.googleapis.com/admin/directory/v1/customers/my_customer` The `id` field in the response contains the customer ID starting with the letter &#x27;C&#x27;. The customer ID to be used in this API is the string after the letter &#x27;C&#x27; (not including &#x27;C&#x27;)
  &quot;ownerType&quot;: &quot;A String&quot;, # Output only. The owner of the ClientState
  &quot;scoreReason&quot;: &quot;A String&quot;, # A descriptive cause of the health score.
}

  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_id}`, where customer_id is the customer to whom the device belongs.
  updateMask: string, Optional. Comma-separated list of fully qualified names of fields to be updated. If not specified, all updatable fields in ClientState are updated.
  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 response of the operation in case of success. 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>