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.thread
A thread beside a text channel. The space key is the thread's identity, and the thread's own configuration is the social.colibri.beta.thread record at key 'self' inside it. That record carries the link to the parent channel and only the community may write it, so a thread cannot claim a channel its community did not put it in.
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.
Whether the AppView may read the user's listening records from the services they publish to and show what they are playing to others.
social.colibri.beta.bridge.registration
A bridge the community has paired with. Lives in the community's configuration space, so every member can see which bridges are connected and which channels they relay. Written only by the community.
The bridge's DID, which signs its service auth.
The service the bridge connects to.
The id of the server, workspace or network on the other service.
Its name on the other service when the bridge was paired.
Channels the bridge may read and write.
Whether the bridge may currently write. An admin can pause a bridge without unlinking its channels.
Whether moderation crosses the bridge. When on, hiding a bridged message removes its original on the other service, and a moderator removing a relayed message there hides it here.
The admin who paired the bridge.
When the bridge was paired.
When the registration last changed.
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. `moved` is enforced too: the AppView withholds the record from this space and serves it in the space named by `destination` instead, at its own record key, so it reads in the order it was written. `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.
Where a `moved` record is served instead of here. Honoured only on a `moved` label.
Shared by every `moved` label written in one move, which is what groups a move for auditing. It does not affect the order the records read in.
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.
Content copied here from another message. Present only on a forwarded message.
URLs from this message's link facets whose preview the author chose not to show. Moderator suppression is a label instead.
Who sent this message on another service. Honoured only when the community itself wrote the record.
Another message's content, copied and frozen when the forward was made. The copy does not follow later edits, deletions or labels on the message it came from. Never itself nested: forwarding a forwarded message carries this content over and repoints `source` at the message it was forwarded from.
The message this content was copied from.
When the message this content came from was sent.
The copied message body. Empty when the message that was forwarded carried only attachments.
The copied annotations. A mention here does not notify anyone, because the AppView reads only a message's own facets.
The copied files, re-uploaded into the forwarding author's own repo so the forward stands on its own.
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.
Who reacted on another service. Honoured only when the community itself wrote the record.
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.
social.colibri.beta.thread
A thread's configuration, including the link to the channel it belongs to. Lives at key 'self' in the thread's own space and is written only by the community.
The thread's title.
The text channel this thread belongs to. Moving the thread to another channel rewrites this field.
The message the thread was opened from. Absent on a thread opened from scratch. Its space stays where the thread was opened even after the thread moves to another channel, which is what drops the thread's marker out of the old channel without losing the quoted message.
Who opened the thread.
When the thread was opened.
Roles that may read this thread. Empty or absent means everyone who can read the parent channel can read the thread. A non-empty list makes the thread 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 thread in addition to visibleToRoles.
Who opened this thread on another service. Honoured only when the community itself wrote the record.
social.colibri.beta.thread.follow
Marks its author as following the thread it lives in. Presence means following and deleting it means leaving. The follower writes it into the thread's own space, so following is visible to everyone who can read the thread.
When the user started following.
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.
Present when this is someone on another service whose messages a bridge relays. They have no Colibri account of their own.
A user's live, off-protocol state.
Derived online state.
The user's status line.
Where the user is connected for voice, if anywhere.
What the user is doing right now, one entry per service they share from. Empty when the AppView has nothing current for them.
A user's status line.
The status text.
An emoji shown beside the status.
Something the user is doing right now, read from another service they publish to. A client renders it beside their presence.
What sort of activity this is. A client that does not know a kind falls back to naming the source.
The main line: a track, a game, or a stream title.
The second line, such as the artist.
A third line naming where the title sits, such as the album.
Artwork for the activity, served by this AppView. Absent when none could be resolved.
Where the activity points, such as the track's page on the service it was played from.
When the activity began.
After this the activity is no longer current. The AppView clears it and says so, and a client treats a lapsed activity as absent.
The service the activity was read from, such as 'teal.fm'.
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.
Whether the AppView may read what the user is listening to and show it to others.
A muted subject.
What is muted. A user or a community is named by DID, a channel or a thread 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.
A muted thread. Muting a thread silences it without leaving the channel it sits beside.
The muted thread's space.
social.colibri.beta.bridge.defs
Who wrote a record on another service. The community writes every bridged record, and the AppView honours this attribution only on records the community itself wrote.
Record key of the registration the record was written for.
The service the author is on, as its bridge names it.
The author's id on the other service. Opaque to Colibri.
The author's display name on the other service when the record was written.
The author's avatar, uploaded to the community's repo.
The id of the message on the other service, which lets a bridge find its own records again.
Set on messages a bridge imported from the room's earlier history. The AppView sends no notifications for them, and marks their live events as imported.
The person on the other service a bridge is writing for.
The author's id on the other service.
The author's display name on the other service.
An avatar uploaded earlier with uploadBlob.
A Colibri channel kept in sync with a room on another service.
The Colibri channel.
The id of the room on the other service.
The room's name on the other service when the link was made.
The latest history import an admin asked for.
A request to import a linked room's earlier messages.
The oldest message to import. Absent imports the room's whole history.
When an admin asked for the import. Messages after this were relayed live.
Progress of a history import, as the bridge last reported it.
The linked channel being filled.
The request this status belongs to.
How far the import is.
How many messages the bridge has imported so far.
The start of the time range being imported.
The end of the time range being imported.
When the newest imported message in the channel was sent.
When the bridge last reported.
A room a bridge can see on the other service, offered to admins when linking channels.
The room's id on the other service.
The room's name.
What sort of room it is.
Name of the group or category the room sits in, if any.
A bridge registered with a community.
Record key of the registration.
The community the registration belongs to.
The bridge's DID.
The bridge's handle, when it resolves.
The service the bridge connects to.
The id of the server, workspace or network on the other service.
Its name on the other service.
Channels kept in sync.
Progress of each linked channel's latest history import.
Whether the bridge may currently write.
Whether moderation crosses the bridge. When on, hiding a bridged message removes its original on the other service, and a moderator removing a relayed message there hides it here.
The admin who paired the bridge.
When the bridge was paired.
When the registration last changed.
A pending pairing, shown to an admin before they confirm it.
The bridge that asked to pair.
The bridge's handle, when it resolves.
The service the bridge connects to.
The id of the server, workspace or network on the other service.
Its name on the other service.
When the code stops working.
Marks a profile view as someone on another service whose messages a bridge relays.
Record key of the registration the record was written for.
The service the person is on.
Their id on that service.
Someone on another service who reacted to a message through a bridge.
Record key of the registration the reaction was written for.
The service the person is on.
Their id on that service.
Their display name on that service when they reacted.
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`.
Content this message was forwarded from, when it is a forward. Never itself nested.
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.
The frozen copy a forwarded message carries, with its source resolved as far as this AppView can. Never itself nested, so a forward of a forward reports the message it was forwarded from rather than a chain.
The message this content was copied from.
Name of the channel or thread the content came from. Absent when this AppView does not know that space.
The community owning the source space, which is that space's authority. Absent when the source reference cannot be parsed.
When the message this content came from was sent.
The copied message body.
The copied annotations.
The copied files, served from the forwarding author's own repo.
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, including people reacting through a bridge.
Colibri users who reacted. People reacting through a bridge are listed in bridgedReactors instead.
Whether the requesting user is among them.
People on other services who reacted through a bridge.
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.
A reference to a record in a named space, for pointing at something outside the space the pointer lives in.
The space holding the referenced record.
DID of the repo holding the referenced record.
Record key of the referenced record.
The referenced record's CID as it stood when the reference was made.
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 thread it happened in, when it happened in a thread rather than in the channel itself. `channel` stays the thread's parent channel, so a client can route to the thread inside it.
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.
The nesting depth of the item. 0 is the outermost level.
Small, muted text.
Text hidden until revealed.
A user mention.
The mentioned user.
A mention of someone on another service, whose messages a bridge relays.
Record key of the bridge registration the person is reached through.
The service the person is on.
Their id on that service.
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, channels and threads 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 and threads to start receiving messages for.
Removes communities, channels and threads from what this connection receives.
Communities to stop receiving events for.
Channels and threads 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 and threads 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.
Set when a bridge imported the message from earlier history. Clients show it without marking the channel unread.
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.
Present when someone on another service reacted through a bridge. The actor is then the community that wrote the reaction.
A channel was created, changed, or deleted.
What happened.
The community it belongs to.
The channel. Absent on delete.
Which channel, for deletes.
A thread was opened, changed, deleted, or written to. This rides the community's topic rather than a topic per thread, so a client keeps every thread's activity age and unread dot live without subscribing to each one.
What happened. `activity` means someone posted, which moves the thread's last activity and nothing else.
The community it belongs to.
The channel the thread belongs to.
The thread. Absent on delete and on activity.
Which thread, for deletes and for activity.
The thread's new last activity, on activity events.
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.
A registration held by the connected bridge was changed or removed. Sent only to the bridge, which should fetch its configuration again.
What happened.
The community the registration belongs to.
Record key of the registration.
social.colibri.beta.thread.defs
A thread as the AppView serves it. The thread's identity is its space.
The thread's space, which is its identity.
The channel the thread belongs to.
The community the thread's channel belongs to.
The thread's title.
The message the thread was opened from. Absent on a thread opened from scratch. Its space stays where the thread was opened even after the thread moves to another channel, which is what drops the thread's marker out of the old channel without losing the quoted message. A client draws the thread's marker in the channel river only where the anchor's space is the channel being read.
The anchor message itself, for opening a thread without having read its channel. Served by getThread rather than by listThreads.
Who opened the thread.
When the thread was opened.
When the thread was last written to. This is what drives the activity age a client shows, since threads carry no presence roster of their own.
How many messages the thread holds.
How many of those messages were moved in from somewhere else.
Who has posted, most recently active first, capped at a handful.
Whether the thread restricts who may read it beyond who may read its channel.
Roles that may read this thread. Empty means everyone who can read the channel may.
Members that may read this thread beyond visibleToRoles.
The requesting user's relationship to this thread.
The requesting user's access and unread state for a thread.
Whether the user may read this thread.
Whether the user may post in this thread.
Whether the user may rename, move or delete this thread.
Whether the user follows this thread.
Whether the user has muted this thread.
Whether anything in the thread is unread.
How many unread messages in the thread mention the user.
The user's read cursor in this thread.
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.
STUN and TURN servers the client should use while gathering candidates. Absent when the server has none configured.
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.
Who the media link was signed for. Set by the AppView on a signed link, alongside exp and sig.
Unix time in seconds after which the media link stops working.
Signature over did, cid, space, viewer and exp, which lets an img or video element load the blob without a bearer header.
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.bridge.getConfiguration
Lists every registration held by the calling bridge, with its linked channels. A bridge calls this at startup and whenever a registration change reaches it.
The caller's registrations across all communities.
The request is missing, malformed, or unverifiable service auth.
social.colibri.beta.bridge.getPairing
Describes a pending pairing code so an admin can see which bridge they are about to connect.
The pairing code.
The pending pairing.
The request is missing, malformed, or unverifiable service auth.
The code does not exist, has expired, or was already used.
social.colibri.beta.bridge.listRegistrations
Lists the bridges connected to a community.
The community to list bridges for.
The community's bridges, newest first.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the community.manage permission.
No community exists at the given DID.
social.colibri.beta.bridge.listRemoteRooms
Lists the rooms a bridge reported on the other service, for linking them to channels.
The community the registration belongs to.
Record key of the registration.
The rooms, in the order the bridge reported them.
When the bridge last reported its rooms.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the community.manage permission.
No community exists at the given DID.
The community has no bridge registration with that id.
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 or in a thread, newest first by default. Messages from the repo-backed channel this one was migrated from are included and marked legacy. Messages moved in from another space are included in their move order, and messages moved out are absent.
The channel or thread 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.
Threads whose anchor message is in this page, so a client can draw a thread's marker under the message it was opened from without a second call. Threads the requesting user may not read are absent.
The request has no valid service auth.
The requesting user may not read this channel or thread.
No channel or thread 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.
A community every user joins after creating their profile for the first time.
The space types this AppView understands.
social.colibri.beta.thread.getThread
Gets one thread, with its anchor message resolved so a client can open it without having read the channel it belongs to.
The thread to get.
The requested thread.
The request has no valid service auth.
The requesting user may not read this thread.
No thread matches the given space reference.
social.colibri.beta.thread.listThreads
Lists a community's threads, most recently active first. Threads the requesting user may not read are absent rather than refused.
The community to list threads in.
Restrict the list to threads in one channel. Absent lists every channel's threads, which is what the community sidebar needs.
Which threads to list.
Maximum number of threads to return.
Pagination cursor from a previous call.
Pagination cursor for the next page.
The threads.
The request has no valid service auth.
The requesting user is not a member of this community.
No community matches the given DID.
No channel matches the given space reference.
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.
Whether the AppView may show what the user is listening to. 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.bridge.addReaction
Adds a reaction from someone on another service to a message in a linked channel. The community writes the reaction, attributed to that person.
The community the registration belongs to.
Record key of the registration.
The linked channel or thread the record lives in.
Who reacted.
The message being reacted to.
The reaction, as an emoji or a custom shortcode.
Record key of the record the community wrote.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
This person already reacted to the message with the same emoji.
social.colibri.beta.bridge.createPairing
Starts pairing a bridge with a community. Called by the bridge, which shows the returned code to an admin on the other service. A Colibri admin then redeems the code, which proves both sides agreed.
The service the bridge connects to.
The id of the server, workspace or network on the other service.
Its name on the other service.
The single-use pairing code.
When the code stops working.
The request is missing, malformed, or unverifiable service auth.
The bridge sent too many requests. Retry after the interval in the response headers.
social.colibri.beta.bridge.createThread
Opens a thread beside a linked channel for someone on another service. The community writes the thread, attributed to that person.
The community the registration belongs to.
Record key of the registration.
The linked channel to open the thread beside.
The thread's title.
Who opened the thread.
The message in the channel the thread was opened from. Absent opens a thread from scratch.
The thread's id on the other service.
When the thread was opened on the other service. Defaults to now.
The thread's space.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
The anchor message does not exist in the given channel.
social.colibri.beta.bridge.deleteMessage
Deletes a message the calling bridge posted.
The community the registration belongs to.
Record key of the registration.
The linked channel or thread the record lives in.
Record key of the message.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
No record exists at the given key in that channel.
The target record was not written for this registration.
social.colibri.beta.bridge.deleteThread
Deletes a thread the calling bridge opened, along with its space.
The community the registration belongs to.
Record key of the registration.
The thread's space.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
No thread exists in that space.
The thread was not opened for this registration.
social.colibri.beta.bridge.editMessage
Replaces the text of a message the calling bridge posted.
The community the registration belongs to.
Record key of the registration.
The linked channel or thread the record lives in.
Record key of the message.
The new message body.
Annotations over ranges of the new text.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
No record exists at the given key in that channel.
The target record was not written for this registration.
social.colibri.beta.bridge.hideMessage
Hides a Colibri member's message after a moderator removed its copy on the other service. The community applies a hidden label to the message. Works only when an admin has turned on moderation mirroring for the registration.
The community the registration belongs to.
Record key of the registration.
The linked channel or thread the message lives in.
The message to hide.
Human-readable reason.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
Moderation mirroring is turned off for this registration.
No message exists at the given key in that channel.
The message was written by the community itself. Delete it with deleteMessage instead.
social.colibri.beta.bridge.importMessages
Imports earlier messages from someone on another service into a linked channel or a thread beside it, after an admin asked for a history import. The community writes each message at its original time, and clients see them only when they load history.
The community the registration belongs to.
Record key of the registration.
The linked channel, or a thread beside it, the messages go into.
The messages, oldest first.
One result per message, in input order.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
No admin has asked for a history import on this channel.
A message was sent before the requested range or after the request.
A message from the room's earlier history.
Who sent the message.
The message body.
Annotations over ranges of the text.
The message this one replies to.
Files attached to the message.
Content forwarded from another Colibri message.
The message's id on the other service.
When the message was sent on the other service.
Where an imported message was written.
The message's id on the other service.
Record key of the record the community wrote.
social.colibri.beta.bridge.leave
Disconnects the calling bridge from a community and deletes its registration, for when the remote space removed the bridge. Messages it already relayed stay.
The community the registration belongs to.
Record key of the registration.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.bridge.postMessage
Posts a message from someone on another service into a linked channel. The community writes the message, attributed to that person.
The community the registration belongs to.
Record key of the registration.
The linked channel or thread the record lives in.
Who sent the message.
The message body.
Annotations over ranges of the text.
The message this one replies to.
Files attached to the message.
Content forwarded from another Colibri message.
The message's id on the other service.
When the message was sent on the other service. Defaults to now.
Record key of the record the community wrote.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.bridge.putRemoteRooms
Replaces the list of rooms the calling bridge can see on the other service, offered to admins when linking channels.
The community the registration belongs to.
Record key of the registration.
Every room the bridge can relay.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
The bridge sent too many requests. Retry after the interval in the response headers.
social.colibri.beta.bridge.redeemPairing
Connects a bridge to a community by redeeming its pairing code. Writes a registration with no linked channels.
The community to connect the bridge to.
The pairing code.
The registration.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the community.manage permission.
No community exists at the given DID.
The code does not exist, has expired, or was already used.
This bridge is already connected to the same remote space in this community.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.bridge.removeReaction
Removes a reaction the calling bridge added.
The community the registration belongs to.
Record key of the registration.
The linked channel or thread the record lives in.
Record key of the reaction.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
No record exists at the given key in that channel.
The target record was not written for this registration.
social.colibri.beta.bridge.replaceAvatar
Swaps the avatar on every message and thread attributed to one remote author of this registration, so the previous avatar blob is no longer referenced.
The community the registration belongs to.
Record key of the registration.
The author's id on the other service, as attributed on their records.
The new avatar, uploaded with uploadBlob. Leave it out to remove the avatar.
How many records now carry the new avatar.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.bridge.reportBackfill
Reports how far a history import has got, so admins can follow it.
The community the registration belongs to.
Record key of the registration.
The linked channel being filled.
The request the report belongs to, as it appears on the link.
How far the import is.
How many messages the bridge has imported so far.
The start of the time range being imported.
The end of the time range being imported.
When the newest imported message in the channel was sent.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
No admin has asked for a history import on this channel.
social.colibri.beta.bridge.revoke
Disconnects a bridge from a community and deletes its registration. Messages it already relayed stay.
The community the registration belongs to.
Record key of the registration.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the community.manage permission.
No community exists at the given DID.
The community has no bridge registration with that id.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.bridge.update
Changes which channels a bridge relays, or pauses and resumes it. Omitted fields stay as they are.
The community the registration belongs to.
Record key of the registration.
The complete set of linked channels, replacing the current one.
Whether the bridge may write.
Whether moderation crosses the bridge.
The registration.
The request is missing, malformed, or unverifiable service auth.
The caller lacks the community.manage permission.
No community exists at the given DID.
The community has no bridge registration with that id.
A link names a channel this community does not have.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.bridge.updateThread
Renames a thread the calling bridge opened.
The community the registration belongs to.
Record key of the registration.
The thread's space.
The thread's new title.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The channel is not linked to this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The AppView cannot act as the community because its stored credentials are missing or unusable.
No thread exists in that space.
The thread was not opened for this registration.
social.colibri.beta.bridge.uploadBlob
Uploads a file to the community's repo for use in a bridged message or as a bridged author's avatar.
The community the registration belongs to.
Record key of the registration.
The uploaded blob, to reference from a message or author.
The request is missing, malformed, or unverifiable service auth.
No community exists at the given DID.
The community has no bridge registration with that id.
The caller is not the bridge this registration belongs to.
An admin has paused this registration.
The bridge sent too many requests. Retry after the interval in the response headers.
The file is larger than this AppView accepts from bridges.
The AppView cannot act as the community because its stored credentials are missing or unusable.
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.
Whether joining produces an application a moderator must approve. Defaults to false.
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.
Whether joining produces an application a moderator must approve. Defaults to false.
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.thread.create
Opens a thread beside a text channel. This creates a space for the thread, then writes the thread's configuration record at key 'self' inside it. The anchor message is referenced rather than copied, so it stays in its author's repo in the channel where it was written.
The community the thread's channel belongs to.
The text channel to open the thread beside.
The thread's title.
The message to open the thread from. Absent opens a thread from scratch, which has no marker in the channel river and is reachable from the channel's thread list and the sidebar.
Roles that may read this thread. Empty means everyone who may read the channel may read the thread.
Members that may read this thread beyond visibleToRoles.
The thread.
The request has no valid service auth.
The requesting user lacks the thread.create permission or may not post in the channel.
No community matches the given DID.
No channel matches the given space reference.
The anchor message does not exist in the given channel.
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 thread's space.
social.colibri.beta.thread.delete
Deletes a thread's space. Messages members wrote in it stay in their own repos and become unreadable to everyone but their authors, the same way deleting a channel works. Messages that were moved into the thread go with it.
The thread to delete.
The request has no valid service auth.
The requesting user lacks the thread.manage permission.
No thread 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 thread's space.
social.colibri.beta.thread.moveMessages
Moves messages into another thread or channel. A message lives in its author's own repo and cannot be rewritten by a moderator, so the move is a `moved` label written into the source space for each message. The destination serves each moved message at its own record key, so a selection keeps the order it was written in and reads among the destination's own messages by send time. The AppView withholds a moved message from the space it came from.
The space the messages are in now, either a channel or a thread.
The space to move them to, either a channel or a thread in the same community.
The messages to move, at most fifty in one call.
Human-readable reason, recorded on every label in the batch.
The batch key shared by every label this call wrote, which groups the move for auditing.
How many messages were moved.
The request has no valid service auth.
The requesting user lacks the thread.move permission, or may not read the source or post in the destination.
No space exists at the source or destination reference.
One of the subjects is not a message in the source space.
The destination is the source, belongs to another community, or a subject is not a message.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.thread.repoint
Moves a thread to another channel by rewriting the channel its record links to, and optionally repoints it at another message. Who may read the thread follows the new channel. Left without an anchor the thread keeps the one it has, so its marker sits wherever that message now lives.
The thread to move.
The text channel to move it to.
The message the thread should hang under, for a thread whose anchor was moved. It has to sit in the destination channel, and may be a message the AppView has not indexed yet. Absent keeps the anchor as it is.
The thread, after the move.
The request has no valid service auth.
The requesting user lacks the thread.manage permission and did not write both the thread's current anchor and the message it is being repointed at.
No thread matches the given space reference.
No channel matches the given space reference.
The destination channel belongs to another community, is not a text channel, or is the channel the thread is already in while no new anchor was given.
The AppView cannot act as the community because its stored credentials are missing or unusable.
social.colibri.beta.thread.update
Renames a thread or changes who may read it. An absent field leaves the current value unchanged.
The thread to update.
The thread's title. Absent leaves the current value unchanged.
Roles that may read this thread. Empty means everyone who may read the channel may read the thread.
Members that may read this thread beyond visibleToRoles.
The thread, after the update.
The request has no valid service auth.
The requesting user lacks the thread.manage permission, and is not the user who opened the thread renaming it.
No thread matches the given space reference.
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.
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.permissionBridge
Relay messages and reactions between Colibri communities and another chat service, in the channels community admins link.
- social.colibri.beta.bridge.createPairing
- social.colibri.beta.bridge.getConfiguration
- social.colibri.beta.bridge.putRemoteRooms
- social.colibri.beta.bridge.uploadBlob
- social.colibri.beta.bridge.postMessage
- social.colibri.beta.bridge.editMessage
- social.colibri.beta.bridge.deleteMessage
- social.colibri.beta.bridge.addReaction
- social.colibri.beta.bridge.removeReaction
- social.colibri.beta.bridge.createThread
- social.colibri.beta.bridge.updateThread
- social.colibri.beta.bridge.deleteThread
- social.colibri.beta.bridge.hideMessage
- social.colibri.beta.bridge.importMessages
- social.colibri.beta.bridge.reportBackfill
- social.colibri.beta.bridge.replaceAvatar
- social.colibri.beta.bridge.leave
- social.colibri.beta.channel.listMessages
- social.colibri.beta.channel.getChannel
- 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.thread.delete
- social.colibri.beta.thread.repoint
- social.colibri.beta.thread.moveMessages
- social.colibri.beta.bridge.getPairing
- social.colibri.beta.bridge.redeemPairing
- social.colibri.beta.bridge.listRegistrations
- social.colibri.beta.bridge.update
- social.colibri.beta.bridge.revoke
- social.colibri.beta.bridge.listRemoteRooms
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.message
- social.colibri.beta.reaction
- social.colibri.beta.thread.follow
- 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.thread.create
- social.colibri.beta.thread.update
- social.colibri.beta.thread.getThread
- social.colibri.beta.thread.listThreads
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.