<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, orderBy=None, pageToken=None, customer=None, filter=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</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. (required)
  customer: string, Required. [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;scoreReason&quot;: &quot;A String&quot;, # A descriptive cause of the health score.
      &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;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;ownerType&quot;: &quot;A String&quot;, # Output only. The owner of the ClientState
      &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;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;numberValue&quot;: 3.14, # Represents a double value.
          &quot;boolValue&quot;: True or False, # Represents a boolean value.
          &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
        },
      },
      &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;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;)
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, orderBy=None, pageToken=None, customer=None, filter=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)
  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.
  customer: string, Required. [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.
  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;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results. Empty if there are no more results.
    &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;scoreReason&quot;: &quot;A String&quot;, # A descriptive cause of the health score.
          &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;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;ownerType&quot;: &quot;A String&quot;, # Output only. The owner of the ClientState
          &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;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;numberValue&quot;: 3.14, # Represents a double value.
              &quot;boolValue&quot;: True or False, # Represents a boolean value.
              &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
            },
          },
          &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;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;)
        },
    ],
  }</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

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;scoreReason&quot;: &quot;A String&quot;, # A descriptive cause of the health score.
    &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;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;ownerType&quot;: &quot;A String&quot;, # Output only. The owner of the ClientState
    &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;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;numberValue&quot;: 3.14, # Represents a double value.
        &quot;boolValue&quot;: True or False, # Represents a boolean value.
        &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
      },
    },
    &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;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;)
  }

  customer: string, Required. [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;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;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;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.
    },
    &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;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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
  }</pre>
</div>

</body></html>