# app.zeens.notification.listNotifications

> 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.notification.listNotifications)
- [Documentation](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.notification.listNotifications/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.notification.listNotifications/examples)

## Definitions

### `app.zeens.notification.listNotifications#actor`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `avatar` | `string` | No |  |
| `did` | `string` (did) | Yes |  |
| `displayName` | `string` | No |  |
| `handle` | `string` | No |  |

### `app.zeens.notification.listNotifications`

**Type**: `query`

List notifications for the authenticated Zeens user. Merges likes, replies, follows, group-membership and group-photo events from the firehose.

#### Parameters

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `actors` | `string` | Yes | Required comma-separated allowlist of author DIDs (the Zeens membership set). Only notifications authored by one of these DIDs are returned, so activity that reached the repo from Bluesky or another atproto client is excluded. An empty list returns nothing. |
| `cursor` | `string` | No | Pagination cursor (ISO-8601 timestamp of the oldest notification in the previous page). |
| `limit` | `integer` | No |  |
| `recipient` | `string` (did) | Yes | DID whose notifications to fetch. The AppView trusts this value; auth is enforced at the SvelteKit layer. |

#### Output

**Encoding**: `application/json`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `cursor` | `string` | No |  |
| `notifications` | `array` | Yes |  |
| `seenAt` | `string` (datetime) | No |  |

### `app.zeens.notification.listNotifications#notification`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `author` | `ref` → `#actor` | Yes | Who caused the notification (the liker, replier, follower, inviter, etc.). |
| `extra` | `unknown` | No | Reason-specific payload (e.g. group DID, role, accept/decline flag). |
| `indexedAt` | `string` (datetime) | Yes |  |
| `isRead` | `boolean` | Yes |  |
| `labels` | `array` | No |  |
| `reason` | `string` | Yes | The type of notification. |
| `reasonSubject` | `string` (at-uri) | No | For like/reply/article-like: AT-URI of the subject post/article. For group events: AT-URI of the group record. |
| `recordUri` | `string` (at-uri) | Yes | Same as uri — present for compatibility with bsky notification shape. |
| `uri` | `string` (at-uri) | Yes | AT-URI of the triggering record (the like, reply, follow, groupMember, etc.). |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "actor": {
      "properties": {
        "avatar": {
          "type": "string"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "displayName": {
          "type": "string"
        },
        "handle": {
          "type": "string"
        }
      },
      "required": [
        "did"
      ],
      "type": "object"
    },
    "main": {
      "description": "List notifications for the authenticated Zeens user. Merges likes, replies, follows, group-membership and group-photo events from the firehose.",
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "cursor": {
              "type": "string"
            },
            "notifications": {
              "items": {
                "ref": "#notification",
                "type": "ref"
              },
              "type": "array"
            },
            "seenAt": {
              "format": "datetime",
              "type": "string"
            }
          },
          "required": [
            "notifications"
          ],
          "type": "object"
        }
      },
      "parameters": {
        "properties": {
          "actors": {
            "description": "Required comma-separated allowlist of author DIDs (the Zeens membership set). Only notifications authored by one of these DIDs are returned, so activity that reached the repo from Bluesky or another atproto client is excluded. An empty list returns nothing.",
            "type": "string"
          },
          "cursor": {
            "description": "Pagination cursor (ISO-8601 timestamp of the oldest notification in the previous page).",
            "type": "string"
          },
          "limit": {
            "default": 50,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "recipient": {
            "description": "DID whose notifications to fetch. The AppView trusts this value; auth is enforced at the SvelteKit layer.",
            "format": "did",
            "type": "string"
          }
        },
        "required": [
          "recipient",
          "actors"
        ],
        "type": "params"
      },
      "type": "query"
    },
    "notification": {
      "properties": {
        "author": {
          "description": "Who caused the notification (the liker, replier, follower, inviter, etc.).",
          "ref": "#actor",
          "type": "ref"
        },
        "extra": {
          "description": "Reason-specific payload (e.g. group DID, role, accept/decline flag).",
          "type": "unknown"
        },
        "indexedAt": {
          "format": "datetime",
          "type": "string"
        },
        "isRead": {
          "type": "boolean"
        },
        "labels": {
          "items": {
            "type": "unknown"
          },
          "type": "array"
        },
        "reason": {
          "description": "The type of notification.",
          "knownValues": [
            "like",
            "reply",
            "follow",
            "article-like",
            "article-reply",
            "comment_like",
            "comment_reply",
            "group-member-added",
            "group-photo-added",
            "group-invite",
            "group-photo-invite",
            "group-photo-invite-accepted"
          ],
          "type": "string"
        },
        "reasonSubject": {
          "description": "For like/reply/article-like: AT-URI of the subject post/article. For group events: AT-URI of the group record.",
          "format": "at-uri",
          "type": "string"
        },
        "recordUri": {
          "description": "Same as uri — present for compatibility with bsky notification shape.",
          "format": "at-uri",
          "type": "string"
        },
        "uri": {
          "description": "AT-URI of the triggering record (the like, reply, follow, groupMember, etc.).",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "author",
        "reason",
        "recordUri",
        "isRead",
        "indexedAt"
      ],
      "type": "object"
    }
  },
  "id": "app.zeens.notification.listNotifications",
  "lexicon": 1
}
```
