ink.branchline.listNotifications

branchline.ink

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "actor": {
      "properties": {
        "did": {
          "format": "did",
          "type": "string"
        },
        "displayName": {
          "type": "string"
        },
        "handle": {
          "format": "handle",
          "type": "string"
        }
      },
      "required": [
        "did"
      ],
      "type": "object"
    },
    "bookmarkGrowthView": {
      "description": "A story the viewer bookmarked received new buds past the viewer's last dismissal.",
      "properties": {
        "actorCount": {
          "minimum": 1,
          "type": "integer"
        },
        "actors": {
          "items": {
            "ref": "#actor",
            "type": "ref"
          },
          "maxLength": 10,
          "type": "array"
        },
        "groupKey": {
          "description": "Format: 'bookmarkGrowth:{rootUri}'.",
          "type": "string"
        },
        "latestAt": {
          "description": "createdAt of the most recent qualifying new bud on this story.",
          "format": "datetime",
          "type": "string"
        },
        "newBudCount": {
          "description": "Number of new buds since the viewer last dismissed this group (bounded for display).",
          "minimum": 1,
          "type": "integer"
        },
        "rootTitle": {
          "type": "string"
        },
        "rootUri": {
          "description": "Root bud AT-URI of the bookmarked story.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "groupKey",
        "latestAt",
        "rootUri",
        "rootTitle",
        "newBudCount",
        "actors",
        "actorCount"
      ],
      "type": "object"
    },
    "continuationView": {
      "description": "One of the viewer's buds received at least one child bud since the group was last read.",
      "properties": {
        "actorCount": {
          "minimum": 1,
          "type": "integer"
        },
        "actors": {
          "description": "Up to 10 unique actors who wrote qualifying child buds, most-recent actor first.",
          "items": {
            "ref": "#actor",
            "type": "ref"
          },
          "maxLength": 10,
          "type": "array"
        },
        "groupKey": {
          "description": "Stable identifier used with ink.branchline.markNotificationsRead. Format: 'continuation:{parentUri}'.",
          "type": "string"
        },
        "latestAt": {
          "description": "Timestamp of the most recent child bud in this group. Drives sort order.",
          "format": "datetime",
          "type": "string"
        },
        "parentTitle": {
          "type": "string"
        },
        "parentUri": {
          "description": "AT-URI of the viewer's bud that was extended.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "groupKey",
        "latestAt",
        "parentUri",
        "parentTitle",
        "actors",
        "actorCount"
      ],
      "type": "object"
    },
    "main": {
      "description": "List unread notifications for the authenticated viewer. Requires a valid session cookie; responds 401 otherwise. Notifications are derived from indexed records (no separate notification table) and grouped by subject; a group counts as unread when its latestAt is newer than the viewer's stored readAt for that group (see ink.branchline.markNotificationsRead). Three kinds are emitted: 'continuation' (someone grew one of the viewer's buds), 'seedGrant' (someone gave the viewer a seed), and 'bookmarkGrowth' (new buds on a story the viewer bookmarked).",
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "notifications": {
              "items": {
                "closed": true,
                "refs": [
                  "#continuationView",
                  "#seedGrantView",
                  "#bookmarkGrowthView"
                ],
                "type": "union"
              },
              "type": "array"
            }
          },
          "required": [
            "notifications"
          ],
          "type": "object"
        }
      },
      "parameters": {
        "properties": {
          "limit": {
            "default": 20,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "params"
      },
      "type": "query"
    },
    "seedGrantView": {
      "description": "Someone granted the viewer a seed.",
      "properties": {
        "grantor": {
          "ref": "#actor",
          "type": "ref"
        },
        "groupKey": {
          "description": "Format: 'seedGrant:{seedUri}'.",
          "type": "string"
        },
        "latestAt": {
          "description": "createdAt of the seed.",
          "format": "datetime",
          "type": "string"
        },
        "seedUri": {
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "groupKey",
        "latestAt",
        "seedUri",
        "grantor"
      ],
      "type": "object"
    }
  },
  "id": "ink.branchline.listNotifications",
  "lexicon": 1
}

Validate Record

Validate a record against ink.branchline.listNotifications

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:brvu7akhdvsqcomb67pafw25
CID
bafyreibovkohqs7acurigypldz633xypmnp4szqwxj3c3ufip3ujjjzpsa
Indexed At
2026-04-20 22:24 UTC
AT-URI
at://did:plc:brvu7akhdvsqcomb67pafw25/com.atproto.lexicon.schema/ink.branchline.listNotifications

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

Lexicon Garden

@