# social.colibri.beta.channel.putReadCursors

> Published by [colibri.social](https://lexicon.garden/identity/did:plc:mprdjqjluoswa7awzggaggj3)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:mprdjqjluoswa7awzggaggj3/social.colibri.beta.channel.putReadCursors)
- [Documentation](https://lexicon.garden/lexicon/did:plc:mprdjqjluoswa7awzggaggj3/social.colibri.beta.channel.putReadCursors/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:mprdjqjluoswa7awzggaggj3/social.colibri.beta.channel.putReadCursors/examples)

## Definitions

### `social.colibri.beta.channel.putReadCursors`

**Type**: `procedure`

Pushes the requesting user's read cursors for one community to the AppView, so unread counts update immediately instead of waiting for a sync notification. The client writes its social.colibri.beta.channel.read record for the community to its own personal space first, then calls this. Clients should debounce this rather than calling it on every message.

#### Input

**Encoding**: `application/json`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cursors` | `array` | Yes | The complete, replacement set of read cursors for the community's channels. |
| `community` | `string` (did) | Yes | The community the cursors belong to. |

#### Output

**Encoding**: `application/json`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `statuses` | `array` | Yes | Unread state per channel, after the update. |

#### Errors

- **AuthRequired**: The request has no valid service auth.
- **CommunityNotFound**: No community matches the given DID.

## Raw Schema

```json
{
  "id": "social.colibri.beta.channel.putReadCursors",
  "defs": {
    "main": {
      "type": "procedure",
      "input": {
        "schema": {
          "type": "object",
          "required": [
            "community",
            "cursors"
          ],
          "properties": {
            "cursors": {
              "type": "array",
              "items": {
                "ref": "social.colibri.beta.channel.read#cursor",
                "type": "ref"
              },
              "description": "The complete, replacement set of read cursors for the community's channels."
            },
            "community": {
              "type": "string",
              "format": "did",
              "description": "The community the cursors belong to."
            }
          }
        },
        "encoding": "application/json"
      },
      "errors": [
        {
          "name": "AuthRequired",
          "description": "The request has no valid service auth."
        },
        {
          "name": "CommunityNotFound",
          "description": "No community matches the given DID."
        }
      ],
      "output": {
        "schema": {
          "type": "object",
          "required": [
            "statuses"
          ],
          "properties": {
            "statuses": {
              "type": "array",
              "items": {
                "ref": "social.colibri.beta.channel.defs#unreadStatus",
                "type": "ref"
              },
              "description": "Unread state per channel, after the update."
            }
          }
        },
        "encoding": "application/json"
      },
      "description": "Pushes the requesting user's read cursors for one community to the AppView, so unread counts update immediately instead of waiting for a sync notification. The client writes its social.colibri.beta.channel.read record for the community to its own personal space first, then calls this. Clients should debounce this rather than calling it on every message."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
