# app.zeens.message

> Published by [zeens.app](https://lexicon.garden/identity/did:plc:pwpuqwge6g7xrjmfbw73uycw)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.message)
- [Documentation](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.message/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.message/examples)

## Definitions

### `app.zeens.message`

**Type**: `record`

A single chat message, written to the SENDER's repo. The body is base64-obfuscated (NOT encrypted) so it isn't plainly readable when browsing the repo, but it is not secret — anyone can decode it. Chats are public on the user's PDS. The convoId groups a 1:1 conversation. Carries the app.zeens.v marker so the firehose recognises it.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `app.zeens.v` | `integer` | Yes | Zeens version marker (always 1). |
| `body` | `string` | Yes | Base64-obfuscated message text (UTF-8 bytes, base64-encoded). Obfuscation only, not encryption. |
| `convoId` | `string` | Yes | Deterministic 1:1 conversation id = sha256(sorted([didA, didB]).join('\|')). Both parties derive the same id without coordination. |
| `createdAt` | `string` (datetime) | Yes | Client-declared send time. |
| `enc` | `string` | Yes | Obfuscation scheme for the body. 'b64' = base64 of UTF-8 bytes. |
| `recipient` | `string` (did) | Yes | DID of the intended recipient. |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A single chat message, written to the SENDER's repo. The body is base64-obfuscated (NOT encrypted) so it isn't plainly readable when browsing the repo, but it is not secret — anyone can decode it. Chats are public on the user's PDS. The convoId groups a 1:1 conversation. Carries the app.zeens.v marker so the firehose recognises it.",
      "key": "tid",
      "record": {
        "properties": {
          "app.zeens.v": {
            "description": "Zeens version marker (always 1).",
            "type": "integer"
          },
          "body": {
            "description": "Base64-obfuscated message text (UTF-8 bytes, base64-encoded). Obfuscation only, not encryption.",
            "maxLength": 16384,
            "type": "string"
          },
          "convoId": {
            "description": "Deterministic 1:1 conversation id = sha256(sorted([didA, didB]).join('|')). Both parties derive the same id without coordination.",
            "maxLength": 128,
            "type": "string"
          },
          "createdAt": {
            "description": "Client-declared send time.",
            "format": "datetime",
            "type": "string"
          },
          "enc": {
            "description": "Obfuscation scheme for the body. 'b64' = base64 of UTF-8 bytes.",
            "enum": [
              "b64"
            ],
            "type": "string"
          },
          "recipient": {
            "description": "DID of the intended recipient.",
            "format": "did",
            "type": "string"
          }
        },
        "required": [
          "convoId",
          "recipient",
          "body",
          "enc",
          "createdAt",
          "app.zeens.v"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "app.zeens.message",
  "lexicon": 1
}
```
