Skip to content

Lexicons

Colibri’s lexicons define its wire format. The AppView validates against them, handler types are generated from them, and a change to one is a protocol change rather than an implementation detail.

They are authored in the AppView repository and published as @colibri-social/lexicons, which ships the raw JSON alongside generated TypeScript. Import those types rather than redeclaring the shapes. The definitions rendered on this page are generated from that package.

Two properties of permissioned spaces shape most of what you see below.

A space type is a lexicon. Seven of the documents here have a main definition of type space. Each lists the record collections its space may hold and carries a name written for people rather than developers, because that name is what an OAuth consent screen shows.

A record is addressed by author as well as key. Record keys are unique per repository, and a space aggregates many repositories, so a bare key is ambiguous. Message parents and reaction targets carry { did, rkey }. Role and channel references stay bare keys, because those are only ever written by the community itself.

Each declares the collections its space may hold, and the consent-screen name a user sees when an app asks for access.

social.colibri.beta.actor.preferences

lexicon v1
mainSPACEkey: literal:self

A user's own Colibri settings, mutes and read state.

social.colibri.beta.channel.text

lexicon v1
mainSPACEkey: tid

A text channel. The space key is the channel's identity, and the channel's own configuration is the social.colibri.beta.channel record at key 'self' inside it.

social.colibri.beta.channel.voice

lexicon v1
mainSPACEkey: tid

A voice channel. Holds only its own configuration record, because call state is off-protocol.

social.colibri.beta.community.configuration

lexicon v1
mainSPACEkey: literal:self

A community's operational settings and its category layout.

social.colibri.beta.community.members

lexicon v1
mainSPACEkey: literal:self

A community's membership and the roles that can be assigned within it.

social.colibri.beta.community.moderation

lexicon v1
mainSPACEkey: literal:self

A community's moderation audit log. Kept in its own space so it can be read by moderators without being readable by the whole membership.

social.colibri.beta.community.profile

lexicon v1
mainSPACEkey: literal:self

A community's public identity: the one part of a community that can be read before joining it.

Records persisted in a user’s or a community’s repository, read through the space they belong to.

social.colibri.beta.actor.mute

lexicon v1
mainRECORDkey: tid

A muted subject. One record per mute, so unmuting is a delete rather than a rewrite of a list.

What is muted. A user or a community is named by DID, a channel by its space.

createdAtstringrequiredformatdatetime

When the mute was created.

social.colibri.beta.actor.profile

lexicon v1
mainRECORDkey: literal:self

A Colibri profile. A public record on the user's own repo, kept separate from app.bsky.actor.profile so Colibri never needs write access to the Bluesky record.

displayNamestringmaxLength640maxGraphemes64

Display name.

descriptionstringmaxLength2560maxGraphemes256

Bio.

avatarblobacceptimage/jpeg, image/png, image/gif, image/webp

Avatar image.

bannerblobacceptimage/jpeg, image/png, image/gif, image/webp

Profile banner image.

syncBlueskybooleandefaultfalse

When true, displayName, description, avatar and banner are served from app.bsky.actor.profile instead of from this record.

Colibri-only profile theming.

preferredBadgestringmaxLength64

Label value of the badge to display. Absent means the highest-priority badge.

#themeOBJECT

Colibri-only profile theming. Always read from this record, even when syncBluesky is set.

accentColorstringmaxLength7

Accent colour as #rrggbb.

bannerColorstringmaxLength7

Fallback banner colour as #rrggbb, used when no banner image is set.

Two-colour gradient.

#themeGradientOBJECT

A two-colour gradient.

primarystringmaxLength7

Primary colour as #rrggbb.

secondarystringmaxLength7

Secondary colour as #rrggbb.

social.colibri.beta.actor.settings

lexicon v1
mainRECORDkey: literal:self

A user's Colibri settings.

notificationLevelstringdefaultallknownall | mentionsAndReplies

Which messages produce a notification.

communityOrderarray<string>

The user's communities in their preferred sidebar order.

gifFavoritesarray<embed.defs#gifView>

GIFs the user saved from the picker, stored whole. A saved GIF has to render without another lookup, and an identifier cannot be turned back into one: a GIF favourited from a chat message carries its own URL as the id rather than a provider key, so no provider can resolve it.

social.colibri.beta.category

lexicon v1
mainRECORDkey: tid

A named group of channels within a community.

namestringrequiredminLength1maxLength32

The category's name.

channelOrderarray<string>required

The channels in this category, in display order, by space key.

social.colibri.beta.channel

lexicon v1
mainRECORDkey: literal:self

A channel's configuration. Lives at key 'self' in the channel's own space. The space type says whether it is a text or voice channel, and the space key is the channel's identity.

namestringrequiredminLength1maxLength32

The channel's name.

descriptionstringmaxLength256

The channel's topic.

ownerOnlybooleandefaultfalse

Whether only community admins may post.

allowedRolesarray<string>

Roles allowed to post here. Empty means no role restriction.

allowedMembersarray<string>

Members allowed to post here in addition to allowedRoles.

linkEmbedsboolean

Whether link previews are shown here. Absent means the community default.

migratedFromstringformatat-uri

Set on a channel created by migrating a repo-backed community. Points at the legacy channel record whose history is served alongside this channel.

visibleToRolesarray<string>

Roles that may read this channel. Empty or absent means every member may read it. A non-empty list makes the channel private: the community declines space credentials for it to anyone outside the list, so it is enforced by the protocol rather than only by a read handler.

visibleToMembersarray<string>

Members that may read this channel in addition to visibleToRoles.

social.colibri.beta.channel.read

lexicon v1
mainRECORDkey: any

Read state for one community's channels. The record key is the community DID, which bounds each record to a community's channel count and makes leaving a community a single delete.

communitystringrequiredformatdid

The community these cursors belong to. Matches the record key.

cursorsarray<channel.read#cursor>required

One cursor per read channel.

#cursorOBJECT

The last message read in one channel.

channelstringrequiredformatrecord-key

The channel's space key.

cursorstringrequiredformattid

Record key of the last message read. Message keys are TIDs, so they order by time.

social.colibri.beta.community

lexicon v1
mainRECORDkey: literal:self

A community's public identity. Lives in the community's profile space, which is readable without membership unless the community is private.

namestringrequiredminLength1maxLength32

The community's name.

managingAppstringrequiredformatdid

The AppView that manages this community's spaces, named without a service fragment. Clients read it here rather than from the space policy, because com.atproto.simplespace.getSpace only serves a policy to a caller already authorized for that space, which a prospective member is not.

descriptionstringmaxLength256

A short description.

pictureblobmaxSize1048576acceptimage/jpeg, image/png, image/gif, image/webp

Square image shown as the community's icon.

bannerblobmaxSize4194304acceptimage/jpeg, image/png, image/gif, image/webp

Wide image shown at the top of the community.

migratedFromstringformatat-uri

Set on a community created by migrating a repo-backed community. Points at the legacy community record it replaces, so its history can be served alongside.

social.colibri.beta.community.settings

lexicon v1
mainRECORDkey: literal:self

A community's operational settings. Separate from the profile record so the two have different read audiences.

categoryOrderarray<string>required

The order categories are displayed in.

requiresApprovalToJoinbooleanrequireddefaultfalse

Whether joining produces an application a moderator must approve.

linkEmbedsbooleandefaulttrue

Whether link previews are shown by default. Channels may override this.

labelersarray<string>

DIDs whose labels this community honours, in addition to the community's own. Empty means the community labels its content itself.

social.colibri.beta.label

lexicon v1
mainRECORDkey: tid

A label applied to a record in the same space. Permissioned content cannot be taken down by anyone but its author, so moderation of content is advisory: a reader honours the labels published by the labelers its community names.

subjectbeta.label#subjectrequired

The record this label applies to.

valstringrequiredknownhidden | spoiler | embeds-suppressedmaxLength128

The label value. `hidden` is enforced: the AppView withholds a hidden record instead of serving it. `spoiler` and `embeds-suppressed` are display hints the AppView passes through for the client to honour.

scopearray<string>

URIs within the subject record the label narrows to, for values that can apply to part of a record. Absent means the whole record.

negbooleandefaultfalse

Whether this record retracts an earlier label of the same value.

reasonstringmaxLength512

Human-readable reason.

createdAtstringrequiredformatdatetime

When the label was applied.

#subjectOBJECT

The labelled record, addressed within the space the label lives in.

didstringrequiredformatdid

DID of the repo holding the labelled record.

collectionstringrequiredformatnsid

The labelled record's collection.

rkeystringrequiredformatrecord-key

The labelled record's key.

social.colibri.beta.member

lexicon v1
mainRECORDkey: any

A community member. The record key is the member's DID, so membership is a direct lookup and a member cannot hold two of these.

subjectstringrequiredformatdid

The member's DID. Matches the record key.

rolesarray<string>

Roles assigned to this member.

joinedAtstringrequiredformatdatetime

When the member was admitted.

nicknamestringmaxLength32

Per-community display name override.

social.colibri.beta.message

lexicon v1
mainRECORDkey: tid

A message in a channel. Lives in the author's own permissioned repo for the channel's space.

textstringrequiredmaxLength2048

The message body.

facetsarray<richtext.facet>

Annotations over ranges of the text.

createdAtstringrequiredformatdatetime

When the message was sent.

updatedAtstringformatdatetime

When the message was last edited. Absent means never edited.

The message this one replies to.

attachmentsarray<beta.message#attachment>

Files attached to this message.

suppressedEmbedsarray<string>

URLs from this message's link facets whose preview the author chose not to show. Moderator suppression is a label instead.

#attachmentOBJECT

A file attached to a message.

blobblobrequired

The attached file.

namestringmaxLength256

The original filename.

social.colibri.beta.moderation

lexicon v1
mainRECORDkey: tid

An audit log entry for a moderation action taken by the community. Enforcement is the space authority declining to issue credentials, and this records that it happened.

actionstringrequiredknownban | unban | kick

The action taken.

subjectstringrequiredformatdid

The member the action was taken against.

reasonstringmaxLength512

Human-readable reason.

createdBystringrequiredformatdid

DID of the moderator who took the action.

createdAtstringrequiredformatdatetime

When the action was taken.

social.colibri.beta.reaction

lexicon v1
mainRECORDkey: tid

A reaction to a message in the same channel space.

emojistringrequiredmaxLength64

The reaction, as an emoji or a custom shortcode.

targetbeta.defs#recordRefrequired

The message being reacted to.

social.colibri.beta.role

lexicon v1
mainRECORDkey: tid

A named bundle of permissions assignable to community members.

namestringrequiredminLength1maxLength32

Display name.

colorstringmaxLength7

Hex colour as #rrggbb.

permissionsarray<string>required

Permissions granted by this role.

positionintegerrequired

Hierarchy position. Higher outranks lower.

hoistedbooleandefaultfalse

Whether holders are listed separately in the member list.

mentionablebooleandefaultfalse

Whether @role mentions resolve to this role.

protectedbooleandefaultfalse

Whether this role is exempt from modification and deletion. Set on the owner role created with the community.

channelOverridesarray<beta.role#channelOverride>

Per-channel permission overrides.

#channelOverrideOBJECT

Allow and deny lists scoped to a single channel.

channelstringrequiredformatrecord-key

The space key of the channel this override applies to.

allowarray<string>

Permissions granted within this channel.

denyarray<string>

Permissions denied within this channel. Deny beats both the base permissions and allow.

Reusable object definitions (*.defs) referenced by records, queries and events across the other lexicons. The event socket’s frames live here, in social.colibri.beta.sync.defs.

social.colibri.beta.actor.defs

lexicon v1
#profileViewOBJECT

A Colibri user as the AppView serves them: identity, resolved profile, and presence.

didstringrequiredformatdid

The user's DID.

handlestringrequiredformathandle

The user's handle, or 'handle.invalid' when it does not resolve.

displayNamestringrequired

Resolved display name, falling back to the handle.

descriptionstring

Resolved bio.

avatarstringformaturi

URL of the user's avatar, served by this AppView's blob proxy.

bannerstringformaturi

URL of the user's profile banner, served by this AppView's blob proxy.

isBotbooleanrequired

Whether the account is labelled as an automated account.

syncBlueskybooleanrequired

Whether the mirrored profile fields come from app.bsky.actor.profile.

Colibri-only profile theming, read from the profile record even when the mirrored fields come from Bluesky.

preferredBadgestring

Label value of the badge the user chose to display.

Live presence, when the AppView is tracking any.

#presenceOBJECT

A user's live, off-protocol state.

onlineStatestringrequiredknownonline | away | dnd | offline

Derived online state.

The user's status line.

Where the user is connected for voice, if anywhere.

#statusOBJECT

A user's status line.

textstringrequiredmaxLength32

The status text.

emojistring

An emoji shown beside the status.

#voiceStateOBJECT

A user's voice connection.

channelstringrequiredformatspace-ref

The voice channel the user is connected to.

mutedboolean

Whether the user's microphone is muted, for any reason.

deafenedboolean

Whether the user has incoming audio silenced, for any reason.

serverMutedboolean

Whether a moderator muted them. When this is true they cannot unmute themselves, and a client must not offer them the control.

serverDeafenedboolean

Whether a moderator deafened them. When this is true they cannot undeafen themselves.

#preferencesOBJECT

The authenticated user's own settings, as the AppView currently holds them.

notificationLevelstringrequiredknownall | mentionsAndReplies

Which messages produce a notification.

communityOrderarray<string>required

Communities in preferred sidebar order.

mutesarray<actor.defs#mute>required

Subjects the user has muted.

gifFavoritesarray<embed.defs#gifView>required

GIFs saved from the picker, stored whole.

#muteOBJECT

A muted subject.

What is muted. A user or a community is named by DID, a channel by its space.

createdAtstringrequiredformatdatetime

When the mute was created.

#mutedActorOBJECT

A muted user or community.

didstringrequiredformatdid

The muted user or community.

#mutedChannelOBJECT

A muted channel. Muting a channel silences it without leaving the community it belongs to.

channelstringrequiredformatspace-ref

The muted channel's space.

social.colibri.beta.channel.defs

lexicon v1
#messageViewOBJECT

A message as the AppView serves it, with its author, reactions and labels resolved.

uristringrequiredformatat-uri

The message's full space AT-URI.

rkeystringrequiredformatrecord-key

The message's record key, for addressing it as a reply target.

channelstringrequiredformatspace-ref

The channel space the message lives in.

Who wrote it.

textstringrequired

The message body.

facetsarray<richtext.facet>

Rich text annotations.

createdAtstringrequiredformatdatetime

When it was sent.

updatedAtstringformatdatetime

When it was last edited. Absent means never edited.

The message being replied to, or a stand-in when it can no longer be served. Never itself nested.

attachmentsarray<channel.defs#attachmentView>required

Attached files.

reactionsarray<channel.defs#reactionView>required

Reactions, aggregated by emoji.

labelsarray<community.defs#labelView>required

Labels from labelers this community honours. `src` says who applied each one. A `hidden` label is enforced by the AppView, which withholds the message rather than serving it, so a message that reaches you carries only labels you are meant to act on for display, such as `spoiler`.

suppressedEmbedsarray<string>

URLs whose preview the author chose not to show.

Resolved link previews.

legacyboolean

Whether this message comes from the repo-backed community this channel was migrated from, and is therefore immutable.

#deletedMessageViewOBJECT

Stands in for a message the AppView will not serve: deleted by its author, or hidden by a moderator. The two cases are deliberately indistinguishable, so hiding does not leak what was hidden. Render it as an unavailable message.

uristringrequiredformatat-uri

The message's full space AT-URI.

rkeystringrequiredformatrecord-key

The message's record key.

channelstringrequiredformatspace-ref

The channel space it lived in.

#attachmentViewOBJECT

A file attached to a message.

urlstringrequiredformaturi

URL served by this AppView's blob proxy.

namestringmaxLength256

The original filename.

mimeTypestringrequired

The sniffed content type.

sizeinteger

Size in bytes.

widthinteger

Intrinsic pixel width, when the file is a decodable image or video.

heightinteger

Intrinsic pixel height, when the file is a decodable image or video.

#reactionViewOBJECT

Reactions to a message with one emoji.

emojistringrequired

The emoji or custom shortcode.

countintegerrequired

How many people reacted.

reactorsarray<string>required

Who reacted.

viewerReactedboolean

Whether the requesting user is among them.

#unreadStatusOBJECT

Per-channel unread state for the requesting user.

channelstringrequiredformatspace-ref

The channel.

hasUnreadbooleanrequired

Whether anything is unread.

unreadMentionsintegerrequired

How many unread messages mention the user.

cursorstringformattid

The user's current read cursor.

social.colibri.beta.community.defs

lexicon v1
#communityViewOBJECT

A community as the AppView serves it.

didstringrequiredformatdid

The community's DID, which is the authority for all of its spaces.

handlestringrequiredformathandle

The community's handle.

managingAppstringrequiredformatdid

The AppView that manages this community's spaces. When it is not the AppView that served this view, the client must talk to that AppView for this community's reads, writes, events and voice.

namestringrequired

The community's name.

descriptionstring

The community's description.

picturestringformaturi

URL of the community's icon, served by this AppView's blob proxy.

bannerstringformaturi

URL of the community's banner, served by this AppView's blob proxy.

requiresApprovalToJoinbooleanrequired

Whether joining produces an application to approve.

linkEmbedsbooleanrequired

Whether link previews are shown by default.

labelersarray<string>

DIDs whose labels this community honours.

migratedFromstringformatat-uri

The repo-backed community this one replaces, if any.

memberCountinteger

Number of admitted members.

The requesting user's relationship to this community.

#viewerStateOBJECT

The requesting user's relationship to a community.

isMemberbooleanrequired

Whether the user holds a member record.

isOwnerboolean

Whether the user holds a protected role.

isBannedboolean

Whether the user is banned.

applicationPendingboolean

Whether the user has an unapproved application.

rolesarray<string>

Roles the user holds.

permissionsarray<string>

Effective community-wide permissions.

#categoryViewOBJECT

A category and the channels in it.

rkeystringrequiredformatrecord-key

The category's record key.

namestringrequired

The category's name.

channelsarray<community.defs#channelView>required

Channels in display order.

#channelViewOBJECT

A channel as the AppView serves it. The channel's identity is its space.

spacestringrequiredformatspace-ref

The channel's space, which is its identity.

typestringrequiredknownsocial.colibri.beta.channel.text | social.colibri.beta.channel.voice

The channel's space type.

namestringrequired

The channel's name.

descriptionstring

The channel's topic.

categorystringformatrecord-key

The category this channel is listed under.

ownerOnlyboolean

Whether only admins may post.

allowedRolesarray<string>

Roles allowed to post.

allowedMembersarray<string>

Members allowed to post.

linkEmbedsboolean

Whether link previews are shown here.

migratedFromstringformatat-uri

The legacy channel whose history is served alongside this one.

The requesting user's access to this channel.

visibleToRolesarray<string>

Roles that may read this channel. Empty means every member may.

visibleToMembersarray<string>

Members that may read this channel beyond visibleToRoles.

privateboolean

Whether the channel restricts who may read it, rather than only who may post.

#channelViewerStateOBJECT

The requesting user's access to a channel.

canReadbooleanrequired

Whether the user may read this channel.

canPostbooleanrequired

Whether the user may post in this channel.

permissionsarray<string>

Effective permissions in this channel, after per-channel role overrides.

#roleViewOBJECT

A role.

rkeystringrequiredformatrecord-key

The role's record key.

namestringrequired

Display name.

colorstringmaxLength7

Hex colour as #rrggbb.

permissionsarray<string>required

Permissions granted.

positionintegerrequired

Hierarchy position. Higher outranks lower.

hoistedboolean

Whether holders are listed separately.

mentionableboolean

Whether @role mentions resolve to this role.

protectedboolean

Whether the role is exempt from modification and deletion.

channelOverridesarray<community.defs#roleChannelOverride>

Per-channel overrides.

memberCountinteger

Number of members holding this role.

#roleChannelOverrideOBJECT

Allow and deny lists scoped to one channel.

channelstringrequiredformatrecord-key

The channel's space key.

allowarray<string>

Permissions granted here.

denyarray<string>

Permissions denied here.

#memberViewOBJECT

An admitted community member.

The member.

rolesarray<string>required

Roles held, highest first.

joinedAtstringrequiredformatdatetime

When the member was admitted.

nicknamestringmaxLength32

Per-community display name override.

#applicationViewOBJECT

A pending request to join a community that requires approval.

The applicant.

createdAtstringrequiredformatdatetime

When the application was made.

dismissedbooleanrequired

Whether a moderator has hidden this from the active queue.

#invitationViewOBJECT

An invitation code.

codestringrequired

The invitation code.

createdBystringrequiredformatdid

Who created it.

activebooleanrequired

Whether it can still be redeemed.

createdAtstringrequiredformatdatetime

When it was created.

expiresAtstringformatdatetime

When it stops being redeemable, if ever.

usesinteger

How many times it has been redeemed.

maxUsesinteger

How many times it may be redeemed, if limited.

#moderationViewOBJECT

An entry in a community's moderation log.

rkeystringrequiredformatrecord-key

The log entry's record key.

actionstringrequiredknownban | unban | kick

The action taken.

subjectactor.defs#profileViewrequired

Who it was taken against.

reasonstringmaxLength512

Human-readable reason.

createdBystringrequiredformatdid

Which moderator took it.

createdAtstringrequiredformatdatetime

When it was taken.

#labelViewOBJECT

A label applied to a record.

srcstringrequiredformatdid

The labeler that applied it.

valstringrequired

The label value.

scopearray<string>

What the label narrows to.

reasonstringmaxLength512

Human-readable reason.

createdAtstringrequiredformatdatetime

When it was applied.

#bannedActorViewOBJECT

A member who is currently banned from a community. Derived from the moderation log, which records bans and unbans as separate entries.

The banned member.

reasonstringmaxLength512

Why they were banned.

bannedBystringrequiredformatdid

Which moderator banned them.

bannedAtstringrequiredformatdatetime

When the ban took effect.

#legacyCommunityViewOBJECT

A repo-backed community that has not been migrated onto spaces yet, as read live from its own public repo. This is not an indexed view: the AppView holds nothing about a community until it is migrated.

didstringrequiredformatdid

The legacy community's DID, which becomes the authority for its spaces once migrated.

handlestringformathandle

The community's handle, when its DID document still resolves one.

namestringrequired

The community's name.

descriptionstring

The community's description.

memberCountinteger

How many member records the legacy repo holds.

channelCountinteger

How many channel records the legacy repo holds. Migration recreates one space per channel.

viewerIsAdminboolean

Whether the requesting user may migrate this community. Only an administrator of the legacy community can.

social.colibri.beta.defs

lexicon v1
#recordRefOBJECT

A reference to a record in the same space. Record keys are unique per repo rather than per space, so a bare key cannot address a record in a space that aggregates many authors.

didstringrequiredformatdid

DID of the repo holding the referenced record.

rkeystringrequiredformatrecord-key

Record key of the referenced record.

social.colibri.beta.embed.defs

lexicon v1
#linkEmbedOBJECT

A link preview.

uristringrequiredformaturi

The URL previewed.

titlestring

Page title.

descriptionstring

Page description.

siteNamestring

Publisher name.

Preview image.

Playable video.

#embedImageOBJECT

A preview image.

urlstringrequiredformaturi

URL served by this AppView's image proxy.

widthinteger

Intrinsic pixel width.

heightinteger

Intrinsic pixel height.

altstring

Alternative text.

#embedVideoOBJECT

A playable video.

urlstringrequiredformaturi

URL served by this AppView's video proxy.

mimeTypestringrequiredknownvideo/mp4 | video/webm

Content type.

widthinteger

Intrinsic pixel width.

heightinteger

Intrinsic pixel height.

durationinteger

Duration in seconds.

#gifViewOBJECT

A GIF from the picker.

idstringrequired

Provider identifier, stable enough to save as a favourite.

urlstringrequiredformaturi

Full-size GIF URL.

previewUrlstringrequiredformaturi

Smaller preview URL for the picker grid.

widthintegerrequired

Intrinsic pixel width.

heightintegerrequired

Intrinsic pixel height.

titlestring

Human-readable title.

#gifCategoryOBJECT

A category in the GIF picker.

namestringrequired

Category name.

previewUrlstringformaturi

Representative image for the category.

social.colibri.beta.notification.defs

lexicon v1
#notificationViewOBJECT

A notification for the requesting user.

idstringrequired

Opaque identifier, used to mark this notification seen.

kindstringrequiredknownmention | reply | message

Why it was raised.

Who caused it.

channelstringrequiredformatspace-ref

The channel it happened in.

communitystringrequiredformatdid

The community it happened in.

The message, when still readable.

mentionRolestring

Name of the role whose mention raised this, for role mentions.

indexedAtstringrequiredformatdatetime

When the AppView raised it.

seenAtstringformatdatetime

When the user marked it seen.

social.colibri.beta.richtext.facet

lexicon v1
mainOBJECT

An annotation over a range of a message's text.

#byteSliceOBJECT

The range a feature applies to, as zero-based byte offsets into the UTF-8 encoded text. Start is inclusive, end is exclusive.

byteStartintegerrequiredmin0

First byte of the range, inclusive.

byteEndintegerrequiredmin0

Byte after the range, exclusive.

#boldOBJECT

Bold text.

#italicOBJECT

Italic text.

#underlineOBJECT

Underlined text.

#strikethroughOBJECT

Struck-through text.

#codeOBJECT

Inline code.

#codeblockOBJECT

A multi-line code block.

langstringmaxLength32

Language hint.

#quoteOBJECT

A block quote.

#headingOBJECT

A heading line.

levelintegerrequiredmin1max3

Heading level, from 1 to 3.

#listOBJECT

A list item line.

orderedbooleanrequired

Whether the list is numbered.

#subtextOBJECT

Small, muted text.

#spoilerOBJECT

Text hidden until revealed.

#mentionOBJECT

A user mention.

didstringrequiredformatdid

The mentioned user.

#roleOBJECT

A role mention. Roles are only ever written by the community, and a channel space's authority is its community, so the role key alone is unambiguous.

rolestringrequiredformatrecord-key

The mentioned role.

#channelOBJECT

A channel reference, by the channel's space key within the same community.

channelstringrequiredformatrecord-key

The referenced channel.

#timeOBJECT

A timestamp rendered in the reader's locale.

datetimestringrequiredformatdatetime

The instant being referred to.

stylestringknowntime-short | time-long | date-short | date-long | datetime-short | datetime-long | relative

How to render it.

social.colibri.beta.sync.defs

lexicon v1
#subscribeOBJECT

Adds communities and channels to what this connection receives. Subscription is explicit: a connection is sent nothing it did not ask for.

communitiesarray<string>

Communities to start receiving events for.

channelsarray<string>

Channels to start receiving messages for.

#unsubscribeOBJECT

Removes communities and channels from what this connection receives.

communitiesarray<string>

Communities to stop receiving events for.

channelsarray<string>

Channels to stop receiving messages for.

#heartbeatOBJECT

Keeps the connection alive and tells the AppView the user is still present. The server answers with an ack.

#typingOBJECT

Reports that the user is typing in a channel.

channelstringrequiredformatspace-ref

The channel being typed in.

#viewChannelOBJECT

Reports which channel the user is looking at, which drives read state and away detection. An absent channel means they are looking at none.

channelstringformatspace-ref

The channel now in view.

#wroteToOBJECT

Reports that the user just wrote a record to a space, so the AppView can pull it without waiting for the space host to forward a notification. Honoured only for a space this connection already receives.

spacestringrequiredformatspace-ref

The space that was written to.

revstringformattid

The revision the write produced, when the client knows it.

#setPresenceOBJECT

Updates the user's own presence over the socket.

onlineStatestringknownonline | away | dnd | offline

Requested online state.

The user's own voice state, when connected to a voice channel.

#voiceSelfStateOBJECT

A user's own voice state.

channelstringrequiredformatspace-ref

The voice channel.

mutedboolean

Whether the microphone is muted.

deafenedboolean

Whether the user has deafened themselves.

#ackOBJECT

Answers a heartbeat.

#errorOBJECT

Something the client sent could not be acted on.

errorstringrequiredknownInvalidFrame | Forbidden | NotFound | RateLimited

Error name.

messagestring

Human-readable detail.

#subscribedOBJECT

Confirms what this connection is now receiving, after a subscribe or unsubscribe. Anything the user is not entitled to read is silently absent.

communitiesarray<string>required

Communities being received.

channelsarray<string>required

Channels being received.

#messageEventOBJECT

A message was written, edited, or deleted in a subscribed channel.

eventstringrequiredknowncreate | update | delete

What happened.

channelstringrequiredformatspace-ref

The channel it happened in.

The message. Absent on delete, where the reference alone identifies it.

Which message, for deletes.

#reactionEventOBJECT

A reaction was added or removed in a subscribed channel.

eventstringrequiredknowncreate | delete

What happened.

channelstringrequiredformatspace-ref

The channel it happened in.

targetbeta.defs#recordRefrequired

The message reacted to.

emojistringrequired

The emoji or custom shortcode.

actorstringrequiredformatdid

Who reacted.

#channelEventOBJECT

A channel was created, changed, or deleted.

eventstringrequiredknowncreate | update | delete

What happened.

communitystringrequiredformatdid

The community it belongs to.

The channel. Absent on delete.

spacestringformatspace-ref

Which channel, for deletes.

#categoryEventOBJECT

A category was created, changed, or deleted.

eventstringrequiredknowncreate | update | delete

What happened.

communitystringrequiredformatdid

The community it belongs to.

The category. Absent on delete.

rkeystringformatrecord-key

Which category, for deletes.

#roleEventOBJECT

A role was created, changed, or deleted.

eventstringrequiredknowncreate | update | delete

What happened.

communitystringrequiredformatdid

The community it belongs to.

The role. Absent on delete.

rkeystringformatrecord-key

Which role, for deletes.

#memberEventOBJECT

Someone joined, left, or had their roles changed.

eventstringrequiredknownjoin | leave | update

What happened. A kick or a ban arrives as a leave.

communitystringrequiredformatdid

The community.

The member. Absent on leave.

subjectstringformatdid

Who, for leaves.

#communityEventOBJECT

A community's profile or settings changed.

eventstringrequiredknownupdate | delete

What happened.

communitystringrequiredformatdid

The community.

The community. Absent on delete.

#applicationEventOBJECT

The pending-application queue changed. Only sent to members who can manage approvals.

eventstringrequiredknowncreate | approve | dismiss | undismiss

What happened.

communitystringrequiredformatdid

The community.

subjectstringrequiredformatdid

The applicant.

The application. Absent on approve.

#labelEventOBJECT

A label was applied or retracted on a record in a subscribed space.

eventstringrequiredknowncreate | negate

What happened.

spacestringrequiredformatspace-ref

The space the labelled record lives in.

subjectbeta.label#subjectrequired

The labelled record.

valstringrequired

The label value.

srcstringrequiredformatdid

The labeler.

#moderationEventOBJECT

A moderation action was logged. Only sent to members who can read the log.

communitystringrequiredformatdid

The community.

The log entry.

#notificationEventOBJECT

A notification was raised for the connected user.

The notification.

#seenEventOBJECT

The connected user marked notifications seen somewhere else, so this client should clear the same badges.

unreadintegerrequired

The user's remaining unread count.

channelstringformatspace-ref

The channel that was marked seen, when it was a single channel.

seenAtstringformatdatetime

The point everything was marked seen up to.

#presenceEventOBJECT

Someone's presence changed.

didstringrequiredformatdid

Whose presence changed.

presenceactor.defs#presencerequired

Their new presence.

#preferencesEventOBJECT

The connected user changed their own preferences somewhere else.

preferencesactor.defs#preferencesrequired

Their preferences as they now stand.

#typingEventOBJECT

Someone is typing in a subscribed channel.

didstringrequiredformatdid

Who is typing.

channelstringrequiredformatspace-ref

Where.

#voiceEventOBJECT

A voice channel's participants changed.

eventstringrequiredknownjoin | leave | update | speaking

What happened.

channelstringrequiredformatspace-ref

The voice channel.

didstringrequiredformatdid

Who.

Their voice state. Absent on leave.

speakingboolean

Whether they are currently speaking, on speaking events.

#communityProgressEventOBJECT

Progress while a community is being created, which takes several PDS round-trips.

stepstringrequiredknowncreatingAccount | creatingSpaces | writingProfile | creatingOwnerRole | creatingStarterChannels | done | failed

What the AppView is doing now.

completedintegerrequired

Steps finished.

totalintegerrequired

Steps in total.

communitystringformatdid

The community, once its account exists.

messagestring

Human-readable detail, set on failure.

social.colibri.beta.voice.defs

lexicon v1
#rtpCapabilitiesOBJECT

The RTP capabilities a WebRTC endpoint supports.

payloadunknown

The opaque mediasoup capability blob.

#transportOptionsOBJECT

Parameters for creating one side of a WebRTC transport.

idstringrequired

The transport's identifier.

iceParametersunknownrequired

The opaque mediasoup ICE parameters blob.

iceCandidatesarray<unknown>required

The mediasoup ICE candidates, one opaque blob per candidate. This is an array, not a single object, because that is what a WebRTC transport hands back.

dtlsParametersunknownrequired

The opaque mediasoup DTLS parameters blob.

directionstringknownsend | recv

Which side of the call this transport carries.

#producerInfoOBJECT

A media producer available to consume.

producerIdstringrequired

The producer's identifier.

didstringrequiredformatdid

Who is producing this media.

kindstringrequiredknownaudio | video

The media kind.

pausedboolean

Whether the producer is currently paused.

sourcestringknownmicrophone | camera | screen

What the producer captures.

#consumerOptionsOBJECT

Parameters for consuming one producer.

idstringrequired

The consumer's identifier.

producerIdstringrequired

The producer being consumed.

kindstringrequiredknownaudio | video

The media kind.

rtpParametersunknownrequired

The opaque mediasoup RTP parameters blob.

#speakingUpdateOBJECT

A change in whether someone is currently speaking.

didstringrequiredformatdid

Who this update is about.

speakingbooleanrequired

Whether they are currently speaking.

levelinteger

An audio level in dBFS.

#joinOBJECT

Joins a voice channel. A connection must join before sending any other frame, and joining a second channel leaves the first.

channelstringrequiredformatspace-ref

The voice channel to join.

#leaveOBJECT

Leaves the voice channel this connection is joined to.

#getRtpCapabilitiesOBJECT

Requests the router's RTP capabilities for the joined channel.

#createTransportOBJECT

Requests a new WebRTC transport for the joined channel.

directionstringrequiredknownsend | recv

Whether this transport will send or receive media.

#connectTransportOBJECT

Completes DTLS negotiation for a transport this connection created.

transportIdstringrequired

The transport to connect.

dtlsParametersunknownrequired

The opaque mediasoup DTLS parameters blob.

#produceOBJECT

Starts producing media on a send transport this connection created.

transportIdstringrequired

The send transport to produce on.

kindstringrequiredknownaudio | video

The media kind.

rtpParametersunknownrequired

The opaque mediasoup RTP parameters blob.

sourcestringrequiredknownmicrophone | camera | screen

What this producer captures.

#closeProducerOBJECT

Closes a producer this connection owns.

producerIdstringrequired

The producer to close.

#consumeOBJECT

Starts consuming another peer's producer on a receive transport this connection created.

transportIdstringrequired

The receive transport to consume on.

producerIdstringrequired

The producer to consume.

rtpCapabilitiesunknownrequired

This connection's opaque mediasoup RTP capabilities blob.

#resumeConsumerOBJECT

Resumes a consumer this connection created, which is created paused by default.

consumerIdstringrequired

The consumer to resume.

#setSelfStateOBJECT

Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged.

mutedboolean

Whether the microphone is muted.

deafenedboolean

Whether incoming audio is silenced.

#heartbeatOBJECT

Keeps the connection alive. The server answers with an ack.

#ackOBJECT

Answers a heartbeat.

#errorOBJECT

Something the client sent could not be acted on.

errorstringrequiredknownInvalidFrame | NotJoined | ChannelNotFound | NotVoiceChannel | Forbidden | NotFound

Error name.

messagestring

Human-readable detail.

#joinedOBJECT

Confirms this connection has joined a voice channel.

channelstringrequiredformatspace-ref

The voice channel now joined.

#peerJoinedOBJECT

Another peer joined the voice channel this connection is in.

didstringrequiredformatdid

Who joined.

#peerLeftOBJECT

A peer left the voice channel this connection is in.

didstringrequiredformatdid

Who left.

#producerRemovedOBJECT

A peer's producer closed.

producerIdstringrequired

The producer that closed.

didstringrequiredformatdid

Whose producer this was.

#disconnectedOBJECT

The server removed this client from the voice channel. Sent only to the client it applies to.

reasonstringknownmoderator | superseded | channelGone | forbidden

Why it happened.

#moderationChangedOBJECT

A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them.

didstringrequiredformatdid

Whose state changed.

mutedbooleanrequired

Whether the microphone is muted, for any reason.

deafenedbooleanrequired

Whether incoming audio is silenced, for any reason.

serverMutedboolean

Whether a moderator muted them. When this is true the peer cannot unmute themselves.

serverDeafenedboolean

Whether a moderator deafened them. When this is true the peer cannot undeafen themselves.

Read-only GET endpoints served by the AppView.

social.colibri.beta.actor.getDeletionStatus

lexicon v1
mainQUERY

Gets what would happen if the requesting user deleted their account.

encodingapplication/json
recordsintegerrequired

How many indexed records would be removed.

notificationsintegerrequired

How many notifications would be removed.

soleOwnedCommunitiesarray<community.defs#communityView>required

Communities the user solely owns, which block deletion until transferred or deleted.

AuthRequired

The request has no valid service auth.

social.colibri.beta.actor.getPreferences

lexicon v1
mainQUERY

Gets the requesting user's own settings, as the AppView currently holds them.

encodingapplication/json
preferencesactor.defs#preferencesrequired

The requesting user's settings.

AuthRequired

The request has no valid service auth.

social.colibri.beta.actor.getProfile

lexicon v1
mainQUERY

Gets a user's profile.

actorstringrequiredformatat-identifier

The user's DID or handle.

encodingapplication/json
profileactor.defs#profileViewrequired

The user's profile.

AuthRequired

The request has no valid service auth.

ActorNotFound

No user matches the given DID or handle.

social.colibri.beta.actor.listCommunities

lexicon v1
mainQUERY

Gets the requesting user's communities, in their preferred order.

encodingapplication/json
communitiesarray<community.defs#communityView>required

The requesting user's communities, in preferred sidebar order.

AuthRequired

The request has no valid service auth.

social.colibri.beta.blob.get

lexicon v1
mainQUERY

Serves a blob from a permissioned space through the AppView, which holds the space credential the client does not. Every byte is verified against the CID before it is served, and the content type is sniffed rather than trusted. Supports HTTP range requests.

didstringrequiredformatdid

DID of the repo holding the blob.

cidstringrequiredformatcid

The blob's CID.

spacestringformatspace-ref

The space holding the blob. Required for a blob in a permissioned space, and omitted for one on a public repo.

variantstringknownthumbnail | avatar | banner | full

A rendition of a resizable image.

filenamestring

Sets the download filename.

encoding*/*
AuthRequired

The request has no valid service auth.

Forbidden

The requesting user may not read the space holding the blob.

BlobNotFound

No blob matches the given DID and CID.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

UpstreamFailure

The repo's PDS failed while the AppView fetched the blob.

social.colibri.beta.channel.getChannel

lexicon v1
mainQUERY

Gets one channel.

channelstringrequiredformatspace-ref

The channel to get.

encodingapplication/json

The requested channel.

AuthRequired

The request has no valid service auth.

Forbidden

The requesting user may not read this channel.

ChannelNotFound

No channel matches the given space reference.

social.colibri.beta.channel.listMessages

lexicon v1
mainQUERY

Lists messages in a channel, newest first by default. Messages from the repo-backed channel this one was migrated from are included and marked legacy.

channelstringrequiredformatspace-ref

The channel to list messages from.

limitintegerdefault50min1max100

Maximum number of messages to return.

cursorstring

Pagination cursor from a previous call.

reversebooleandefaultfalse

Whether to return the oldest messages first instead of the newest.

encodingapplication/json
cursorstring

Pagination cursor for the next page.

messagesarray<channel.defs#messageView>required

The channel's messages.

AuthRequired

The request has no valid service auth.

Forbidden

The requesting user may not read this channel.

ChannelNotFound

No channel matches the given space reference.

social.colibri.beta.channel.listReactions

lexicon v1
mainQUERY

Lists everyone who reacted to one message, for the hover card.

channelstringrequiredformatspace-ref

The channel the message was posted in.

messageAuthorstringrequiredformatdid

DID of the repo holding the message.

messageRkeystringrequiredformatrecord-key

The message's record key.

emojistring

Restricts the results to reactions with this emoji.

limitintegerdefault50min1max100

Maximum number of reactions to return.

cursorstring

Pagination cursor from a previous call.

encodingapplication/json
cursorstring

Pagination cursor for the next page.

reactionsarray<channel.defs#reactionView>required

Reactions to the message, aggregated by emoji.

AuthRequired

The request has no valid service auth.

Forbidden

The requesting user may not read this channel.

ChannelNotFound

No channel matches the given space reference.

MessageNotFound

No message matches the given author and record key in that channel.

social.colibri.beta.channel.listUnreadStatus

lexicon v1
mainQUERY

Lists per-channel unread state for the requesting user.

communitystringformatdid

Restricts the results to one community. Absent returns unread state across all of the requesting user's communities.

limitintegerdefault50min1max100

Maximum number of statuses to return.

encodingapplication/json
statusesarray<channel.defs#unreadStatus>required

Unread state per channel.

AuthRequired

The request has no valid service auth.

social.colibri.beta.community.getCommunity

lexicon v1
mainQUERY

Gets a community by DID or handle.

communitystringrequiredformatat-identifier

A DID or handle identifying the community.

encodingapplication/json

The requested community.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

CommunityNotFound

No community exists at that identifier.

social.colibri.beta.community.getInvitation

lexicon v1
mainQUERY

Resolves an invitation code, so a client can show what it leads to before the user accepts. This is readable without membership.

codestringrequired

The invitation code to resolve.

encodingapplication/json

The resolved invitation.

The community the invitation leads to.

InvitationNotFound

No invitation exists with that code.

social.colibri.beta.community.listApplications

lexicon v1
mainQUERY

Lists pending requests to join a community that requires approval.

communitystringrequiredformatdid

The community to list applications for.

includeDismissedbooleandefaultfalse

Whether to include applications a moderator has hidden from the active queue.

limitintegerdefault50min1max100

Maximum number of applications to return.

cursorstring

Pagination cursor from a previous response.

encodingapplication/json
cursorstring

Pagination cursor for the next page, if more applications exist.

applicationsarray<community.defs#applicationView>required

Applications matching the request.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the approval.manage permission.

CommunityNotFound

No community exists at the given DID.

social.colibri.beta.community.listBans

lexicon v1
mainQUERY

Lists the members currently banned from a community. Being banned means the community declines to issue them space credentials, so they cannot read it. Their existing messages stay in their own repos.

communitystringrequiredformatdid

The community to list bans for.

limitintegerdefault50min1max100

Maximum number of bans to return.

cursorstring

Pagination cursor from a previous response.

encodingapplication/json
cursorstring

Pagination cursor for the next page, if more bans exist.

Members currently banned, most recently banned first.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the member.ban permission.

CommunityNotFound

No community exists at the given DID.

social.colibri.beta.community.listCategories

lexicon v1
mainQUERY

Gets the community's category layout, each category with its channels already nested. This is what a client needs to draw the sidebar in one call.

communitystringrequiredformatdid

The community to list categories of.

encodingapplication/json
categoriesarray<community.defs#categoryView>required

The community's categories, in display order.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks permission to view this community's categories.

CommunityNotFound

No community exists with that DID.

social.colibri.beta.community.listChannels

lexicon v1
mainQUERY

Lists a community's channels as a flat list, for clients that do not need the category grouping.

communitystringrequiredformatdid

The community to list channels of.

encodingapplication/json
channelsarray<community.defs#channelView>required

The community's channels.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks permission to view this community's channels.

CommunityNotFound

No community exists with that DID.

social.colibri.beta.community.listInvitations

lexicon v1
mainQUERY

Lists a community's invitation codes.

communitystringrequiredformatdid

The community to list invitations for.

limitintegerdefault50min1max100

The maximum number of results to return.

cursorstring

The cursor from a previous call, for fetching the next page.

encodingapplication/json
cursorstring

A cursor for fetching the next page.

invitationsarray<community.defs#invitationView>required

The community's invitations.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the invitation.create permission.

CommunityNotFound

No community exists with that DID.

social.colibri.beta.community.listMembers

lexicon v1
mainQUERY

Lists a community's admitted members.

communitystringrequiredformatdid

The community to list members of.

rolestringformatrecord-key

Filters to members holding this role.

limitintegerdefault50min1max100

The maximum number of results to return.

cursorstring

The cursor from a previous call, for fetching the next page.

encodingapplication/json
cursorstring

A cursor for fetching the next page.

membersarray<community.defs#memberView>required

The community's members.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks permission to list this community's members.

CommunityNotFound

No community exists with that DID.

social.colibri.beta.community.listMigratable

lexicon v1
mainQUERY

Lists the repo-backed communities the requesting user belongs to that have not been migrated onto spaces yet, so a client can offer them as a choice rather than asking for a handle. The AppView reads this live from the user's own public repo and each candidate's public repo, because nothing about an unmigrated community is indexed. Only a community that holds its own DID is listed: an older community that lived in its owner's repo cannot be migrated.

includeUnadministeredbooleandefaultfalse

Whether to include communities the user belongs to but cannot migrate. They come back with viewerIsAdmin false.

encodingapplication/json
communitiesarray<community.defs#legacyCommunityView>required

Unmigrated legacy communities, in the user's preferred sidebar order where the legacy repo recorded one. This is not paginated: a user's community list is small and every entry costs a live read.

unreadablearray<string>

Communities named by the user's repo whose own repo could not be read, so the client can say so instead of silently dropping them.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

UpstreamFailure

The requesting user's own PDS could not be read, so no candidate list could be built at all.

social.colibri.beta.community.listModerationLog

lexicon v1
mainQUERY

Lists a community's moderation audit log.

communitystringrequiredformatdid

The community to list the moderation log for.

limitintegerdefault50min1max100

Maximum number of log entries to return.

cursorstring

Pagination cursor from a previous response.

encodingapplication/json
cursorstring

Pagination cursor for the next page, if more entries exist.

entriesarray<community.defs#moderationView>required

Log entries, most recent first.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the moderation.viewLog permission.

CommunityNotFound

No community exists at the given DID.

social.colibri.beta.community.listRoles

lexicon v1
mainQUERY

Lists a community's roles.

communitystringrequiredformatdid

The community to list roles of.

encodingapplication/json
rolesarray<community.defs#roleView>required

The community's roles.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks permission to view this community's roles.

CommunityNotFound

No community exists with that DID.

social.colibri.beta.embed.getMetadata

lexicon v1
mainQUERY

Fetches and parses a link preview. The AppView fetches the URL on the client's behalf, so the client's address is never exposed to the target site.

uristringrequiredformaturi

The URL to preview.

encodingapplication/json

The parsed preview.

AuthRequired

The request has no valid service auth.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

NotFetchable

The target refused the request, timed out, or resolves to an address the AppView will not fetch.

UpstreamFailure

The target site failed while the AppView fetched or parsed it.

social.colibri.beta.embed.gifCategories

lexicon v1
mainQUERY

Lists the categories shown in the GIF picker.

encodingapplication/json
categoriesarray<embed.defs#gifCategory>required

The GIF picker's categories.

AuthRequired

The request has no valid service auth.

GifsNotConfigured

This AppView has no GIF provider key configured.

UpstreamFailure

The GIF provider failed.

social.colibri.beta.embed.searchGifs

lexicon v1
mainQUERY

Searches the GIF picker's provider.

qstringrequired

The search query.

limitintegerdefault50min1max100

Maximum number of GIFs to return.

cursorstring

Pagination cursor from a previous call.

encodingapplication/json
cursorstring

Pagination cursor for the next page.

gifsarray<embed.defs#gifView>required

GIFs matching the query.

AuthRequired

The request has no valid service auth.

GifsNotConfigured

This AppView has no GIF provider key configured.

UpstreamFailure

The GIF provider failed.

social.colibri.beta.embed.trendingGifs

lexicon v1
mainQUERY

Gets trending GIFs from the GIF picker's provider.

limitintegerdefault50min1max100

Maximum number of GIFs to return.

cursorstring

Pagination cursor from a previous call.

encodingapplication/json
cursorstring

Pagination cursor for the next page.

gifsarray<embed.defs#gifView>required

Currently trending GIFs.

AuthRequired

The request has no valid service auth.

GifsNotConfigured

This AppView has no GIF provider key configured.

UpstreamFailure

The GIF provider failed.

social.colibri.beta.notification.getUnreadCount

lexicon v1
mainQUERY

Gets how many of the requesting user's notifications are unread.

encodingapplication/json
countintegerrequired

Number of unread notifications.

AuthRequired

The request has no valid service auth.

social.colibri.beta.notification.getUnseen

lexicon v1
mainQUERY

Gets the requesting user's unseen notifications for one channel, used to render that channel's unread badge detail.

channelstringrequiredformatspace-ref

The channel to get unseen notifications for.

limitintegerdefault50min1max100

Maximum number of notifications to return.

encodingapplication/json
notificationsarray<notification.defs#notificationView>required

Unseen notifications raised in the given channel.

AuthRequired

The request has no valid service auth.

ChannelNotFound

No channel matches the given space reference.

social.colibri.beta.notification.listNotifications

lexicon v1
mainQUERY

Gets the requesting user's notifications, newest first.

limitintegerdefault50min1max100

Maximum number of notifications to return.

cursorstring

Pagination cursor from a previous call.

encodingapplication/json
cursorstring

Pagination cursor for the next page, when more notifications remain.

notificationsarray<notification.defs#notificationView>required

The requesting user's notifications, newest first.

AuthRequired

The request has no valid service auth.

social.colibri.beta.server.describeServer

lexicon v1
mainQUERY

Gets information about this AppView.

encodingapplication/json
didstringrequiredformatdid

The AppView's own identity.

softwarestringrequired

Stable software identifier, always 'colibri-appview'. Clients key on this to confirm a host is a Colibri AppView before pointing themselves at it.

flavorstringrequired

Which build of the software this is. 'vanilla' for the stock AppView, and any string a fork or a customised deployment chooses for itself.

versionstringrequired

The running software version.

handleDomainstringrequired

The domain community handles are minted under.

pdsstringrequiredformaturi

The PDS communities are created on.

contactstring

How to reach the operator.

featuresarray<string>

Optional features this AppView supports.

spaceTypesarray<string>

The space types this AppView understands.

Mutating POST endpoints served by the AppView.

social.colibri.beta.actor.deleteAccount

lexicon v1
mainPROCEDURE

Erases the requesting user's Colibri data held by this AppView. This does not touch the user's repos, which only they control.

encodingapplication/json
encodingapplication/json
deletedintegerrequired

How many indexed records were removed.

AuthRequired

The request has no valid service auth.

SoleOwnerOfCommunity

The user solely owns at least one community and must transfer or delete it before deleting their account.

social.colibri.beta.actor.grantSpaceAccess

lexicon v1
mainPROCEDURE

Hands the AppView access to one of the requesting user's personal spaces. The client mints a delegation token on its own PDS for the space and passes it here, because a delegation token is single-use and short-lived and the AppView has no OAuth session of its own. The AppView exchanges the token for a space credential and syncs the space.

encodingapplication/json
spacestringrequiredformatspace-ref

The space to grant access to.

delegationTokenstringrequired

A delegation token minted by the user's PDS for the space.

encodingapplication/json
expiresAtstringrequiredformatdatetime

When the resulting space credential expires. The client should call this again before then to keep access current.

AuthRequired

The request has no valid service auth.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

InvalidDelegationToken

The delegation token is malformed, expired, or already used.

SpaceNotFound

No space matches the given space reference.

NotAuthorized

The delegation token does not grant access to the given space.

UpstreamFailure

The user's PDS failed while the AppView exchanged the delegation token or synced the space.

social.colibri.beta.actor.putMutes

lexicon v1
mainPROCEDURE

Pushes the requesting user's mute list to the AppView, so it takes effect immediately instead of waiting for a sync notification. The client writes the underlying records to its own personal space first, then calls this. This replaces the AppView's whole copy of the user's mute list.

encodingapplication/json
mutesarray<actor.defs#mute>required

The complete, replacement mute list.

encodingapplication/json
preferencesactor.defs#preferencesrequired

The requesting user's settings, after the update.

AuthRequired

The request has no valid service auth.

social.colibri.beta.actor.putSettings

lexicon v1
mainPROCEDURE

Pushes the requesting user's social.colibri.beta.actor.settings record to the AppView, so it takes effect immediately instead of waiting for a sync notification. The client writes the record to its own personal space first, then calls this. An absent field leaves the current value unchanged.

encodingapplication/json
notificationLevelstringknownall | mentionsAndReplies

Which messages produce a notification. Absent leaves the current value unchanged.

communityOrderarray<string>

Communities in preferred sidebar order. Absent leaves the current value unchanged.

gifFavoritesarray<embed.defs#gifView>

GIFs saved from the picker, stored whole. Absent leaves the current value unchanged.

encodingapplication/json
preferencesactor.defs#preferencesrequired

The requesting user's settings, after the update.

AuthRequired

The request has no valid service auth.

InvalidRequest

A field is present but does not hold an allowed value.

social.colibri.beta.actor.setStatus

lexicon v1
mainPROCEDURE

Sets the requesting user's off-protocol presence. An absent field leaves the current value unchanged.

encodingapplication/json
textstringmaxLength32

The status text. Absent leaves the current value unchanged.

emojistring

An emoji shown beside the status. Absent leaves the current value unchanged.

onlineStatestringknownonline | away | dnd | offline

Derived online state. Absent leaves the current value unchanged.

encodingapplication/json
presenceactor.defs#presencerequired

The requesting user's presence, after the update.

AuthRequired

The request has no valid service auth.

InvalidRequest

A field is present but does not hold an allowed value.

social.colibri.beta.category.create

lexicon v1
mainPROCEDURE

Creates a category in a community.

encodingapplication/json
communitystringrequiredformatdid

The community to create the category in.

namestringrequiredminLength1maxLength32

The category's name.

encodingapplication/json

The newly created category.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the category.create permission.

CommunityNotFound

No community exists at the given DID.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.category.delete

lexicon v1
mainPROCEDURE

Deletes a category. Its channels are not deleted: they become uncategorised until moved to another category.

encodingapplication/json
communitystringrequiredformatdid

The community the category belongs to.

categorystringrequiredformatrecord-key

The category's record key.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the category.delete permission.

CommunityNotFound

No community exists at the given DID.

CategoryNotFound

No category exists at the given record key.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.category.update

lexicon v1
mainPROCEDURE

Updates a category's name.

encodingapplication/json
communitystringrequiredformatdid

The community the category belongs to.

categorystringrequiredformatrecord-key

The category's record key.

namestringminLength1maxLength32

The category's new name.

encodingapplication/json

The updated category.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the category.update permission.

CommunityNotFound

No community exists at the given DID.

CategoryNotFound

No category exists at the given record key.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.channel.create

lexicon v1
mainPROCEDURE

Creates a channel. This creates a space for the channel, then writes the channel's configuration record at key 'self' inside that space.

encodingapplication/json
communitystringrequiredformatdid

The community the channel belongs to.

typestringrequiredformatnsidknownsocial.colibri.beta.channel.text | social.colibri.beta.channel.voice

The channel's space type.

namestringrequiredminLength1maxLength32

The channel's name.

categorystringrequiredformatrecord-key

The category to list the channel under.

descriptionstringmaxLength256

The channel's topic.

ownerOnlyboolean

Whether only community admins may post.

allowedRolesarray<string>

Roles allowed to post here.

allowedMembersarray<string>

Members allowed to post here in addition to allowedRoles.

visibleToRolesarray<string>

Roles that may read this channel. Empty means every member may.

visibleToMembersarray<string>

Members that may read this channel beyond visibleToRoles.

encodingapplication/json

The newly created channel.

AuthRequired

The request has no valid service auth.

Forbidden

The requesting user lacks the channel.create permission.

CommunityNotFound

No community matches the given DID.

CategoryNotFound

No category matches the given record key.

RoleHierarchy

The requesting user cannot grant a role that outranks their own.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

PdsUnavailable

The community's PDS is unreachable or the AppView has no administrative access to it.

UpstreamFailure

The community's PDS failed while creating the channel's space.

social.colibri.beta.channel.delete

lexicon v1
mainPROCEDURE

Deletes a channel's space. Messages members wrote in it stay in their own repos and become unreadable to everyone but their authors.

encodingapplication/json
channelstringrequiredformatspace-ref

The channel to delete.

encodingapplication/json
AuthRequired

The request has no valid service auth.

Forbidden

The requesting user lacks the channel.delete permission.

ChannelNotFound

No channel matches the given space reference.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

PdsUnavailable

The community's PDS is unreachable or the AppView has no administrative access to it.

UpstreamFailure

The community's PDS failed while deleting the channel's space.

social.colibri.beta.channel.putReadCursors

lexicon v1
mainPROCEDURE

Pushes the requesting user's read cursors for one community to the AppView, so unread counts update immediately instead of waiting for a sync notification. The client writes its social.colibri.beta.channel.read record for the community to its own personal space first, then calls this. Clients should debounce this rather than calling it on every message.

encodingapplication/json
communitystringrequiredformatdid

The community the cursors belong to.

cursorsarray<channel.read#cursor>required

The complete, replacement set of read cursors for the community's channels.

encodingapplication/json
statusesarray<channel.defs#unreadStatus>required

Unread state per channel, after the update.

AuthRequired

The request has no valid service auth.

CommunityNotFound

No community matches the given DID.

social.colibri.beta.channel.reorder

lexicon v1
mainPROCEDURE

Sets the channel order within one category.

encodingapplication/json
communitystringrequiredformatdid

The community the category belongs to.

categorystringrequiredformatrecord-key

The category to reorder.

channelsarray<string>required

The complete new order for the category's channels, by channel space key.

encodingapplication/json
AuthRequired

The request has no valid service auth.

Forbidden

The requesting user lacks the channel.update permission.

CommunityNotFound

No community matches the given DID.

CategoryNotFound

No category matches the given record key.

InvalidRequest

The given channels do not match the category's current set of channels.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.channel.update

lexicon v1
mainPROCEDURE

Updates a channel's configuration. An absent field leaves the current value unchanged.

encodingapplication/json
channelstringrequiredformatspace-ref

The channel to update.

namestringminLength1maxLength32

The channel's name. Absent leaves the current value unchanged.

descriptionstringmaxLength256

The channel's topic. Absent leaves the current value unchanged.

categorystringformatrecord-key

The category to move the channel to. Absent leaves the current value unchanged.

ownerOnlyboolean

Whether only community admins may post. Absent leaves the current value unchanged.

allowedRolesarray<string>

Roles allowed to post here. Absent leaves the current value unchanged.

allowedMembersarray<string>

Members allowed to post here in addition to allowedRoles. Absent leaves the current value unchanged.

linkEmbedsboolean

Whether link previews are shown here. Absent leaves the current value unchanged.

visibleToRolesarray<string>

Roles that may read this channel. Empty means every member may.

visibleToMembersarray<string>

Members that may read this channel beyond visibleToRoles.

encodingapplication/json

The channel, after the update.

AuthRequired

The request has no valid service auth.

Forbidden

The requesting user lacks the channel.update permission.

ChannelNotFound

No channel matches the given space reference.

CategoryNotFound

No category matches the given record key.

RoleHierarchy

The requesting user cannot grant a role that outranks their own.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.adopt

lexicon v1
mainPROCEDURE

Adopts an existing account as a community: this AppView takes custody of its credentials, creates the four community spaces on whichever PDS already hosts it, and seeds the same starter layout social.colibri.beta.community.create does. The account keeps its own DID, handle and PDS, and the caller becomes its owner. Use this instead of community.create to bring your own DID.

encodingapplication/json
didstringrequiredformatdid

The account to adopt. The credentials must authenticate as this exact DID, which is what proves the caller controls it.

identifierstringrequired

The identifier used to authenticate with the account's PDS, such as its handle or DID.

passwordstringrequired

The account's password. An app password is not enough: minting a delegation token requires full access.

namestringrequiredminLength1maxLength32

The community's name.

descriptionstringmaxLength256

The community's description.

encodingapplication/json

The adopted community.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

AlreadyExists

This account is already a community on this AppView.

CredentialsRejected

The PDS refused the given identifier and password.

IdentityMismatch

The credentials authenticate a different account than the DID given.

SpacesUnsupported

The account's PDS does not implement com.atproto.simplespace, so it cannot host community spaces.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.applyLabel

lexicon v1
mainPROCEDURE

Applies a label to a record in one of the community's spaces. This is how content is hidden, marked as a spoiler, or has its link previews suppressed. The record itself is untouched, since it lives in its author's own repo, but a `hidden` label stops this AppView serving the record: it is withheld from reads and from the events socket, and replies to it see a deletedMessageView in its place. Moderators holding `label.apply` and the record's own author still see it.

encodingapplication/json
spacestringrequiredformatspace-ref

The space the labelled record lives in.

subjectbeta.label#subjectrequired

The record to label.

valstringrequiredknownhidden | spoiler | embeds-suppressedmaxLength128

The label value. `hidden` withholds the record from reads. `spoiler` and `embeds-suppressed` are display hints.

scopearray<string>

Narrows the label to specific URIs inside the subject record. Absent means the whole record.

reasonstringmaxLength512

Human-readable reason for the label.

encodingapplication/json

The applied label.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the label.apply permission.

CommunityNotFound

No community exists at the given DID.

SpaceNotFound

No space exists at the given reference.

InvalidRequest

The scope or val is not valid for the subject record.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.approveApplication

lexicon v1
mainPROCEDURE

Approves a pending application, admitting the subject as a member.

encodingapplication/json
communitystringrequiredformatdid

The community to admit the subject to.

subjectstringrequiredformatdid

The applicant to admit.

encodingapplication/json

The newly admitted member.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the approval.manage permission.

CommunityNotFound

No community exists at the given DID.

ApplicationNotFound

No pending application exists for the subject in this community.

AlreadyMember

The subject already holds a member record in this community.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.ban

lexicon v1
mainPROCEDURE

Bans a member from a community. This removes their member record and stops the community issuing them space credentials. Their existing content is not deleted: it stays in their own repo, where it can still be labelled or filtered.

encodingapplication/json
communitystringrequiredformatdid

The community to ban the member from.

subjectstringrequiredformatdid

The member to ban.

reasonstringmaxLength512

Human-readable reason for the ban.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the member.ban permission.

CommunityNotFound

No community exists at the given DID.

AlreadyBanned

The subject is already banned from this community.

RoleHierarchy

The subject holds a role at or above the caller's highest role position.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.create

lexicon v1
mainPROCEDURE

Provisions a new community: an account on the AppView's PDS, its four spaces, an owner role, and a starter layout of two categories holding one text channel and one voice channel between them. This call runs long enough that progress is also emitted over social.colibri.beta.sync.subscribeEvents.

encodingapplication/json
namestringrequiredminLength1maxLength32

The community's name.

descriptionstringmaxLength256

The community's description.

handlePrefixstring

A slug used for the community handle instead of a generated one.

encodingapplication/json

The newly created community.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

AlreadyExists

A community already exists with the requested handle.

PdsUnavailable

The AppView's PDS could not be reached to provision the account.

SpacesUnsupported

The AppView's PDS does not implement com.atproto.simplespace, so it cannot host community spaces.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.createInvitation

lexicon v1
mainPROCEDURE

Creates an invitation code for a community.

encodingapplication/json
communitystringrequiredformatdid

The community to create an invitation for.

maxUsesintegermin1

How many times the invitation may be redeemed, if limited.

expiresAtstringformatdatetime

When the invitation stops being redeemable, if ever.

encodingapplication/json

The newly created invitation.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the invitation.create permission.

CommunityNotFound

No community exists with that DID.

social.colibri.beta.community.delete

lexicon v1
mainPROCEDURE

Deletes the community's spaces and its account. Members' own records stay in their own repos and simply become unreadable.

encodingapplication/json
communitystringrequiredformatdid

The community to delete.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the community.delete permission.

CommunityNotFound

No community exists with that DID.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.deleteImage

lexicon v1
mainPROCEDURE

Clears a community's picture or banner. Idempotent: clearing an image that was never set succeeds. The blob itself is left in the community's repo rather than deleted, so an older record revision still resolves.

communitystringrequiredformatdid

The community to clear the image on.

kindstringrequiredknownpicture | banner

Which image to clear.

encodingapplication/json

The community with the image cleared.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the community.manage permission.

CommunityNotFound

No community exists with that DID.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.deleteInvitation

lexicon v1
mainPROCEDURE

Deletes an invitation code.

encodingapplication/json
communitystringrequiredformatdid

The community the invitation belongs to.

codestringrequired

The invitation code to delete.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the invitation.delete permission.

CommunityNotFound

No community exists with that DID.

InvitationNotFound

No invitation exists with that code.

social.colibri.beta.community.dismissApplication

lexicon v1
mainPROCEDURE

Hides a pending application from the active queue without refusing it. This is an AppView-local change and is never written to the community's repo.

encodingapplication/json
communitystringrequiredformatdid

The community the application belongs to.

subjectstringrequiredformatdid

The applicant whose application to dismiss.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the approval.manage permission.

CommunityNotFound

No community exists at the given DID.

ApplicationNotFound

No pending application exists for the subject in this community.

social.colibri.beta.community.join

lexicon v1
mainPROCEDURE

Admits the requesting user to a community. Joining is an AppView procedure rather than a record the user writes, because admission is what makes the community's spaces readable to them.

encodingapplication/json
communitystringrequiredformatdid

The community to join.

invitationstring

An invitation code.

encodingapplication/json
statusstringrequiredknownjoined | pending

The result of the join attempt.

The new member view. Present only when status is joined.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

CommunityNotFound

No community exists with that DID.

InvitationNotFound

No invitation exists with that code.

AlreadyMember

The requesting user already holds a member record in this community.

Banned

The requesting user is banned from this community.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

social.colibri.beta.community.kick

lexicon v1
mainPROCEDURE

Removes a member from a community. The member may rejoin unless the community requires approval to join.

encodingapplication/json
communitystringrequiredformatdid

The community to remove the member from.

subjectstringrequiredformatdid

The member to remove.

reasonstringmaxLength512

Human-readable reason for the kick.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the member.kick permission.

CommunityNotFound

No community exists at the given DID.

MemberNotFound

The subject does not hold a member record in this community.

RoleHierarchy

The subject holds a role at or above the caller's highest role position.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.leave

lexicon v1
mainPROCEDURE

Removes the requesting user's membership in a community.

encodingapplication/json
communitystringrequiredformatdid

The community to leave.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

CommunityNotFound

No community exists with that DID.

MemberNotFound

The requesting user does not hold a member record in this community.

SoleOwner

The requesting user is the last holder of a protected role and cannot leave.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

social.colibri.beta.community.migrate

lexicon v1
mainPROCEDURE

Migrates a repo-backed community onto spaces. Structure is recreated in new spaces and stamped with migratedFrom. Message history stays in the legacy public repos and is served alongside, because messages live in their authors' repos and only their authors can move them.

encodingapplication/json
communitystringrequiredformatat-identifier

The legacy community to migrate, by handle or DID. Only a community that holds its own DID can be migrated, so the DID is the whole address: the record to read is always social.colibri.community at self in that repo.

encodingapplication/json

The newly created, space-backed community.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks permission to migrate this community.

CommunityNotFound

No community exists at the legacy record's DID.

AlreadyExists

This legacy community has already been migrated.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.negateLabel

lexicon v1
mainPROCEDURE

Retracts a label by writing a negating one. The original label record is left in place.

encodingapplication/json
spacestringrequiredformatspace-ref

The space the labelled record lives in.

subjectbeta.label#subjectrequired

The labelled record.

valstringrequired

The label value to retract.

reasonstringmaxLength512

Human-readable reason for the retraction.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the label.apply permission.

CommunityNotFound

No community exists at the given DID.

SpaceNotFound

No space exists at the given reference.

LabelNotFound

No active label matching the subject and value exists to negate.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.putImage

lexicon v1
mainPROCEDURE

Sets a community's picture or banner. The bytes are uploaded to the community's own repo, which is why this goes through the AppView: a community's blobs can only be written with the community credentials the AppView holds, and a space record must reference a blob living in the repo that holds the record. Replaces whatever was there before.

communitystringrequiredformatdid

The community to set the image on.

kindstringrequiredknownpicture | banner

Which image to set.

encodingimage/*The raw image bytes. The content type must be one of image/jpeg, image/png, image/gif or image/webp, and is sniffed rather than trusted.
encodingapplication/json

The community with the new image resolved, so one call is enough to re-render.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the community.manage permission.

CommunityNotFound

No community exists with that DID.

UnsupportedImage

The bytes are not one of the accepted image types.

ImageTooLarge

The image exceeds the size limit for this kind.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.registerCredentials

lexicon v1
mainPROCEDURE

Hands the AppView credentials for a community hosted elsewhere, so it can administer a community it did not create. The password is stored encrypted at rest.

encodingapplication/json
communitystringrequiredformatdid

The community the credentials belong to.

identifierstringrequired

The identifier used to authenticate with the community's PDS, such as its handle or DID.

passwordstringrequired

The password or app password used to authenticate with the community's PDS.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks permission to register credentials for this community.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

CredentialsRejected

The PDS refused the identifier and password.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.community.reorderCategories

lexicon v1
mainPROCEDURE

Sets the complete display order of a community's categories.

encodingapplication/json
communitystringrequiredformatdid

The community whose categories are being reordered.

categoriesarray<string>required

The complete new display order of the community's categories.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the category.update permission.

CommunityNotFound

No community exists with that DID.

InvalidRequest

The supplied categories do not match the community's existing set.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

social.colibri.beta.community.setMemberRoles

lexicon v1
mainPROCEDURE

Sets the complete set of roles a member holds.

encodingapplication/json
communitystringrequiredformatdid

The community the member belongs to.

subjectstringrequiredformatdid

The member whose roles are being set.

rolesarray<string>required

The complete new set of roles the member should hold.

encodingapplication/json

The updated member.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the role.manage permission.

CommunityNotFound

No community exists with that DID.

MemberNotFound

The subject does not hold a member record in this community.

RoleNotFound

One of the requested roles does not exist.

RoleHierarchy

The requesting user cannot grant or revoke a role at or above their own highest position.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

social.colibri.beta.community.unban

lexicon v1
mainPROCEDURE

Lifts a ban, letting the community issue the subject space credentials again.

encodingapplication/json
communitystringrequiredformatdid

The community to lift the ban in.

subjectstringrequiredformatdid

The member to unban.

reasonstringmaxLength512

Human-readable reason for lifting the ban.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the member.unban permission.

CommunityNotFound

No community exists at the given DID.

NotBanned

The subject is not currently banned from this community.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.community.undismissApplication

lexicon v1
mainPROCEDURE

Restores a dismissed application to the active queue. This is an AppView-local change and is never written to the community's repo.

encodingapplication/json
communitystringrequiredformatdid

The community the application belongs to.

subjectstringrequiredformatdid

The applicant whose application to restore.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the approval.manage permission.

CommunityNotFound

No community exists at the given DID.

ApplicationNotFound

No pending application exists for the subject in this community.

social.colibri.beta.community.update

lexicon v1
mainPROCEDURE

Updates a community's settings. A field left absent stays unchanged.

encodingapplication/json
communitystringrequiredformatdid

The community to update.

namestringminLength1maxLength32

The community's name.

descriptionstringmaxLength256

The community's description.

requiresApprovalToJoinboolean

Whether joining produces an application to approve.

linkEmbedsboolean

Whether link previews are shown by default.

labelersarray<string>

DIDs whose labels this community honours.

encodingapplication/json

The updated community.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The requesting user lacks the community.manage permission.

CommunityNotFound

No community exists with that DID.

CredentialsUnavailable

The AppView's stored credentials for this community are missing or unusable.

UpstreamFailure

A PDS or third-party call the AppView depends on failed.

social.colibri.beta.notification.registerPush

lexicon v1
mainPROCEDURE

Registers a push endpoint for the requesting user's device. Web Push requires endpoint, p256dh, and auth. FCM requires token.

encodingapplication/json
providerstringrequiredknownwebpush | fcm

The push provider to register with.

platformstringrequiredknownweb | ios | android

The platform the device runs.

endpointstringformaturi

The Web Push subscription endpoint. Required when provider is webpush.

p256dhstring

The Web Push subscription's p256dh key. Required when provider is webpush.

authstring

The Web Push subscription's auth secret. Required when provider is webpush.

tokenstring

The FCM registration token. Required when provider is fcm.

encodingapplication/json
AuthRequired

The request has no valid service auth.

InvalidRequest

The fields required for the given provider are missing or malformed.

PushNotConfigured

This AppView has no keypair for the requested provider.

social.colibri.beta.notification.unregisterPush

lexicon v1
mainPROCEDURE

Removes a previously registered push endpoint.

encodingapplication/json
providerstringrequiredknownwebpush | fcm

The push provider to unregister from.

endpointstringformaturi

The Web Push subscription endpoint to remove.

tokenstring

The FCM registration token to remove.

encodingapplication/json
AuthRequired

The request has no valid service auth.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

social.colibri.beta.notification.updateSeen

lexicon v1
mainPROCEDURE

Marks every notification raised at or before a point in time seen.

encodingapplication/json
seenAtstringrequiredformatdatetime

Notifications raised at or before this time are marked seen.

encodingapplication/json
unreadintegerrequired

Number of unread notifications remaining.

AuthRequired

The request has no valid service auth.

social.colibri.beta.notification.updateSeenForMessage

lexicon v1
mainPROCEDURE

Marks the notifications raised by one message seen.

encodingapplication/json
channelstringrequiredformatspace-ref

The channel the message was posted in.

messagebeta.defs#recordRefrequired

The message whose notifications are marked seen.

encodingapplication/json
unreadintegerrequired

Number of unread notifications remaining.

AuthRequired

The request has no valid service auth.

ChannelNotFound

No channel matches the given space reference.

MessageNotFound

No message matches the given record reference in that channel.

social.colibri.beta.role.create

lexicon v1
mainPROCEDURE

Creates a role in a community.

encodingapplication/json
communitystringrequiredformatdid

The community to create the role in.

namestringrequiredminLength1maxLength32

Display name.

permissionsarray<string>required

Permissions granted by this role.

colorstringmaxLength7

Hex colour as #rrggbb.

positioninteger

Hierarchy position. Higher outranks lower.

hoistedboolean

Whether holders are listed separately in the member list.

mentionableboolean

Whether @role mentions resolve to this role.

encodingapplication/json

The newly created role.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the role.manage permission.

CommunityNotFound

No community exists at the given DID.

InvalidRequest

The arguments are inconsistent or malformed beyond schema validation.

RoleHierarchy

The requested position is at or above the caller's highest role position, or the permissions include one the caller does not hold.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.role.delete

lexicon v1
mainPROCEDURE

Deletes a role.

encodingapplication/json
communitystringrequiredformatdid

The community the role belongs to.

rolestringrequiredformatrecord-key

The role's record key.

encodingapplication/json
AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the role.manage permission.

CommunityNotFound

No community exists at the given DID.

RoleNotFound

No role exists at the given record key.

RoleProtected

The role is marked protected and cannot be deleted.

RoleHierarchy

The role is at or above the caller's highest role position.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.role.update

lexicon v1
mainPROCEDURE

Updates a role's settings.

encodingapplication/json
communitystringrequiredformatdid

The community the role belongs to.

rolestringrequiredformatrecord-key

The role's record key.

namestringminLength1maxLength32

Display name.

colorstringmaxLength7

Hex colour as #rrggbb.

permissionsarray<string>

Permissions granted by this role.

positioninteger

Hierarchy position. Higher outranks lower.

hoistedboolean

Whether holders are listed separately in the member list.

mentionableboolean

Whether @role mentions resolve to this role.

channelOverridesarray<community.defs#roleChannelOverride>

Per-channel overrides.

encodingapplication/json

The updated role.

AuthRequired

The request is missing, malformed, or unverifiable service auth.

Forbidden

The caller lacks the role.manage permission.

CommunityNotFound

No community exists at the given DID.

RoleNotFound

No role exists at the given record key.

RoleProtected

The role is marked protected and cannot be modified.

RoleHierarchy

The change would place the role at or above the caller's highest role position, or grants a permission the caller does not hold.

CredentialsUnavailable

The AppView cannot act as the community because its stored credentials are missing or unusable.

social.colibri.beta.voice.moderate

lexicon v1
mainPROCEDURE

Acts on someone in a voice channel. An absent field leaves the current value unchanged.

encodingapplication/json
channelstringrequiredformatspace-ref

The voice channel the subject is in.

subjectstringrequiredformatdid

Who to act on.

mutedboolean

Whether the subject's microphone is muted. Absent leaves the current value unchanged.

deafenedboolean

Whether the subject cannot hear others. Absent leaves the current value unchanged.

disconnectboolean

Whether to disconnect the subject from the channel.

encodingapplication/json
AuthRequired

The request has no valid service auth.

Forbidden

The requesting user lacks the voice.moderate permission.

ChannelNotFound

No channel matches the given space reference.

NotInVoice

The subject is not currently connected to the channel.

VoiceUnavailable

This AppView has no voice SFU running.

The scopes a client can request. These are expressed over spaces rather than over repository collections, so a consent screen can say “read and post in this community’s channels” instead of listing NSIDs at a user.

social.colibri.beta.permissionAccount

lexicon v1
mainPERMISSION-SETYour Colibri account

Read and change your Colibri profile, settings, mutes and read state.

spacereadcreateupdatedelete
  • social.colibri.beta.actor.mute
  • social.colibri.beta.actor.settings
  • social.colibri.beta.channel.read
repocreateupdatedelete
  • social.colibri.beta.actor.profile
rpcinheritAud
  • social.colibri.beta.actor.getProfile
  • social.colibri.beta.actor.getPreferences
  • social.colibri.beta.actor.putSettings
  • social.colibri.beta.actor.putMutes
  • social.colibri.beta.actor.grantSpaceAccess
  • social.colibri.beta.actor.listCommunities
  • social.colibri.beta.actor.setStatus
  • social.colibri.beta.actor.getDeletionStatus
  • social.colibri.beta.actor.deleteAccount
  • social.colibri.beta.server.describeServer
  • social.colibri.beta.blob.get

social.colibri.beta.permissionCommunity

lexicon v1
mainPERMISSION-SETManage Colibri communities

Create and administer Colibri communities, including their channels, roles, members and moderation.

spaceread
spaceread
spaceread
spaceread
spaceread
spaceread
rpcinheritAud
  • social.colibri.beta.community.create
  • social.colibri.beta.community.adopt
  • social.colibri.beta.community.update
  • social.colibri.beta.community.putImage
  • social.colibri.beta.community.deleteImage
  • social.colibri.beta.community.delete
  • social.colibri.beta.community.listMigratable
  • social.colibri.beta.community.migrate
  • social.colibri.beta.community.registerCredentials
  • social.colibri.beta.community.setMemberRoles
  • social.colibri.beta.community.reorderCategories
  • social.colibri.beta.community.createInvitation
  • social.colibri.beta.community.listInvitations
  • social.colibri.beta.community.deleteInvitation
  • social.colibri.beta.community.kick
  • social.colibri.beta.community.ban
  • social.colibri.beta.community.unban
  • social.colibri.beta.community.listBans
  • social.colibri.beta.community.listApplications
  • social.colibri.beta.community.approveApplication
  • social.colibri.beta.community.dismissApplication
  • social.colibri.beta.community.undismissApplication
  • social.colibri.beta.community.listModerationLog
  • social.colibri.beta.community.applyLabel
  • social.colibri.beta.community.negateLabel
  • social.colibri.beta.category.create
  • social.colibri.beta.category.update
  • social.colibri.beta.category.delete
  • social.colibri.beta.channel.create
  • social.colibri.beta.channel.update
  • social.colibri.beta.channel.delete
  • social.colibri.beta.channel.reorder
  • social.colibri.beta.role.create
  • social.colibri.beta.role.update
  • social.colibri.beta.role.delete
  • social.colibri.beta.voice.moderate
blob

social.colibri.beta.permissionMessaging

lexicon v1
mainPERMISSION-SETColibri messages

Read and post in the Colibri communities you belong to.

spacereadcreateupdatedelete
  • social.colibri.beta.message
  • social.colibri.beta.reaction
spaceread
spaceread
spaceread
spaceread
rpcinheritAud
  • social.colibri.beta.community.getCommunity
  • social.colibri.beta.community.join
  • social.colibri.beta.community.leave
  • social.colibri.beta.community.listCategories
  • social.colibri.beta.community.listChannels
  • social.colibri.beta.community.listMembers
  • social.colibri.beta.community.listRoles
  • social.colibri.beta.community.getInvitation
  • social.colibri.beta.channel.getChannel
  • social.colibri.beta.channel.listMessages
  • social.colibri.beta.channel.listReactions
  • social.colibri.beta.channel.listUnreadStatus
  • social.colibri.beta.channel.putReadCursors
  • social.colibri.beta.embed.getMetadata
  • social.colibri.beta.embed.searchGifs
  • social.colibri.beta.embed.trendingGifs
  • social.colibri.beta.embed.gifCategories
  • social.colibri.beta.blob.get
blob

social.colibri.beta.permissionNotification

lexicon v1
mainPERMISSION-SETColibri notifications

Read your Colibri notifications and mark them as seen.

rpcinheritAud
  • social.colibri.beta.notification.listNotifications
  • social.colibri.beta.notification.getUnreadCount
  • social.colibri.beta.notification.getUnseen
  • social.colibri.beta.notification.updateSeen
  • social.colibri.beta.notification.updateSeenForMessage

social.colibri.beta.permissionPush

lexicon v1
mainPERMISSION-SETColibri push notifications

Send push notifications to this device when Colibri is closed.

rpcinheritAud
  • social.colibri.beta.notification.registerPush
  • social.colibri.beta.notification.unregisterPush