pub.oysters.defs
#actorView
objectAn account, hydrated enough to render a byline without resolving the DID.
| field | type | about |
|---|---|---|
| didrequired | string<did> | The account's DID, which is its permanent identity. |
| handle | string<handle> | The handle the DID document claims, as last seen. Absent until we have resolved one. |
| displayName | string | A chosen name, if the account has one. maxLength 256maxGraphemes 64 |
| avatar | string<uri> | URL of the account's avatar image. |
| labels | com.atproto.label.defs#label[] | Labels in force on the account, from the labelers this response applies (named in the atproto-content-labelers response header). Each is the label as its labeler signed it. An account label reaches everything the account posts. |
#commentView
objectOne comment in a discussion.
| field | type | about |
|---|---|---|
| urirequired | string<at-uri> | The comment's AT-URI. |
| cid | string<cid> | CID of the exact revision indexed. |
| authorrequired | #actorView | Who wrote it. |
| recordrequired | unknown | The pub.oysters.comment record, rebuilt from the indexed fields. See postView.record. |
| upvoteCount | integer | Live upvotes on this comment. min 0 |
| indexedAtrequired | string<datetime> | When this board first saw the record. |
| labels | com.atproto.label.defs#label[] | Labels in force on this comment, from the labelers this response applies. See postView.labels. |
#postView
objectA submission with everything needed to render it: the record as written, its author, and the counts this board derived.
| field | type | about |
|---|---|---|
| urirequired | string<at-uri> | The submission's AT-URI. This is the stable identifier; do not key on anything else. |
| cid | string<cid> | CID of the exact revision indexed. Absent for a record indexed before its CID was known. |
| authorrequired | #actorView | Who submitted it. |
| recordrequired | unknown | The pub.oysters.post record, rebuilt from the indexed fields. Fields this board does not index are not echoed; fetch the record from the author's repository if you need it byte-for-byte. |
| tags | string[] | Tags from this board's curated vocabulary. The record may claim others; those are not echoed here. items: maxLength 128 |
| upvoteCount | integer | Live upvotes. Not the ranking score, which is deliberately not exposed. min 0 |
| commentCount | integer | Live comments, at any depth. min 0 |
| indexedAtrequired | string<datetime> | When this board first saw the record. Ranking uses this rather than the record's own createdAt, which its author chose. |
| labels | com.atproto.label.defs#label[] | Labels in force on this submission, from the labelers this response applies (named in the atproto-content-labelers response header). Each is the label as its labeler signed it, so it can be verified. Labels on the author's account are on author.labels. |
#tagView
objectOne tag in the board's curated vocabulary.
| field | type | about |
|---|---|---|
| slugrequired | string | The tag as it appears in a record and in /t/ URLs. maxLength 128 |
| namerequired | string | The tag's display name. maxLength 256 |
| description | string | What the tag is for. maxLength 1024 |
#threadViewComment
objectA comment and its replies, nested. Replies are ordered the way the board displays them: by weighted score, ties broken by age.
| field | type | about |
|---|---|---|
| commentrequired | #commentView | The comment at this node. |
| replies | #threadViewComment[] | Direct replies, each with their own replies. Empty at the depth limit rather than absent, so a client can tell a leaf from a truncation only by comparing against the depth it asked for. |
#threadViewPost
objectA submission and its whole discussion.
| field | type | about |
|---|---|---|
| postrequired | #postView | The submission the discussion is about. |
| replies | #threadViewComment[] | Top-level comments, each with their own replies. |
Raw document
{
"lexicon": 1,
"id": "pub.oysters.defs",
"defs": {
"actorView": {
"type": "object",
"description": "An account, hydrated enough to render a byline without resolving the DID.",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "The account's DID, which is its permanent identity."
},
"handle": {
"type": "string",
"format": "handle",
"description": "The handle the DID document claims, as last seen. Absent until we have resolved one."
},
"displayName": {
"type": "string",
"description": "A chosen name, if the account has one.",
"maxGraphemes": 64,
"maxLength": 256
},
"avatar": {
"type": "string",
"format": "uri",
"description": "URL of the account's avatar image."
},
"labels": {
"type": "array",
"description": "Labels in force on the account, from the labelers this response applies (named in the atproto-content-labelers response header). Each is the label as its labeler signed it. An account label reaches everything the account posts.",
"items": {
"type": "ref",
"ref": "com.atproto.label.defs#label"
}
}
}
},
"postView": {
"type": "object",
"description": "A submission with everything needed to render it: the record as written, its author, and the counts this board derived.",
"required": [
"uri",
"author",
"record",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri",
"description": "The submission's AT-URI. This is the stable identifier; do not key on anything else."
},
"cid": {
"type": "string",
"format": "cid",
"description": "CID of the exact revision indexed. Absent for a record indexed before its CID was known."
},
"author": {
"type": "ref",
"ref": "#actorView",
"description": "Who submitted it."
},
"record": {
"type": "unknown",
"description": "The pub.oysters.post record, rebuilt from the indexed fields. Fields this board does not index are not echoed; fetch the record from the author's repository if you need it byte-for-byte."
},
"tags": {
"type": "array",
"description": "Tags from this board's curated vocabulary. The record may claim others; those are not echoed here.",
"items": {
"type": "string",
"maxLength": 128
}
},
"upvoteCount": {
"type": "integer",
"description": "Live upvotes. Not the ranking score, which is deliberately not exposed.",
"minimum": 0
},
"commentCount": {
"type": "integer",
"description": "Live comments, at any depth.",
"minimum": 0
},
"indexedAt": {
"type": "string",
"format": "datetime",
"description": "When this board first saw the record. Ranking uses this rather than the record's own createdAt, which its author chose."
},
"labels": {
"type": "array",
"description": "Labels in force on this submission, from the labelers this response applies (named in the atproto-content-labelers response header). Each is the label as its labeler signed it, so it can be verified. Labels on the author's account are on author.labels.",
"items": {
"type": "ref",
"ref": "com.atproto.label.defs#label"
}
}
}
},
"commentView": {
"type": "object",
"description": "One comment in a discussion.",
"required": [
"uri",
"author",
"record",
"indexedAt"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri",
"description": "The comment's AT-URI."
},
"cid": {
"type": "string",
"format": "cid",
"description": "CID of the exact revision indexed."
},
"author": {
"type": "ref",
"ref": "#actorView",
"description": "Who wrote it."
},
"record": {
"type": "unknown",
"description": "The pub.oysters.comment record, rebuilt from the indexed fields. See postView.record."
},
"upvoteCount": {
"type": "integer",
"description": "Live upvotes on this comment.",
"minimum": 0
},
"indexedAt": {
"type": "string",
"format": "datetime",
"description": "When this board first saw the record."
},
"labels": {
"type": "array",
"description": "Labels in force on this comment, from the labelers this response applies. See postView.labels.",
"items": {
"type": "ref",
"ref": "com.atproto.label.defs#label"
}
}
}
},
"threadViewComment": {
"type": "object",
"description": "A comment and its replies, nested. Replies are ordered the way the board displays them: by weighted score, ties broken by age.",
"required": [
"comment"
],
"properties": {
"comment": {
"type": "ref",
"ref": "#commentView",
"description": "The comment at this node."
},
"replies": {
"type": "array",
"description": "Direct replies, each with their own replies. Empty at the depth limit rather than absent, so a client can tell a leaf from a truncation only by comparing against the depth it asked for.",
"items": {
"type": "ref",
"ref": "#threadViewComment"
}
}
}
},
"threadViewPost": {
"type": "object",
"description": "A submission and its whole discussion.",
"required": [
"post"
],
"properties": {
"post": {
"type": "ref",
"ref": "#postView",
"description": "The submission the discussion is about."
},
"replies": {
"type": "array",
"description": "Top-level comments, each with their own replies.",
"items": {
"type": "ref",
"ref": "#threadViewComment"
}
}
}
},
"tagView": {
"type": "object",
"description": "One tag in the board's curated vocabulary.",
"required": [
"slug",
"name"
],
"properties": {
"slug": {
"type": "string",
"description": "The tag as it appears in a record and in /t/ URLs.",
"maxLength": 128
},
"name": {
"type": "string",
"description": "The tag's display name.",
"maxLength": 256
},
"description": {
"type": "string",
"description": "What the tag is for.",
"maxLength": 1024
}
}
}
}
}