Bluesky record types
Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details.
subject
required string format=did // DID of the account to be blocked.
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.graph.block/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.graph.block",
"subject": "did:plc:c3pn34agqqchkaf75v7h43dx",
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView.
subject
required string format=did
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.graph.follow/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.graph.follow",
"subject": "did:plc:c3pn34agqqchkaf75v7h43dx",
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record representing a block relationship against an entire an entire list of accounts (actors).
subject
required string format=at-uri // Reference (AT-URI) to the mod list record.
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.graph.listblock/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.graph.listblock",
"subject": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record defining a starter pack of actors and feeds for new users.
name
required string maxGraphemes=50 minLength=1 maxLength=500 // Display name for starter pack; can not be empty.
description
string maxGraphemes=300 maxLength=3000
descriptionFacets
list
required string format=at-uri // Reference (AT-URI) to the list record.
feeds
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.graph.starterpack/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.graph.starterpack",
"name": "asdf",
"description": "asdf",
"descriptionFacets": [
{
"index": {
"byteStart": 100,
"byteEnd": 100
},
"features": [
{
"did": "did:plc:c3pn34agqqchkaf75v7h43dx"
}
]
}
],
"list": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"feeds": [
{
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key"
}
],
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records.
subject
required string format=did // The account which is included on the list.
list
required string format=at-uri // Reference (AT-URI) to the list record (app.bsky.graph.list).
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.graph.listitem/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.graph.listitem",
"subject": "did:plc:c3pn34agqqchkaf75v7h43dx",
"list": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists.
purpose
required string knownValues=app.bsky.graph.defs#modlist,app.bsky.graph.defs#curatelist,app.bsky.graph.defs#referencelist // Defines the purpose of the list (aka, moderation-oriented or curration-oriented)
name
required string minLength=1 maxLength=64 // Display name for list; can not be empty.
description
string maxGraphemes=300 maxLength=3000
descriptionFacets
avatar
blob accept=image/png,image/jpeg maxSize=1000000
labels
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.graph.list/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.graph.list",
"purpose": "app.bsky.graph.defs#modlist",
"name": "asdf",
"description": "asdf",
"descriptionFacets": [
{
"index": {
"byteStart": 100,
"byteEnd": 100
},
"features": [
{
"did": "did:plc:c3pn34agqqchkaf75v7h43dx"
}
]
}
],
"avatar": {
"$type": "blob",
"mimeType": "image/png",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.
did
required string format=did
displayName
required string maxGraphemes=24 maxLength=240
description
string maxGraphemes=300 maxLength=3000
descriptionFacets
avatar
blob accept=image/png,image/jpeg maxSize=1000000
acceptsInteractions
boolean // Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions
labels
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.feed.generator/anything",
"value": {
"$type": "app.bsky.feed.generator",
"did": "did:plc:c3pn34agqqchkaf75v7h43dx",
"displayName": "asdf",
"description": "asdf",
"descriptionFacets": [
{
"index": {
"byteStart": 100,
"byteEnd": 100
},
"features": [
{
"did": "did:plc:c3pn34agqqchkaf75v7h43dx"
}
]
}
],
"avatar": {
"$type": "blob",
"mimeType": "image/png",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"acceptsInteractions": true,
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record defining interaction rules for a post. The record key (rkey) of the postgate record must match the record key of the post, and that record must be in the same repository.
createdAt
required string format=datetime
post
required string format=at-uri // Reference (AT-URI) to the post record.
detachedEmbeddingUris
array maxLength=50 of string format=at-uri // List of AT-URIs embedding this post that the author has detached from.
embeddingRules
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.feed.postgate/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.feed.postgate",
"createdAt": "2024-11-25T00:04:08.934Z",
"post": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"detachedEmbeddingUris": [
"at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key"
],
"embeddingRules": [
{}
]
}
}
Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository.
post
required string format=at-uri // Reference (AT-URI) to the post record.
allow
createdAt
required string format=datetime
hiddenReplies
array maxLength=50 of string format=at-uri // List of hidden reply URIs.
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.feed.threadgate/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.feed.threadgate",
"post": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"allow": [
{}
],
"createdAt": "2024-11-25T00:04:08.934Z",
"hiddenReplies": [
"at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key"
]
}
}
Record declaring a 'like' of a piece of subject content.
subject
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.feed.like/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.feed.like",
"subject": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record representing a 'repost' of an existing Bluesky post.
subject
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.feed.repost/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.feed.repost",
"subject": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record containing a Bluesky post.
text
required string maxGraphemes=300 maxLength=3000 // The primary post content. May be an empty string, if there are embeds.
entities
facets
reply
embed
langs
array maxLength=3 of string format=language // Indicates human language of post primary text content.
labels
tags
array maxLength=8 of string maxGraphemes=64 maxLength=640 // Additional hashtags, in addition to any included in post text and facets.
createdAt
required string format=datetime // Client-declared timestamp when this post was originally created.
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.feed.post/3lbs2eczkuk2c",
"value": {
"$type": "app.bsky.feed.post",
"text": "asdf",
"entities": [
{
"index": {
"start": 100,
"end": 100
},
"type": "asdf",
"value": "asdf"
}
],
"facets": [
{
"index": {
"byteStart": 100,
"byteEnd": 100
},
"features": [
{
"did": "did:plc:c3pn34agqqchkaf75v7h43dx"
}
]
}
],
"reply": {
"root": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"parent": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
}
},
"embed": {
"images": [
{
"image": {
"$type": "blob",
"mimeType": "image/*",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"alt": "asdf",
"aspectRatio": {
"width": 100,
"height": 100
}
}
]
},
"langs": [
"en-US"
],
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"tags": [
"asdf"
],
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
A declaration of a Bluesky account profile.
displayName
string maxGraphemes=64 maxLength=640
description
string maxGraphemes=256 maxLength=2560 // Free-form profile description text.
avatar
blob accept=image/png,image/jpeg maxSize=1000000 // Small image to be displayed next to posts from account. AKA, 'profile picture'
banner
blob accept=image/png,image/jpeg maxSize=1000000 // Larger horizontal image to display behind profile view.
labels
joinedViaStarterPack
pinnedPost
createdAt
string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.actor.profile/self",
"value": {
"$type": "app.bsky.actor.profile",
"displayName": "asdf",
"description": "asdf",
"avatar": {
"$type": "blob",
"mimeType": "image/png",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"banner": {
"$type": "blob",
"mimeType": "image/png",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"joinedViaStarterPack": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"pinnedPost": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
A declaration of the existence of labeler service.
policies
labels
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/app.bsky.labeler.service/self",
"value": {
"$type": "app.bsky.labeler.service",
"policies": {
"labelValues": [
"!hide"
],
"labelValueDefinitions": [
{
"identifier": "asdf",
"severity": "inform",
"blurs": "content",
"defaultSetting": "ignore",
"adultOnly": true,
"locales": [
{
"lang": "en-US",
"name": "asdf",
"description": "asdf"
}
]
}
]
},
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
A declaration of a Bluesky chat account.
allowIncoming
required string knownValues=all,none,following
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/chat.bsky.actor.declaration/self",
"value": {
"$type": "chat.bsky.actor.declaration",
"allowIncoming": "all"
}
}
A custom emoji
name
required string // Should be in the format :emoji:
alt
string
createdAt
required string format=datetime
formats
adultOnly
boolean default=false
labels
copyOf
string format=at-uri
fallbackText
string maxLength=1 default=◌
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/blue.moji.collection.item/anything",
"value": {
"$type": "blue.moji.collection.item",
"name": "asdf",
"alt": "asdf",
"createdAt": "2024-11-25T00:04:08.934Z",
"formats": {
"original": {
"$type": "blob",
"mimeType": "image/*",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"png_128": {
"$type": "blob",
"mimeType": "application/octet-stream",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 262144
},
"apng_128": {
"$bytes": "eHh4eHh4eHh4eA=="
},
"gif_128": {
"$type": "blob",
"mimeType": "application/octet-stream",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 262144
},
"webp_128": {
"$type": "blob",
"mimeType": "application/octet-stream",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 262144
},
"lottie": {
"$bytes": "eHh4eHh4eHh4eA=="
}
},
"adultOnly": true,
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"copyOf": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"fallbackText": "a"
}
}
A shareable Bluemoji pack
name
required string minLength=1 maxLength=64
description
string maxGraphemes=300 maxLength=3000
descriptionFacets
icon
blob accept=image/png,image/jpeg maxSize=1000000
adultOnly
boolean default=false
createdAt
required string format=datetime
labels
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/blue.moji.packs.pack/3lbs2eczkuk2c",
"value": {
"$type": "blue.moji.packs.pack",
"name": "asdf",
"description": "asdf",
"descriptionFacets": [
{
"did": "asdf",
"name": "asdf",
"alt": "asdf",
"adultOnly": true,
"labels": {
"values": [
{
"val": "asdf"
}
]
},
"formats": {
"png_128": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2",
"webp_128": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2",
"gif_128": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2",
"apng_128": true,
"lottie": true
}
}
],
"icon": {
"$type": "blob",
"mimeType": "image/png",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1000000
},
"adultOnly": true,
"createdAt": "2024-11-25T00:04:08.934Z",
"labels": {
"values": [
{
"val": "asdf"
}
]
}
}
}
Record representing a Bluemoji's inclusion in a specific pack. The AppView will ignore duplicate item records.
subject
required string format=at-uri // Reference (AT-URI) to the Bluemoji item record (blue.moji.collection.item).
pack
required string format=at-uri // Reference (AT-URI) to the pack record (blue.moji.packs.pack).
createdAt
required string format=datetime
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/blue.moji.packs.packitem/3lbs2eczkuk2c",
"value": {
"$type": "blue.moji.packs.packitem",
"subject": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"pack": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
A Picosky room belonging to the user.
name
string maxGraphemes=32 maxLength=320
languages
array maxLength=3 of string format=language
topic
string maxGraphemes=256 maxLength=2560 // Topic title of the room.
tags
array maxLength=20 of string
allowlist
denylist
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/social.psky.chat.room/anything",
"value": {
"$type": "social.psky.chat.room",
"name": "asdf",
"languages": [
"en-US"
],
"topic": "asdf",
"tags": [
"asdf"
],
"allowlist": {
"active": true,
"users": [
"did:plc:c3pn34agqqchkaf75v7h43dx"
]
},
"denylist": {
"active": true,
"users": [
"did:plc:c3pn34agqqchkaf75v7h43dx"
]
}
}
}
A Picosky message containing at most 2048 graphemes.
content
required string maxGraphemes=2048 maxLength=20480 // Text content.
room
required string format=at-uri
facets
reply
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/social.psky.chat.message/3lbs2eczkuk2c",
"value": {
"$type": "social.psky.chat.message",
"content": "asdf",
"room": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"facets": [
{
"index": {
"byteStart": 100,
"byteEnd": 100
},
"features": [
{
"did": "did:plc:c3pn34agqqchkaf75v7h43dx"
}
]
}
],
"reply": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
}
}
}
A declaration of a Picosky account profile.
nickname
string maxGraphemes=32 maxLength=320
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/social.psky.actor.profile/self",
"value": {
"$type": "social.psky.actor.profile",
"nickname": "asdf"
}
}
A declaration of a post.
content
required string maxLength=100000
createdAt
string format=datetime
title
string maxLength=1000
ogp
theme
string enum=github-light
blobs
isDraft
boolean // (DEPRECATED) Marks this entry as draft to tell AppViews not to show it to anyone except for the author
visibility
string enum=public,url,author default=public // Tells the visibility of the article to AppView.
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/com.whtwnd.blog.entry/3lbs2eczkuk2c",
"value": {
"$type": "com.whtwnd.blog.entry",
"content": "asdf",
"createdAt": "2024-11-25T00:04:08.934Z",
"title": "asdf",
"ogp": {
"url": "https://example.com/path/to",
"width": 100,
"height": 100
},
"theme": "github-light",
"blobs": [
{
"blobref": {
"$type": "blob",
"mimeType": "*/*",
"ref": {
"$link": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"size": 1048576
},
"name": "asdf"
}
],
"isDraft": true,
"visibility": "public"
}
}
Record containing a Frontpage comment.
content
required string maxGraphemes=10000 maxLength=100000 // The content of the comment.
createdAt
required string format=datetime // Client-declared timestamp when this comment was originally created.
parent
post
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/fyi.unravel.frontpage.comment/3lbs2eczkuk2c",
"value": {
"$type": "fyi.unravel.frontpage.comment",
"content": "asdf",
"createdAt": "2024-11-25T00:04:08.934Z",
"parent": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"post": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
}
}
}
Record containing a Frontpage vote.
subject
createdAt
required string format=datetime // Client-declared timestamp when this vote was originally created.
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/fyi.unravel.frontpage.vote/3lbs2eczkuk2c",
"value": {
"$type": "fyi.unravel.frontpage.vote",
"subject": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record containing a Frontpage post.
title
required string maxGraphemes=300 maxLength=3000 // The title of the post.
url
required string format=uri // The URL of the post.
createdAt
required string format=datetime // Client-declared timestamp when this post was originally created.
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/fyi.unravel.frontpage.post/3lbs2eczkuk2c",
"value": {
"$type": "fyi.unravel.frontpage.post",
"title": "asdf",
"url": "https://example.com/path/to",
"createdAt": "2024-11-25T00:04:08.934Z"
}
}
Record declaring an RSVP for an event.
subject
status
required string knownValues=events.smokesignal.calendar.rsvp#interested,events.smokesignal.calendar.rsvp#going,events.smokesignal.calendar.rsvp#notgoing default=events.smokesignal.calendar.rsvp#interested
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/events.smokesignal.calendar.rsvp/3lbs2eczkuk2c",
"value": {
"$type": "events.smokesignal.calendar.rsvp",
"subject": {
"uri": "at://did:plc:c3pn34agqqchkaf75v7h43dx/the.type/the-key",
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srv2"
},
"status": "events.smokesignal.calendar.rsvp#interested"
}
}
Record containing a Smoke Signal event.
name
required string maxLength=100 // The name of the event.
text
required string maxLength=3000 // The event description and content.
createdAt
required string format=datetime // Client-declared timestamp when this event was originally created.
startsAt
string format=datetime // Client-declared timestamp when this event starts.
endsAt
string format=datetime // Client-declared timestamp when this event ends.
mode
string knownValues=events.smokesignal.calendar.event#virtual,events.smokesignal.calendar.event#inperson,events.smokesignal.calendar.event#hybrid default=events.smokesignal.calendar.event#inperson // The mode of the event. // The attendance mode of the event.
status
string knownValues=events.smokesignal.calendar.event#scheduled,events.smokesignal.calendar.event#rescheduled,events.smokesignal.calendar.event#cancelled,events.smokesignal.calendar.event#postponed default=events.smokesignal.calendar.event#scheduled // The status of the event. // The status of the event.
location
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/events.smokesignal.calendar.event/3lbs2eczkuk2c",
"value": {
"$type": "events.smokesignal.calendar.event",
"name": "asdf",
"text": "asdf",
"createdAt": "2024-11-25T00:04:08.934Z",
"startsAt": "2024-11-25T00:04:08.934Z",
"endsAt": "2024-11-25T00:04:08.934Z",
"mode": "events.smokesignal.calendar.event#virtual",
"status": "events.smokesignal.calendar.event#scheduled",
"location": [
{
"country": "US",
"postalCode": "asdf",
"region": "asdf",
"locality": "asdf",
"street": "asdf",
"name": "asdf"
}
]
}
}
A declaration of a Smoke Signal profile.
tz
string // The time zone of the profile.
example
{
"cid": "bafyreidtyl3inuqxuwtrzcfymwbmckauay3hujkqleqch5rzk7gi44srvx",
"uri": "at://did:plc:b3pn34agqqchkaf75v7h43dx/events.smokesignal.app.profile/self",
"value": {
"$type": "events.smokesignal.app.profile",
"tz": "asdf"
}
}
Supporting object types
Annotation of a sub-string within rich text.
index
features
uri
required string format=at-uri
Metadata tags on an atproto record, published by the author within the record.
values
Disables embedding of this post.
Allow replies from actors mentioned in your post.
Allow replies from actors you follow.
Allow replies from actors on a list.
list
required string format=at-uri
uri
required string format=at-uri
cid
required string format=cid
Deprecated: use facets instead.
index
type
required string // Expected values are 'mention' and 'link'.
value
required string
root
parent
images
video
required blob accept=video/mp4 maxSize=50000000
captions
alt
string maxGraphemes=1000 maxLength=10000 // Alt text description of the video, for accessibility.
aspectRatio
A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).
external
record
record
media
labelValues
required array of string knownValues=!hide,!no-promote,!warn,!no-unauthenticated,dmca-violation,doxxing,porn,sexual,nudity,nsfl,gore // The label values which this labeler publishes. May include global or custom labels.
labelValueDefinitions
original
blob accept=image/*,application/lottie+zip maxSize=1000000
png_128
apng_128
gif_128
webp_128
lottie
did
required string // DID of the user posting the Bluemoji
name
required string // Name of the Bluemoji in :emoji: format
alt
string
adultOnly
boolean default=false
labels
formats
active
required boolean default=false
users
required array of string format=did
Annotation of a sub-string within rich text.
index
features
url
required string format=uri
width
integer
height
integer
blobref
required blob accept=*/*
name
string
Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.
byteStart
required integer minimum=0
byteEnd
required integer minimum=0
Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.
did
required string format=did
Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.
uri
required string format=uri
Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').
tag
required string maxGraphemes=64 maxLength=640
Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.
val
required string maxLength=128 // The short string name of the value or type of this label.
Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings.
start
required integer minimum=0
end
required integer minimum=0
image
required blob accept=image/* maxSize=1000000
alt
required string // Alt text description of the image, for accessibility.
aspectRatio
lang
required string format=language
file
required blob accept=text/vtt maxSize=20000
width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.
width
required integer minimum=1
height
required integer minimum=1
uri
required string format=uri
title
required string
description
required string
thumb
blob accept=image/* maxSize=1000000
Declares a label value and its expected interpretations and behaviors.
identifier
required string maxGraphemes=100 maxLength=100 // The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).
severity
required string knownValues=inform,alert,none // How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.
blurs
required string knownValues=content,media,none // What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.
defaultSetting
string knownValues=ignore,warn,hide default=warn // The default setting for this label.
adultOnly
boolean // Does the user need to have adult content enabled in order to configure this label?
locales
Limiting blobs to 256kb because there may be many on page and these get optimised by ImgProxy anyway
type=blob maxSize=262144
64kb should be enough for anybody
type=bytes maxLength=65536
On the facet, only the CID is provided as this can be combined with the DID to create CDN URLs for non-animated blobs. For APNG and dotLottie, raw Bytes are served and require a com.atproto.repo.getRecord roundtrip on render so are marked with a boolean
png_128
string format=cid
webp_128
string format=cid
gif_128
string format=cid
apng_128
boolean default=false
lottie
boolean default=false
Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.
byteStart
required integer minimum=0
byteEnd
required integer minimum=0
Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.
did
required string format=did
Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.
uri
required string format=uri
Facet feature for a room. The text usually includes a '#' prefix, but the facet reference should not (except in the case of a room tag that includes a '#' prefix) - TODO: update when rooms are actually implemented
room
required string maxGraphemes=64 maxLength=640
Strings which describe the label in the UI, localized into a specific language.
lang
required string format=language // The code of the language these strings are written in.
name
required string maxGraphemes=64 maxLength=640 // A short human-readable name for the label.
description
required string maxGraphemes=10000 maxLength=100000 // A longer description of what the label means and why it might be applied.