{
"id": "app.didpic.notification.defs",
"defs": {
"notificationView": {
"type": "object",
"required": [
"id",
"reason",
"author",
"recordUri",
"recordCid",
"count",
"isRead",
"createdAt",
"indexedAt"
],
"properties": {
"id": {
"type": "string",
"description": "Server-issued opaque identifier for this notification within the recipient's stream."
},
"post": {
"ref": "app.didpic.feed.defs#postView",
"type": "ref",
"description": "Server-hydrated thread-root post for any reason involving a post (like / comment / reply). Lets clients render a thumbnail preview inline without an extra fetch."
},
"count": {
"type": "integer",
"minimum": 1,
"description": "Number of underlying records collapsed into this notification. Always 1 for comment / reply / follow; for like notifications it counts repeat likes on the same subject (a viral post that gets many likes produces a single row with count incrementing)."
},
"author": {
"ref": "app.didpic.actor.defs#profileBasic",
"type": "ref",
"description": "Most recent actor responsible for this notification. For collapsed likes this is the latest liker; the UI typically reads 'author and (count - 1) others ...'."
},
"isRead": {
"type": "boolean",
"description": "True if this notification's indexedAt is at or before the viewer's stored seenAt boundary."
},
"reason": {
"type": "string",
"knownValues": [
"like",
"comment",
"reply",
"follow"
]
},
"comment": {
"ref": "app.didpic.feed.defs#commentView",
"type": "ref",
"description": "Server-hydrated comment for cases where the subject is a comment: reply (the parent comment) and like (when the like targets a comment rather than a post). Lets clients render the snippet text inline."
},
"postUri": {
"type": "string",
"format": "at-uri",
"description": "Denormalised thread-root post URI for all post-context reasons (like / comment / reply). Lets clients route directly to the post view without a lookup. Absent for follow notifications."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"recordCid": {
"type": "string",
"format": "cid"
},
"recordUri": {
"type": "string",
"format": "at-uri",
"description": "URI of the most recent underlying interaction record. For collapsed likes earlier likes are not enumerated."
},
"subjectCid": {
"type": "string",
"format": "cid"
},
"subjectUri": {
"type": "string",
"format": "at-uri",
"description": "URI of the thing the interaction targeted: post for top-level comments and post-likes, comment for comment-likes and replies. Absent for follow notifications."
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}