A post authored by a user, living in the author's repository. Successor to the deprecated social.coves.community.post: authorship is derived from the repository the record lives in, so there is no in-record author field. A post claiming a community is not visible in it until the community writes a social.coves.community.acceptance for it - community surfaces render from acceptance records only. Repo placement attributes authorship as vouched for by a verifying relay or a direct DID-resolved PDS fetch; firehose events themselves carry no commit-signature proof.
tid
Timestamp-based ID
Properties
bridgedStats
ref
#bridgedStats
Optional
Bridge-asserted aggregate of origin-platform votes for federated/bridged content. Set by the bridge that materialized this record; absent for natively-authored posts.
community
string
did
Required
DID of the community this was submitted to. Immutable across updates: consumers MUST ignore the entire update event that changes it - discard the whole event, not merely retain the old community value - since retargeting a post means writing a new post record.
content
string
Optional
Post content - supports rich text via facets
maxLength: 500000 bytesmaxGraphemes: 50000 graphemescreatedAt
string
datetime
Required
Timestamp of post creation
crosspostChain
array
of
ref
com.atproto.repo.strongRef
Optional
Full chain of crossposts with version pinning. First element is original, last is immediate parent.
maxLength: 25 itemscrosspostOf
ref
com.atproto.repo.strongRef
Optional
If this is a crosspost, strong reference to the immediate parent post
embed
union
Optional
Embedded media, external links, or quoted posts
facets
array
of
ref
social.coves.richtext.facet
Optional
Annotations for rich text (mentions, links, formatting, block structure)
maxLength: 200 itemsfederatedFrom
unknown
Optional
The origin platform or instance this post was federated from, for bridged content. Unconstrained for the same reason as originalAuthor.
labels
ref
com.atproto.label.defs#selfLabels
Optional
Self-applied content labels (NSFW, spoilers, etc.)
langs
array
of
string
language
Optional
Languages used in the post content (ISO 639-1)
maxLength: 3 itemslocation
unknown
Optional
Optional place this post is about or was authored from. Unconstrained pending a geo vocabulary; absent for the overwhelming majority of posts.
originalAuthor
unknown
Optional
The author on the origin platform, for content a bridge materialized here. Deliberately unconstrained: no bridge has fixed this shape yet, and pinning one now would be inventing a contract the first real bridge would contradict. Consumers MUST tolerate any object here and MUST NOT treat it as an authorship claim about this repo - authorship is the repository the record lives in.
tags
array
of
string
Optional
User-applied topic tags
maxLength: 8 itemstitle
string
Optional
Post title (optional for media-only posts)
maxLength: 3000 bytesmaxGraphemes: 300 graphemesView raw schema
{
"description": "A post authored by a user, living in the author's repository. Successor to the deprecated social.coves.community.post: authorship is derived from the repository the record lives in, so there is no in-record author field. A post claiming a community is not visible in it until the community writes a social.coves.community.acceptance for it - community surfaces render from acceptance records only. Repo placement attributes authorship as vouched for by a verifying relay or a direct DID-resolved PDS fetch; firehose events themselves carry no commit-signature proof.",
"key": "tid",
"record": {
"properties": {
"bridgedStats": {
"description": "Bridge-asserted aggregate of origin-platform votes for federated/bridged content. Set by the bridge that materialized this record; absent for natively-authored posts.",
"ref": "#bridgedStats",
"type": "ref"
},
"community": {
"description": "DID of the community this was submitted to. Immutable across updates: consumers MUST ignore the entire update event that changes it - discard the whole event, not merely retain the old community value - since retargeting a post means writing a new post record.",
"format": "did",
"type": "string"
},
"content": {
"description": "Post content - supports rich text via facets",
"maxGraphemes": 50000,
"maxLength": 500000,
"type": "string"
},
"createdAt": {
"description": "Timestamp of post creation",
"format": "datetime",
"type": "string"
},
"crosspostChain": {
"description": "Full chain of crossposts with version pinning. First element is original, last is immediate parent.",
"items": {
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"maxLength": 25,
"type": "array"
},
"crosspostOf": {
"description": "If this is a crosspost, strong reference to the immediate parent post",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"embed": {
"description": "Embedded media, external links, or quoted posts",
"refs": [
"social.coves.embed.images",
"social.coves.embed.video",
"social.coves.embed.external",
"social.coves.embed.post"
],
"type": "union"
},
"facets": {
"description": "Annotations for rich text (mentions, links, formatting, block structure)",
"items": {
"ref": "social.coves.richtext.facet",
"type": "ref"
},
"maxLength": 200,
"type": "array"
},
"federatedFrom": {
"description": "The origin platform or instance this post was federated from, for bridged content. Unconstrained for the same reason as originalAuthor.",
"type": "unknown"
},
"labels": {
"description": "Self-applied content labels (NSFW, spoilers, etc.)",
"ref": "com.atproto.label.defs#selfLabels",
"type": "ref"
},
"langs": {
"description": "Languages used in the post content (ISO 639-1)",
"items": {
"format": "language",
"type": "string"
},
"maxLength": 3,
"type": "array"
},
"location": {
"description": "Optional place this post is about or was authored from. Unconstrained pending a geo vocabulary; absent for the overwhelming majority of posts.",
"type": "unknown"
},
"originalAuthor": {
"description": "The author on the origin platform, for content a bridge materialized here. Deliberately unconstrained: no bridge has fixed this shape yet, and pinning one now would be inventing a contract the first real bridge would contradict. Consumers MUST tolerate any object here and MUST NOT treat it as an authorship claim about this repo - authorship is the repository the record lives in.",
"type": "unknown"
},
"tags": {
"description": "User-applied topic tags",
"items": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"maxLength": 8,
"type": "array"
},
"title": {
"description": "Post title (optional for media-only posts)",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
}
},
"required": [
"community",
"createdAt"
],
"type": "object"
},
"type": "record"
}