{
"id": "app.tempomusic.notification.defs",
"defs": {
"notificationView": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"reason",
"record",
"isRead",
"indexedAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"uri": {
"type": "string",
"format": "at-uri",
"description": "AT-URI of the source record (the like or reply) that produced this notification."
},
"author": {
"ref": "app.tempomusic.feed.defs#authorView",
"type": "ref",
"description": "The actor whose action produced this notification."
},
"isRead": {
"type": "boolean",
"description": "Server-computed from indexedAt and the recipient's stored seenAt; true when this notification predates seenAt."
},
"reason": {
"type": "string",
"maxLength": 100,
"description": "Why this notification was produced. knownValues is informational; clients should accept unknown values and skip them.",
"knownValues": [
"post-liked",
"post-replied",
"reply-liked"
]
},
"record": {
"type": "unknown",
"description": "The underlying app.tempomusic.feed.like or app.tempomusic.feed.reply record carried verbatim with its $type discriminator. Lexicon-typed as unknown to match the AT Protocol convention for embedded records."
},
"indexedAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp at which the AppView indexed the source record."
},
"reasonSubject": {
"type": "string",
"format": "at-uri",
"description": "AT-URI of the post or reply that was acted upon (the recipient's own record). Matches Bluesky's reasonSubject semantics."
},
"subjectRootUri": {
"type": "string",
"format": "at-uri",
"description": "AT-URI of the root post for navigation. For post-liked / post-replied this equals reasonSubject; for reply-liked this is the root post the liked reply hangs off, letting clients open the right thread without a second lookup."
}
},
"description": "A single notification surfaced to the recipient. Server-projected from indexed like/reply records; recipients are scoped server-side from the viewer parameter."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}