<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="chat_v1.html">Google Chat API</a> . <a href="chat_v1.users.html">users</a> . <a href="chat_v1.users.spaces.html">spaces</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="chat_v1.users.spaces.spaceNotificationSetting.html">spaceNotificationSetting()</a></code>
</p>
<p class="firstline">Returns the spaceNotificationSetting Resource.</p>

<p class="toc_element">
  <code><a href="chat_v1.users.spaces.threads.html">threads()</a></code>
</p>
<p class="firstline">Returns the threads Resource.</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="#getSpaceReadState">getSpaceReadState(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns details about a user's read state within a space, used to identify read and unread messages. For an example, see [Get details about a user's space read state](https://developers.google.com/workspace/chat/get-space-read-state). Requires [user authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user) with one of the following [authorization scopes](https://developers.google.com/workspace/chat/authenticate-authorize#chat-api-scopes): - `https://www.googleapis.com/auth/chat.users.readstate.readonly` - `https://www.googleapis.com/auth/chat.users.readstate`</p>
<p class="toc_element">
  <code><a href="#updateSpaceReadState">updateSpaceReadState(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a user's read state within a space, used to identify read and unread messages. For an example, see [Update a user's space read state](https://developers.google.com/workspace/chat/update-space-read-state). Requires [user authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user) with the [authorization scope](https://developers.google.com/workspace/chat/authenticate-authorize#chat-api-scopes): - `https://www.googleapis.com/auth/chat.users.readstate`</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="getSpaceReadState">getSpaceReadState(name, x__xgafv=None)</code>
  <pre>Returns details about a user&#x27;s read state within a space, used to identify read and unread messages. For an example, see [Get details about a user&#x27;s space read state](https://developers.google.com/workspace/chat/get-space-read-state). Requires [user authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user) with one of the following [authorization scopes](https://developers.google.com/workspace/chat/authenticate-authorize#chat-api-scopes): - `https://www.googleapis.com/auth/chat.users.readstate.readonly` - `https://www.googleapis.com/auth/chat.users.readstate`

Args:
  name: string, Required. Resource name of the space read state to retrieve. Only supports getting read state for the calling user. To refer to the calling user, set one of the following: - The `me` alias. For example, `users/me/spaces/{space}/spaceReadState`. - Their Workspace email address. For example, `users/user@example.com/spaces/{space}/spaceReadState`. - Their user id. For example, `users/123456789/spaces/{space}/spaceReadState`. Format: users/{user}/spaces/{space}/spaceReadState (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A user&#x27;s read state within a space, used to identify read and unread messages.
  &quot;lastReadTime&quot;: &quot;A String&quot;, # Optional. The time when the user&#x27;s space read state was updated. Usually this corresponds with either the timestamp of the last read message, or a timestamp specified by the user to mark the last read position in a space.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the space read state. Format: `users/{user}/spaces/{space}/spaceReadState`
}</pre>
</div>

<div class="method">
    <code class="details" id="updateSpaceReadState">updateSpaceReadState(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a user&#x27;s read state within a space, used to identify read and unread messages. For an example, see [Update a user&#x27;s space read state](https://developers.google.com/workspace/chat/update-space-read-state). Requires [user authentication](https://developers.google.com/workspace/chat/authenticate-authorize-chat-user) with the [authorization scope](https://developers.google.com/workspace/chat/authenticate-authorize#chat-api-scopes): - `https://www.googleapis.com/auth/chat.users.readstate`

Args:
  name: string, Resource name of the space read state. Format: `users/{user}/spaces/{space}/spaceReadState` (required)
  body: object, The request body.
    The object takes the form of:

{ # A user&#x27;s read state within a space, used to identify read and unread messages.
  &quot;lastReadTime&quot;: &quot;A String&quot;, # Optional. The time when the user&#x27;s space read state was updated. Usually this corresponds with either the timestamp of the last read message, or a timestamp specified by the user to mark the last read position in a space.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the space read state. Format: `users/{user}/spaces/{space}/spaceReadState`
}

  updateMask: string, Required. The field paths to update. Currently supported field paths: - `last_read_time` When the `last_read_time` is before the latest message create time, the space appears as unread in the UI. To mark the space as read, set `last_read_time` to any value later (larger) than the latest message create time. The `last_read_time` is coerced to match the latest message create time. Note that the space read state only affects the read state of messages that are visible in the space&#x27;s top-level conversation. Replies in threads are unaffected by this timestamp, and instead rely on the thread read state.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A user&#x27;s read state within a space, used to identify read and unread messages.
  &quot;lastReadTime&quot;: &quot;A String&quot;, # Optional. The time when the user&#x27;s space read state was updated. Usually this corresponds with either the timestamp of the last read message, or a timestamp specified by the user to mark the last read position in a space.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the space read state. Format: `users/{user}/spaces/{space}/spaceReadState`
}</pre>
</div>

</body></html>