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.
Reading these
Section titled “Reading these”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.
Space types
Section titled “Space types”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
A user's own Colibri settings, mutes and read state.
social.colibri.beta.channel.text
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
A voice channel. Holds only its own configuration record, because call state is off-protocol.
social.colibri.beta.community.configuration
A community's operational settings and its category layout.
social.colibri.beta.community.members
A community's membership and the roles that can be assigned within it.
social.colibri.beta.community.moderation
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
A community's public identity: the one part of a community that can be read before joining it.
Records
Section titled “Records”Records persisted in a user’s or a community’s repository, read through the space they belong to.
social.colibri.beta.actor.mute
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.
When the mute was created.
social.colibri.beta.actor.profile
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.
Display name.
Bio.
Avatar image.
Profile banner image.
When true, displayName, description, avatar and banner are served from app.bsky.actor.profile instead of from this record.
Colibri-only profile theming.
Label value of the badge to display. Absent means the highest-priority badge.
A two-colour gradient.
Primary colour as #rrggbb.
Secondary colour as #rrggbb.
social.colibri.beta.actor.settings
A user's Colibri settings.
Which messages produce a notification.
The user's communities in their preferred sidebar order.
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
A named group of channels within a community.
The category's name.
The channels in this category, in display order, by space key.
social.colibri.beta.channel
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.
The channel's name.
The channel's topic.
Whether only community admins may post.
Roles allowed to post here. Empty means no role restriction.
Members allowed to post here in addition to allowedRoles.
Whether link previews are shown here. Absent means the community default.
Set on a channel created by migrating a repo-backed community. Points at the legacy channel record whose history is served alongside this channel.
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.
Members that may read this channel in addition to visibleToRoles.
social.colibri.beta.channel.read
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.
The community these cursors belong to. Matches the record key.
One cursor per read channel.
The last message read in one channel.
The channel's space key.
Record key of the last message read. Message keys are TIDs, so they order by time.
social.colibri.beta.community
A community's public identity. Lives in the community's profile space, which is readable without membership unless the community is private.
The community's name.
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.
A short description.
Square image shown as the community's icon.
Wide image shown at the top of the community.
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
A community's operational settings. Separate from the profile record so the two have different read audiences.
The order categories are displayed in.
Whether joining produces an application a moderator must approve.
Whether link previews are shown by default. Channels may override this.
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
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.
The record this label applies to.
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.
URIs within the subject record the label narrows to, for values that can apply to part of a record. Absent means the whole record.
Whether this record retracts an earlier label of the same value.
Human-readable reason.
When the label was applied.
The labelled record, addressed within the space the label lives in.
DID of the repo holding the labelled record.
The labelled record's collection.
The labelled record's key.
social.colibri.beta.member
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.
The member's DID. Matches the record key.
Roles assigned to this member.
When the member was admitted.
Per-community display name override.
social.colibri.beta.message
A message in a channel. Lives in the author's own permissioned repo for the channel's space.
The message body.
Annotations over ranges of the text.
When the message was sent.
When the message was last edited. Absent means never edited.
The message this one replies to.
Files attached to this message.
URLs from this message's link facets whose preview the author chose not to show. Moderator suppression is a label instead.
A file attached to a message.
The attached file.
The original filename.
social.colibri.beta.moderation
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.
The action taken.
The member the action was taken against.
Human-readable reason.
DID of the moderator who took the action.
When the action was taken.
social.colibri.beta.reaction
A reaction to a message in the same channel space.
The reaction, as an emoji or a custom shortcode.
The message being reacted to.
social.colibri.beta.role
A named bundle of permissions assignable to community members.
Display name.
Hex colour as #rrggbb.
Permissions granted by this role.
Hierarchy position. Higher outranks lower.
Whether holders are listed separately in the member list.
Whether @role mentions resolve to this role.
Whether this role is exempt from modification and deletion. Set on the owner role created with the community.
Per-channel permission overrides.
Allow and deny lists scoped to a single channel.
The space key of the channel this override applies to.
Permissions granted within this channel.
Permissions denied within this channel. Deny beats both the base permissions and allow.
Shared definitions
Section titled “Shared definitions”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
A Colibri user as the AppView serves them: identity, resolved profile, and presence.
The user's DID.
The user's handle, or 'handle.invalid' when it does not resolve.
Resolved display name, falling back to the handle.
Resolved bio.
URL of the user's avatar, served by this AppView's blob proxy.
URL of the user's profile banner, served by this AppView's blob proxy.
Whether the account is labelled as an automated account.
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.
Label value of the badge the user chose to display.
Live presence, when the AppView is tracking any.
A user's live, off-protocol state.
Derived online state.
The user's status line.
Where the user is connected for voice, if anywhere.
A user's status line.
The status text.
An emoji shown beside the status.
A user's voice connection.
The voice channel the user is connected to.
Whether the user's microphone is muted, for any reason.
Whether the user has incoming audio silenced, for any reason.
Whether a moderator muted them. When this is true they cannot unmute themselves, and a client must not offer them the control.
Whether a moderator deafened them. When this is true they cannot undeafen themselves.
The authenticated user's own settings, as the AppView currently holds them.
Which messages produce a notification.
Communities in preferred sidebar order.
Subjects the user has muted.
GIFs saved from the picker, stored whole.
A muted subject.
What is muted. A user or a community is named by DID, a channel by its space.
When the mute was created.
A muted user or community.
The muted user or community.
A muted channel. Muting a channel silences it without leaving the community it belongs to.
The muted channel's space.
social.colibri.beta.channel.defs
A message as the AppView serves it, with its author, reactions and labels resolved.
The message's full space AT-URI.
The message's record key, for addressing it as a reply target.
The channel space the message lives in.
Who wrote it.
The message body.
Rich text annotations.
When it was sent.
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.
Attached files.
Reactions, aggregated by emoji.
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`.
URLs whose preview the author chose not to show.
Resolved link previews.
Whether this message comes from the repo-backed community this channel was migrated from, and is therefore immutable.
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.
The message's full space AT-URI.
The message's record key.
The channel space it lived in.
A file attached to a message.
URL served by this AppView's blob proxy.
The original filename.
The sniffed content type.
Size in bytes.
Intrinsic pixel width, when the file is a decodable image or video.
Intrinsic pixel height, when the file is a decodable image or video.
Reactions to a message with one emoji.
The emoji or custom shortcode.
How many people reacted.
Who reacted.
Whether the requesting user is among them.
Per-channel unread state for the requesting user.
The channel.
Whether anything is unread.
How many unread messages mention the user.
The user's current read cursor.
social.colibri.beta.community.defs
A community as the AppView serves it.
The community's DID, which is the authority for all of its spaces.
The community's handle.
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.
The community's name.
The community's description.
URL of the community's icon, served by this AppView's blob proxy.
URL of the community's banner, served by this AppView's blob proxy.
Whether joining produces an application to approve.
Whether link previews are shown by default.
DIDs whose labels this community honours.
The repo-backed community this one replaces, if any.
Number of admitted members.
The requesting user's relationship to this community.
The requesting user's relationship to a community.
Whether the user holds a member record.
Whether the user holds a protected role.
Whether the user is banned.
Whether the user has an unapproved application.
Roles the user holds.
Effective community-wide permissions.
A category and the channels in it.
The category's record key.
The category's name.
Channels in display order.
A channel as the AppView serves it. The channel's identity is its space.
The channel's space, which is its identity.
The channel's space type.
The channel's name.
The channel's topic.
The category this channel is listed under.
Whether only admins may post.
Roles allowed to post.
Members allowed to post.
Whether link previews are shown here.
The legacy channel whose history is served alongside this one.
The requesting user's access to this channel.
Roles that may read this channel. Empty means every member may.
Members that may read this channel beyond visibleToRoles.
Whether the channel restricts who may read it, rather than only who may post.
The requesting user's access to a channel.
Whether the user may read this channel.
Whether the user may post in this channel.
Effective permissions in this channel, after per-channel role overrides.
A role.
The role's record key.
Display name.
Hex colour as #rrggbb.
Permissions granted.
Hierarchy position. Higher outranks lower.
Whether holders are listed separately.
Whether @role mentions resolve to this role.
Whether the role is exempt from modification and deletion.
Per-channel overrides.
Number of members holding this role.
Allow and deny lists scoped to one channel.
The channel's space key.
Permissions granted here.
Permissions denied here.
An admitted community member.
The member.
Roles held, highest first.
When the member was admitted.
Per-community display name override.
A pending request to join a community that requires approval.
The applicant.
When the application was made.
Whether a moderator has hidden this from the active queue.
An invitation code.
The invitation code.
Who created it.
Whether it can still be redeemed.
When it was created.
When it stops being redeemable, if ever.
How many times it has been redeemed.
How many times it may be redeemed, if limited.
An entry in a community's moderation log.
The log entry's record key.
The action taken.
Who it was taken against.
Human-readable reason.
Which moderator took it.
When it was taken.
A label applied to a record.
The labeler that applied it.
The label value.
What the label narrows to.
Human-readable reason.
When it was applied.
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.
Why they were banned.
Which moderator banned them.
When the ban took effect.
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.
The legacy community's DID, which becomes the authority for its spaces once migrated.
The community's handle, when its DID document still resolves one.
The community's name.
The community's description.
How many member records the legacy repo holds.
How many channel records the legacy repo holds. Migration recreates one space per channel.
Whether the requesting user may migrate this community. Only an administrator of the legacy community can.
social.colibri.beta.defs
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.
DID of the repo holding the referenced record.
Record key of the referenced record.
social.colibri.beta.embed.defs
A link preview.
The URL previewed.
Page title.
Page description.
Publisher name.
Preview image.
Playable video.
A preview image.
URL served by this AppView's image proxy.
Intrinsic pixel width.
Intrinsic pixel height.
Alternative text.
A playable video.
URL served by this AppView's video proxy.
Content type.
Intrinsic pixel width.
Intrinsic pixel height.
Duration in seconds.
A GIF from the picker.
Provider identifier, stable enough to save as a favourite.
Full-size GIF URL.
Smaller preview URL for the picker grid.
Intrinsic pixel width.
Intrinsic pixel height.
Human-readable title.
A category in the GIF picker.
Category name.
Representative image for the category.
social.colibri.beta.notification.defs
A notification for the requesting user.
Opaque identifier, used to mark this notification seen.
Why it was raised.
Who caused it.
The channel it happened in.
The community it happened in.
The message, when still readable.
Name of the role whose mention raised this, for role mentions.
When the AppView raised it.
When the user marked it seen.
social.colibri.beta.richtext.facet
An annotation over a range of a message's text.
The range of the text this facet covers.
What the range means. A range may carry more than one feature.
The range a feature applies to, as zero-based byte offsets into the UTF-8 encoded text. Start is inclusive, end is exclusive.
First byte of the range, inclusive.
Byte after the range, exclusive.
Bold text.
Italic text.
Underlined text.
Struck-through text.
Inline code.
A multi-line code block.
Language hint.
A block quote.
A heading line.
Heading level, from 1 to 3.
A list item line.
Whether the list is numbered.
Small, muted text.
Text hidden until revealed.
A user mention.
The mentioned user.
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.
The mentioned role.
A channel reference, by the channel's space key within the same community.
The referenced channel.
A hyperlink.
Where the link points.
A timestamp rendered in the reader's locale.
The instant being referred to.
How to render it.
social.colibri.beta.sync.defs
Adds communities and channels to what this connection receives. Subscription is explicit: a connection is sent nothing it did not ask for.
Communities to start receiving events for.
Channels to start receiving messages for.
Removes communities and channels from what this connection receives.
Communities to stop receiving events for.
Channels to stop receiving messages for.
Keeps the connection alive and tells the AppView the user is still present. The server answers with an ack.
Reports that the user is typing in a channel.
The channel being typed in.
Reports which channel the user is looking at, which drives read state and away detection. An absent channel means they are looking at none.
The channel now in view.
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.
The space that was written to.
The revision the write produced, when the client knows it.
Updates the user's own presence over the socket.
Requested online state.
The user's own voice state, when connected to a voice channel.
A user's own voice state.
The voice channel.
Whether the microphone is muted.
Whether the user has deafened themselves.
Answers a heartbeat.
Something the client sent could not be acted on.
Error name.
Human-readable detail.
Confirms what this connection is now receiving, after a subscribe or unsubscribe. Anything the user is not entitled to read is silently absent.
Communities being received.
Channels being received.
A message was written, edited, or deleted in a subscribed channel.
What happened.
The channel it happened in.
The message. Absent on delete, where the reference alone identifies it.
Which message, for deletes.
A reaction was added or removed in a subscribed channel.
What happened.
The channel it happened in.
The message reacted to.
The emoji or custom shortcode.
Who reacted.
A channel was created, changed, or deleted.
What happened.
The community it belongs to.
The channel. Absent on delete.
Which channel, for deletes.
A category was created, changed, or deleted.
What happened.
The community it belongs to.
The category. Absent on delete.
Which category, for deletes.
A role was created, changed, or deleted.
What happened.
The community it belongs to.
The role. Absent on delete.
Which role, for deletes.
Someone joined, left, or had their roles changed.
What happened. A kick or a ban arrives as a leave.
The community.
The member. Absent on leave.
Who, for leaves.
A community's profile or settings changed.
What happened.
The community.
The community. Absent on delete.
The pending-application queue changed. Only sent to members who can manage approvals.
What happened.
The community.
The applicant.
The application. Absent on approve.
A label was applied or retracted on a record in a subscribed space.
What happened.
The space the labelled record lives in.
The labelled record.
The label value.
The labeler.
A moderation action was logged. Only sent to members who can read the log.
The community.
The log entry.
A notification was raised for the connected user.
The notification.
The connected user marked notifications seen somewhere else, so this client should clear the same badges.
The user's remaining unread count.
The channel that was marked seen, when it was a single channel.
The point everything was marked seen up to.
Someone's presence changed.
Whose presence changed.
Their new presence.
The connected user changed their own preferences somewhere else.
Their preferences as they now stand.
Someone is typing in a subscribed channel.
Who is typing.
Where.
A voice channel's participants changed.
What happened.
The voice channel.
Who.
Their voice state. Absent on leave.
Whether they are currently speaking, on speaking events.
Progress while a community is being created, which takes several PDS round-trips.
What the AppView is doing now.
Steps finished.
Steps in total.
The community, once its account exists.
Human-readable detail, set on failure.
social.colibri.beta.voice.defs
The RTP capabilities a WebRTC endpoint supports.
The opaque mediasoup capability blob.
Parameters for creating one side of a WebRTC transport.
The transport's identifier.
The opaque mediasoup ICE parameters blob.
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.
The opaque mediasoup DTLS parameters blob.
Which side of the call this transport carries.
A media producer available to consume.
The producer's identifier.
Who is producing this media.
The media kind.
Whether the producer is currently paused.
What the producer captures.
Parameters for consuming one producer.
The consumer's identifier.
The producer being consumed.
The media kind.
The opaque mediasoup RTP parameters blob.
A change in whether someone is currently speaking.
Who this update is about.
Whether they are currently speaking.
An audio level in dBFS.
Joins a voice channel. A connection must join before sending any other frame, and joining a second channel leaves the first.
The voice channel to join.
Leaves the voice channel this connection is joined to.
Requests the router's RTP capabilities for the joined channel.
Requests a new WebRTC transport for the joined channel.
Whether this transport will send or receive media.
Completes DTLS negotiation for a transport this connection created.
The transport to connect.
The opaque mediasoup DTLS parameters blob.
Starts producing media on a send transport this connection created.
The send transport to produce on.
The media kind.
The opaque mediasoup RTP parameters blob.
What this producer captures.
Closes a producer this connection owns.
The producer to close.
Starts consuming another peer's producer on a receive transport this connection created.
The receive transport to consume on.
The producer to consume.
This connection's opaque mediasoup RTP capabilities blob.
Resumes a consumer this connection created, which is created paused by default.
The consumer to resume.
Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged.
Whether the microphone is muted.
Whether incoming audio is silenced.
Keeps the connection alive. The server answers with an ack.
Answers a heartbeat.
Something the client sent could not be acted on.
Error name.
Human-readable detail.
Confirms this connection has joined a voice channel.
The voice channel now joined.
Another peer joined the voice channel this connection is in.
Who joined.
A peer left the voice channel this connection is in.
Who left.
A peer's producer closed.
The producer that closed.
Whose producer this was.
The server removed this client from the voice channel. Sent only to the client it applies to.
Why it happened.
A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them.
Whose state changed.
Whether the microphone is muted, for any reason.
Whether incoming audio is silenced, for any reason.
Whether a moderator muted them. When this is true the peer cannot unmute themselves.
Whether a moderator deafened them. When this is true the peer cannot undeafen themselves.
Queries
Section titled “Queries”Read-only GET endpoints served by the AppView.
social.colibri.beta.actor.getDeletionStatus
Gets what would happen if the requesting user deleted their account.
How many indexed records would be removed.
How many notifications would be removed.
Communities the user solely owns, which block deletion until transferred or deleted.
The request has no valid service auth.
social.colibri.beta.actor.getPreferences
Gets the requesting user's own settings, as the AppView currently holds them.
The requesting user's settings.
The request has no valid service auth.
social.colibri.beta.actor.getProfile
Gets a user's profile.
The user's DID or handle.
The user's profile.
The request has no valid service auth.
No user matches the given DID or handle.
social.colibri.beta.actor.listCommunities
Gets the requesting user's communities, in their preferred order.
The requesting user's communities, in preferred sidebar order.
The request has no valid service auth.
social.colibri.beta.blob.get
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.
DID of the repo holding the blob.
The blob's CID.
The space holding the blob. Required for a blob in a permissioned space, and omitted for one on a public repo.
A rendition of a resizable image.
Sets the download filename.
The request has no valid service auth.
The requesting user may not read the space holding the blob.
No blob matches the given DID and CID.
The arguments are inconsistent or malformed beyond schema validation.
The repo's PDS failed while the AppView fetched the blob.
social.colibri.beta.channel.getChannel
Gets one channel.
The channel to get.
The requested channel.
The request has no valid service auth.
The requesting user may not read this channel.
No channel matches the given space reference.
social.colibri.beta.channel.listMessages
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.
The channel to list messages from.
Maximum number of messages to return.
Pagination cursor from a previous call.
Whether to return the oldest messages first instead of the newest.
Pagination cursor for the next page.
The channel's messages.
The request has no valid service auth.
The requesting user may not read this channel.
No channel matches the given space reference.
social.colibri.beta.channel.listReactions
Lists everyone who reacted to one message, for the hover card.
The channel the message was posted in.
DID of the repo holding the message.
The message's record key.
Restricts the results to reactions with this emoji.
Maximum number of reactions to return.
Pagination cursor from a previous call.
Pagination cursor for the next page.
Reactions to the message, aggregated by emoji.
The request has no valid service auth.
The requesting user may not read this channel.
No channel matches the given space reference.
No message matches the given author and record key in that channel.
social.colibri.beta.channel.listUnreadStatus
Lists per-channel unread state for the requesting user.
Restricts the results to one community. Absent returns unread state across all of the requesting user's communities.
Maximum number of statuses to return.
Unread state per channel.
The request has no valid service auth.
social.colibri.beta.community.getCommunity
Gets a community by DID or handle.
A DID or handle identifying the community.
The requested community.
The request is missing, malformed, or unverifiable service auth.
No community exists at that identifier.
social.colibri.beta.community.getInvitation
Resolves an invitation code, so a client can show what it leads to before the user accepts. This is readable without membership.
The invitation code to resolve.
The resolved invitation.
The community the invitation leads to.
No invitation exists with that code.
social.colibri.beta.community.listApplications
Lists pending requests to join a community that requires approval.
The community to list applications for.
Whether to include applications a moderator has hidden from the active queue.
Maximum number of applications to return.
Pagination cursor from a previous response.
Pagination cursor for the next page, if more applications exist.
Applications matching the request.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the approval.manage permission.
No community exists at the given DID.
social.colibri.beta.community.listBans
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.
The community to list bans for.
Maximum number of bans to return.
Pagination cursor from a previous response.
Pagination cursor for the next page, if more bans exist.
Members currently banned, most recently banned first.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the member.ban permission.
No community exists at the given DID.
social.colibri.beta.community.listCategories
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.
The community to list categories of.
The community's categories, in display order.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks permission to view this community's categories.
No community exists with that DID.
social.colibri.beta.community.listChannels
Lists a community's channels as a flat list, for clients that do not need the category grouping.
The community to list channels of.
The community's channels.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks permission to view this community's channels.
No community exists with that DID.
social.colibri.beta.community.listInvitations
Lists a community's invitation codes.
The community to list invitations for.
The maximum number of results to return.
The cursor from a previous call, for fetching the next page.
A cursor for fetching the next page.
The community's invitations.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the invitation.create permission.
No community exists with that DID.
social.colibri.beta.community.listMembers
Lists a community's admitted members.
The community to list members of.
Filters to members holding this role.
The maximum number of results to return.
The cursor from a previous call, for fetching the next page.
A cursor for fetching the next page.
The community's members.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks permission to list this community's members.
No community exists with that DID.
social.colibri.beta.community.listMigratable
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.
Whether to include communities the user belongs to but cannot migrate. They come back with viewerIsAdmin false.
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.
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.
The request is missing, malformed, or unverifiable service auth.
The requesting user's own PDS could not be read, so no candidate list could be built at all.
social.colibri.beta.community.listModerationLog
Lists a community's moderation audit log.
The community to list the moderation log for.
Maximum number of log entries to return.
Pagination cursor from a previous response.
Pagination cursor for the next page, if more entries exist.
Log entries, most recent first.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the moderation.viewLog permission.
No community exists at the given DID.
social.colibri.beta.community.listRoles
Lists a community's roles.
The community to list roles of.
The community's roles.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks permission to view this community's roles.
No community exists with that DID.
social.colibri.beta.embed.getMetadata
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.
The URL to preview.
The parsed preview.
The request has no valid service auth.
The arguments are inconsistent or malformed beyond schema validation.
The target refused the request, timed out, or resolves to an address the AppView will not fetch.
The target site failed while the AppView fetched or parsed it.
social.colibri.beta.embed.gifCategories
Lists the categories shown in the GIF picker.
The GIF picker's categories.
The request has no valid service auth.
This AppView has no GIF provider key configured.
The GIF provider failed.
social.colibri.beta.embed.searchGifs
Searches the GIF picker's provider.
The search query.
Maximum number of GIFs to return.
Pagination cursor from a previous call.
Pagination cursor for the next page.
GIFs matching the query.
The request has no valid service auth.
This AppView has no GIF provider key configured.
The GIF provider failed.
social.colibri.beta.embed.trendingGifs
Gets trending GIFs from the GIF picker's provider.
Maximum number of GIFs to return.
Pagination cursor from a previous call.
Pagination cursor for the next page.
Currently trending GIFs.
The request has no valid service auth.
This AppView has no GIF provider key configured.
The GIF provider failed.
social.colibri.beta.notification.getUnreadCount
Gets how many of the requesting user's notifications are unread.
Number of unread notifications.
The request has no valid service auth.
social.colibri.beta.notification.getUnseen
Gets the requesting user's unseen notifications for one channel, used to render that channel's unread badge detail.
The channel to get unseen notifications for.
Maximum number of notifications to return.
Unseen notifications raised in the given channel.
The request has no valid service auth.
No channel matches the given space reference.
social.colibri.beta.notification.listNotifications
Gets the requesting user's notifications, newest first.
Maximum number of notifications to return.
Pagination cursor from a previous call.
Pagination cursor for the next page, when more notifications remain.
The requesting user's notifications, newest first.
The request has no valid service auth.
social.colibri.beta.server.describeServer
Gets information about this AppView.
The AppView's own identity.
Stable software identifier, always 'colibri-appview'. Clients key on this to confirm a host is a Colibri AppView before pointing themselves at it.
Which build of the software this is. 'vanilla' for the stock AppView, and any string a fork or a customised deployment chooses for itself.
The running software version.
The domain community handles are minted under.
The PDS communities are created on.
How to reach the operator.
Optional features this AppView supports.
The space types this AppView understands.
Procedures
Section titled “Procedures”Mutating POST endpoints served by the AppView.
social.colibri.beta.actor.deleteAccount
Erases the requesting user's Colibri data held by this AppView. This does not touch the user's repos, which only they control.
How many indexed records were removed.
The request has no valid service auth.
The user solely owns at least one community and must transfer or delete it before deleting their account.
social.colibri.beta.actor.grantSpaceAccess
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.
The space to grant access to.
A delegation token minted by the user's PDS for the space.
When the resulting space credential expires. The client should call this again before then to keep access current.
The request has no valid service auth.
The arguments are inconsistent or malformed beyond schema validation.
The delegation token is malformed, expired, or already used.
No space matches the given space reference.
The delegation token does not grant access to the given space.
The user's PDS failed while the AppView exchanged the delegation token or synced the space.
social.colibri.beta.actor.putMutes
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.
The complete, replacement mute list.
The requesting user's settings, after the update.
The request has no valid service auth.
social.colibri.beta.actor.putSettings
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.
Which messages produce a notification. Absent leaves the current value unchanged.
Communities in preferred sidebar order. Absent leaves the current value unchanged.
GIFs saved from the picker, stored whole. Absent leaves the current value unchanged.
The requesting user's settings, after the update.
The request has no valid service auth.
A field is present but does not hold an allowed value.
social.colibri.beta.actor.setStatus
Sets the requesting user's off-protocol presence. An absent field leaves the current value unchanged.
The status text. Absent leaves the current value unchanged.
An emoji shown beside the status. Absent leaves the current value unchanged.
Derived online state. Absent leaves the current value unchanged.
The requesting user's presence, after the update.
The request has no valid service auth.
A field is present but does not hold an allowed value.
social.colibri.beta.category.create
Creates a category in a community.
The community to create the category in.
The category's name.
The newly created category.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the category.create permission.
No community exists at the given DID.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.category.delete
Deletes a category. Its channels are not deleted: they become uncategorised until moved to another category.
The community the category belongs to.
The category's record key.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the category.delete permission.
No community exists at the given DID.
No category exists at the given record key.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.category.update
Updates a category's name.
The community the category belongs to.
The category's record key.
The category's new name.
The updated category.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the category.update permission.
No community exists at the given DID.
No category exists at the given record key.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.channel.create
Creates a channel. This creates a space for the channel, then writes the channel's configuration record at key 'self' inside that space.
The community the channel belongs to.
The channel's space type.
The channel's name.
The category to list the channel under.
The channel's topic.
Whether only community admins may post.
Roles allowed to post here.
Members allowed to post here in addition to allowedRoles.
Roles that may read this channel. Empty means every member may.
Members that may read this channel beyond visibleToRoles.
The newly created channel.
The request has no valid service auth.
The requesting user lacks the channel.create permission.
No community matches the given DID.
No category matches the given record key.
The requesting user cannot grant a role that outranks their own.
The arguments are inconsistent or malformed beyond schema validation.
The AppView cannot act as the community because its stored credentials are missing or unusable.
The community's PDS is unreachable or the AppView has no administrative access to it.
The community's PDS failed while creating the channel's space.
social.colibri.beta.channel.delete
Deletes a channel's space. Messages members wrote in it stay in their own repos and become unreadable to everyone but their authors.
The channel to delete.
The request has no valid service auth.
The requesting user lacks the channel.delete permission.
No channel matches the given space reference.
The AppView cannot act as the community because its stored credentials are missing or unusable.
The community's PDS is unreachable or the AppView has no administrative access to it.
The community's PDS failed while deleting the channel's space.
social.colibri.beta.channel.putReadCursors
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.
The community the cursors belong to.
The complete, replacement set of read cursors for the community's channels.
Unread state per channel, after the update.
The request has no valid service auth.
No community matches the given DID.
social.colibri.beta.channel.reorder
Sets the channel order within one category.
The community the category belongs to.
The category to reorder.
The complete new order for the category's channels, by channel space key.
The request has no valid service auth.
The requesting user lacks the channel.update permission.
No community matches the given DID.
No category matches the given record key.
The given channels do not match the category's current set of channels.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.channel.update
Updates a channel's configuration. An absent field leaves the current value unchanged.
The channel to update.
The channel's name. Absent leaves the current value unchanged.
The channel's topic. Absent leaves the current value unchanged.
The category to move the channel to. Absent leaves the current value unchanged.
Whether only community admins may post. Absent leaves the current value unchanged.
Roles allowed to post here. Absent leaves the current value unchanged.
Members allowed to post here in addition to allowedRoles. Absent leaves the current value unchanged.
Whether link previews are shown here. Absent leaves the current value unchanged.
Roles that may read this channel. Empty means every member may.
Members that may read this channel beyond visibleToRoles.
The channel, after the update.
The request has no valid service auth.
The requesting user lacks the channel.update permission.
No channel matches the given space reference.
No category matches the given record key.
The requesting user cannot grant a role that outranks their own.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.adopt
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.
The account to adopt. The credentials must authenticate as this exact DID, which is what proves the caller controls it.
The identifier used to authenticate with the account's PDS, such as its handle or DID.
The account's password. An app password is not enough: minting a delegation token requires full access.
The community's name.
The community's description.
The adopted community.
The request is missing, malformed, or unverifiable service auth.
The arguments are inconsistent or malformed beyond schema validation.
This account is already a community on this AppView.
The PDS refused the given identifier and password.
The credentials authenticate a different account than the DID given.
The account's PDS does not implement com.atproto.simplespace, so it cannot host community spaces.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.applyLabel
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.
The space the labelled record lives in.
The record to label.
The label value. `hidden` withholds the record from reads. `spoiler` and `embeds-suppressed` are display hints.
Narrows the label to specific URIs inside the subject record. Absent means the whole record.
Human-readable reason for the label.
The applied label.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the label.apply permission.
No community exists at the given DID.
No space exists at the given reference.
The scope or val is not valid for the subject record.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.approveApplication
Approves a pending application, admitting the subject as a member.
The community to admit the subject to.
The applicant to admit.
The newly admitted member.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the approval.manage permission.
No community exists at the given DID.
No pending application exists for the subject in this community.
The subject already holds a member record in this community.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.ban
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.
The community to ban the member from.
The member to ban.
Human-readable reason for the ban.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the member.ban permission.
No community exists at the given DID.
The subject is already banned from this community.
The subject holds a role at or above the caller's highest role position.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.create
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.
The community's name.
The community's description.
A slug used for the community handle instead of a generated one.
The newly created community.
The request is missing, malformed, or unverifiable service auth.
The arguments are inconsistent or malformed beyond schema validation.
A community already exists with the requested handle.
The AppView's PDS could not be reached to provision the account.
The AppView's PDS does not implement com.atproto.simplespace, so it cannot host community spaces.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.createInvitation
Creates an invitation code for a community.
The community to create an invitation for.
How many times the invitation may be redeemed, if limited.
When the invitation stops being redeemable, if ever.
The newly created invitation.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the invitation.create permission.
No community exists with that DID.
social.colibri.beta.community.delete
Deletes the community's spaces and its account. Members' own records stay in their own repos and simply become unreadable.
The community to delete.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the community.delete permission.
No community exists with that DID.
The AppView's stored credentials for this community are missing or unusable.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.deleteImage
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.
The community to clear the image on.
Which image to clear.
The community with the image cleared.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the community.manage permission.
No community exists with that DID.
The AppView's stored credentials for this community are missing or unusable.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.deleteInvitation
Deletes an invitation code.
The community the invitation belongs to.
The invitation code to delete.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the invitation.delete permission.
No community exists with that DID.
No invitation exists with that code.
social.colibri.beta.community.dismissApplication
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.
The community the application belongs to.
The applicant whose application to dismiss.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the approval.manage permission.
No community exists at the given DID.
No pending application exists for the subject in this community.
social.colibri.beta.community.join
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.
The community to join.
An invitation code.
The result of the join attempt.
The new member view. Present only when status is joined.
The request is missing, malformed, or unverifiable service auth.
No community exists with that DID.
No invitation exists with that code.
The requesting user already holds a member record in this community.
The requesting user is banned from this community.
The AppView's stored credentials for this community are missing or unusable.
social.colibri.beta.community.kick
Removes a member from a community. The member may rejoin unless the community requires approval to join.
The community to remove the member from.
The member to remove.
Human-readable reason for the kick.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the member.kick permission.
No community exists at the given DID.
The subject does not hold a member record in this community.
The subject holds a role at or above the caller's highest role position.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.leave
Removes the requesting user's membership in a community.
The community to leave.
The request is missing, malformed, or unverifiable service auth.
No community exists with that DID.
The requesting user does not hold a member record in this community.
The requesting user is the last holder of a protected role and cannot leave.
The AppView's stored credentials for this community are missing or unusable.
social.colibri.beta.community.migrate
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.
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.
The newly created, space-backed community.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks permission to migrate this community.
No community exists at the legacy record's DID.
This legacy community has already been migrated.
The AppView's stored credentials for this community are missing or unusable.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.negateLabel
Retracts a label by writing a negating one. The original label record is left in place.
The space the labelled record lives in.
The labelled record.
The label value to retract.
Human-readable reason for the retraction.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the label.apply permission.
No community exists at the given DID.
No space exists at the given reference.
No active label matching the subject and value exists to negate.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.putImage
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.
The community to set the image on.
Which image to set.
The community with the new image resolved, so one call is enough to re-render.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the community.manage permission.
No community exists with that DID.
The bytes are not one of the accepted image types.
The image exceeds the size limit for this kind.
The AppView's stored credentials for this community are missing or unusable.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.registerCredentials
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.
The community the credentials belong to.
The identifier used to authenticate with the community's PDS, such as its handle or DID.
The password or app password used to authenticate with the community's PDS.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks permission to register credentials for this community.
The arguments are inconsistent or malformed beyond schema validation.
The PDS refused the identifier and password.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.community.reorderCategories
Sets the complete display order of a community's categories.
The community whose categories are being reordered.
The complete new display order of the community's categories.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the category.update permission.
No community exists with that DID.
The supplied categories do not match the community's existing set.
The AppView's stored credentials for this community are missing or unusable.
social.colibri.beta.community.setMemberRoles
Sets the complete set of roles a member holds.
The community the member belongs to.
The member whose roles are being set.
The complete new set of roles the member should hold.
The updated member.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the role.manage permission.
No community exists with that DID.
The subject does not hold a member record in this community.
One of the requested roles does not exist.
The requesting user cannot grant or revoke a role at or above their own highest position.
The AppView's stored credentials for this community are missing or unusable.
social.colibri.beta.community.unban
Lifts a ban, letting the community issue the subject space credentials again.
The community to lift the ban in.
The member to unban.
Human-readable reason for lifting the ban.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the member.unban permission.
No community exists at the given DID.
The subject is not currently banned from this community.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.community.undismissApplication
Restores a dismissed application to the active queue. This is an AppView-local change and is never written to the community's repo.
The community the application belongs to.
The applicant whose application to restore.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the approval.manage permission.
No community exists at the given DID.
No pending application exists for the subject in this community.
social.colibri.beta.community.update
Updates a community's settings. A field left absent stays unchanged.
The community to update.
The community's name.
The community's description.
Whether joining produces an application to approve.
Whether link previews are shown by default.
DIDs whose labels this community honours.
The updated community.
The request is missing, malformed, or unverifiable service auth.
The requesting user lacks the community.manage permission.
No community exists with that DID.
The AppView's stored credentials for this community are missing or unusable.
A PDS or third-party call the AppView depends on failed.
social.colibri.beta.notification.registerPush
Registers a push endpoint for the requesting user's device. Web Push requires endpoint, p256dh, and auth. FCM requires token.
The push provider to register with.
The platform the device runs.
The Web Push subscription endpoint. Required when provider is webpush.
The Web Push subscription's p256dh key. Required when provider is webpush.
The Web Push subscription's auth secret. Required when provider is webpush.
The FCM registration token. Required when provider is fcm.
The request has no valid service auth.
The fields required for the given provider are missing or malformed.
This AppView has no keypair for the requested provider.
social.colibri.beta.notification.unregisterPush
Removes a previously registered push endpoint.
The push provider to unregister from.
The Web Push subscription endpoint to remove.
The FCM registration token to remove.
The request has no valid service auth.
The arguments are inconsistent or malformed beyond schema validation.
social.colibri.beta.notification.updateSeen
Marks every notification raised at or before a point in time seen.
Notifications raised at or before this time are marked seen.
Number of unread notifications remaining.
The request has no valid service auth.
social.colibri.beta.notification.updateSeenForMessage
Marks the notifications raised by one message seen.
The channel the message was posted in.
The message whose notifications are marked seen.
Number of unread notifications remaining.
The request has no valid service auth.
No channel matches the given space reference.
No message matches the given record reference in that channel.
social.colibri.beta.role.create
Creates a role in a community.
The community to create the role in.
Display name.
Permissions granted by this role.
Hex colour as #rrggbb.
Hierarchy position. Higher outranks lower.
Whether holders are listed separately in the member list.
Whether @role mentions resolve to this role.
The newly created role.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the role.manage permission.
No community exists at the given DID.
The arguments are inconsistent or malformed beyond schema validation.
The requested position is at or above the caller's highest role position, or the permissions include one the caller does not hold.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.role.delete
Deletes a role.
The community the role belongs to.
The role's record key.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the role.manage permission.
No community exists at the given DID.
No role exists at the given record key.
The role is marked protected and cannot be deleted.
The role is at or above the caller's highest role position.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.role.update
Updates a role's settings.
The community the role belongs to.
The role's record key.
Display name.
Hex colour as #rrggbb.
Permissions granted by this role.
Hierarchy position. Higher outranks lower.
Whether holders are listed separately in the member list.
Whether @role mentions resolve to this role.
Per-channel overrides.
The updated role.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the role.manage permission.
No community exists at the given DID.
No role exists at the given record key.
The role is marked protected and cannot be modified.
The change would place the role at or above the caller's highest role position, or grants a permission the caller does not hold.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.voice.moderate
Acts on someone in a voice channel. An absent field leaves the current value unchanged.
The voice channel the subject is in.
Who to act on.
Whether the subject's microphone is muted. Absent leaves the current value unchanged.
Whether the subject cannot hear others. Absent leaves the current value unchanged.
Whether to disconnect the subject from the channel.
The request has no valid service auth.
The requesting user lacks the voice.moderate permission.
No channel matches the given space reference.
The subject is not currently connected to the channel.
This AppView has no voice SFU running.
Permission sets
Section titled “Permission sets”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
Read and change your Colibri profile, settings, mutes and read state.
- social.colibri.beta.actor.mute
- social.colibri.beta.actor.settings
- social.colibri.beta.channel.read
- social.colibri.beta.actor.profile
- 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
Create and administer Colibri communities, including their channels, roles, members and moderation.
- 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
social.colibri.beta.permissionMessaging
Read and post in the Colibri communities you belong to.
- social.colibri.beta.message
- social.colibri.beta.reaction
- 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
social.colibri.beta.permissionNotification
Read your Colibri notifications and mark them as seen.
- 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
Send push notifications to this device when Colibri is closed.
- social.colibri.beta.notification.registerPush
- social.colibri.beta.notification.unregisterPush
See also
Section titled “See also”- AppView Specification: the endpoints these describe.
- Facets: how rich text is encoded.
- Communities: which records live where.
Colibri-only profile theming. Always read from this record, even when syncBluesky is set.
Accent colour as #rrggbb.
Fallback banner colour as #rrggbb, used when no banner image is set.
Two-colour gradient.