app.askeverything
8
Narrow ›
-
app.askeverything.actor.analysis
record
An AI-generated analysis of this account's answers, written by the app on the user's explicit instruction. Analyses only exist when the user has enabled the feature and clicked generate; creating this record IS the act of publishing, and the generation UI must make clear that the result is public on the open network. Regeneration creates a new record; the app may delete superseded ones.
-
app.askeverything.actor.profile
record
App-specific profile data for Ask Everything. Identity, handle, display name, and avatar come from the account's Bluesky profile and are not duplicated here. Preferences that gate AppView behavior only (such as whether the profile accepts directed asks, or NSFW filtering) are AppView-side settings, not record fields, since they cannot be enforced at the protocol level.
-
app.askeverything.ama.question
record
A signed question directed at a specific account (ask-me-anything style). Not pooled. This is public speech by the asker, equivalent in visibility and accountability to a mention: it is publicly readable from the moment it is created, whether or not the recipient ever answers. There are no anonymous directed questions. The recipient is never obligated to answer; nothing appears in the recipient's repo unless they choose to respond, and AppViews should only route asks to recipients who have asks
-
app.askeverything.feed.answer
record
A person's answer to a question. The record is self-contained: it embeds a snapshot of the question text as it was when answered, so the answer remains intelligible even if the referenced question record is later deleted or unavailable. The question reference is validated by shape (a strongRef), not by target record type, so answers may respond to pool questions, directed asks, or compatible prompt records from other applications.
-
app.askeverything.feed.heart
record
A heart (like) on an answer.
-
app.askeverything.graph.follow
record
A follow within Ask Everything. Deliberately distinct from app.bsky.graph.follow: the Ask Everything circle and the Bluesky feed are different social contracts, and neither implies the other.
-
app.askeverything.pool.question
record
A canonical question in the communal pool. Lives in the application's commons repository, not in any individual user's repo, under an explicit stewardship contract: the text becomes a permanent, irrevocable contribution to the pool so that answers built on it keep making sense, while attribution is always revocable — the submitter may delete their submission receipt (or account) at any time, upon which the steward removes the 'submission' reference from this record, anonymizing it. The steward m
-
app.askeverything.pool.submission
record
An authorship receipt: this account contributed this question text to the communal pool. Lives in the submitter's own repo as their portable proof of contribution. Creating this record grants the pool an irrevocable license to the question text (including its embedding as a snapshot inside answer records). Deleting this record revokes attribution: the steward anonymizes the corresponding pool question, but the text remains in the pool so that other people's answers keep making sense.
app.atmobb
38
Narrow ›
-
app.atmobb.actor.getActivity
query
An actor's public atmobb participation on one forum and across the indexed atmosphere.
-
app.atmobb.actor.getGuestbook
query
The entries signed in one member's guestbook on one forum, newest first by index time. Nothing while the owner keeps it closed or is banned; entries indexed while it was closed, by signers banned or shut out by a closed gate, or within 24 hours of the same signer's previous entry never show. With includeHidden, entries hidden by staff or the owner, or from a signer the owner blocked, come back flagged instead of dropped.
-
app.atmobb.actor.getRegulars
query
The members an actor replies alongside most on one forum: at least two shared public threads in the last 180 days, most shared first. At most six; no counts.
-
app.atmobb.actor.guestbook
record
A guestbook entry: a short note signed on a member's profile page on one forum. Lives in the signer's own repo — signing is an act of the signer, taking it back is deleting this record. The profile owner decides what shows through their membership record.
-
app.atmobb.actor.profile
record
A user's atmoBB account defaults and per-forum overrides. Lives in the user's repo.
-
app.atmobb.authForum
permission-set
-
app.atmobb.authSysop
permission-set
-
app.atmobb.discussion.createReply
procedure
Create a reply record in the caller's repo (proxied to their PDS).
-
app.atmobb.discussion.createThread
procedure
Create a thread record in the caller's repo (proxied to their PDS).
-
app.atmobb.discussion.getBoardThreads
query
Threads in a board sorted by latest activity, with reply counts and author info.
-
app.atmobb.discussion.getLatestThreads
query
Most recently active threads. With a forum param, scoped to that forum's own boards plus the merged streams of its topic boards.
-
app.atmobb.discussion.getThreadPage
query
One page of a thread: the thread, total reply count, and a page of replies in chronological order, with author profiles and worn stamps hydrated. The thread carries its moderation flags for the viewing forum (hidden, locked, pinned).
-
app.atmobb.discussion.reply
record
A reply in a thread. Lives in the author's repo. Flat by default; parent enables quote-chain threading.
-
app.atmobb.discussion.thread
record
A discussion thread (topic). Lives in the author's repo, pointing at a board in a forum's repo.
-
app.atmobb.forum.accessRequest
record
A request to join a members-only (space-backed) board, or an application to join a gated forum. Lives in the requester's repo. Exactly one of board or forum is set. A forum sysop resolves a board request by granting space membership (approve) or recording a moderation.action denyAccess (deny), and a forum application with a moderation.action acceptMember, denyAccess, or holdApplication.
-
app.atmobb.forum.board
record
A board within a forum. Lives in the forum account's repo. Subforums reference their parent board.
-
app.atmobb.forum.category
record
A grouping header for boards on a forum's index. Lives in the forum account's repo; boards reference it via their category field.
-
app.atmobb.forum.getAccessRequests
query
Open access requests for a forum. With kind=board (the default): accessRequest records pointing at this forum's members-only boards, minus ones already denied, with requester profile and board name for display. With kind=forum: applications to join the forum itself, one per applicant, each carrying its current state (pending, waiting, or denied) from the newest decision.
-
app.atmobb.forum.getBoardIndex
query
Board index for a forum: boards with thread counts and latest activity.
-
app.atmobb.forum.getDirectory
query
Every forum the index has seen, in founding order. Powers the cross-forum directory and the atmosphere webring.
-
app.atmobb.forum.getMembers
query
Members of a forum ordered by arrival, with atmobb profiles and the stamps they wear.
-
app.atmobb.forum.getMembership
query
One account's membership standing with a gated forum: whether the forum has accepted them, since when, who sponsored them, and whom they have sponsored. Derived from the forum's public acceptMember and revokeMember actions.
-
app.atmobb.forum.getStaff
query
A forum's staff: its moderator records with subject profiles.
-
app.atmobb.forum.getStamps
query
A forum's stamps: the admin-defined stamp records plus the generated network set. With actor, also that member's tray (every stamp they hold on this forum), the ids they currently wear, in order, and the topics they pinned to their profile page.
-
app.atmobb.forum.getTopic
query
Everything currently sharing a topic: the boards, their forums, and their sizes. Lets an admin see what tagging a board would federate with before doing it.
-
app.atmobb.forum.getTopics
query
Every topic currently carried by any board in the atmosphere, with sizes. The discovery side of getTopic: what could a board join?
-
app.atmobb.forum.getWatchers
query
Members watching a board, minus anyone the forum has banned. Ordered by DID.
-
app.atmobb.forum.membership
record
Declares membership in a forum. Lives in the member's own repo, pointing at the forum's DID — joining is an act of the member, leaving is deleting this record.
-
app.atmobb.forum.moderator
record
Grants moderator or admin standing on a forum. Lives in the forum account's repo, signed by the forum.
-
app.atmobb.forum.profile
record
A forum's identity and configuration. Lives in the forum account's repo; the forum's DID is the forum's identity.
-
app.atmobb.forum.stamp
record
A stamp a forum awards for belonging: being somewhere or arriving at some time, never for how much someone has posted. Lives in the forum account's repo. Members choose which awarded stamps to wear via the wearing list on their membership record.
-
app.atmobb.forum.watch
record
Watches a board for new threads. Lives in the member's own repo, pointing at the board's URI — watching is an act of the member, unwatching is deleting this record.
-
app.atmobb.moderation.action
record
A moderation action taken by a forum. Lives in the forum account's repo, making moderation portable and auditable — any appview can honor it at read time.
-
app.atmobb.moderation.getLog
query
A forum's moderation actions, newest first. Powers the admin panel's undo affordances; the records are public either way.
-
app.atmobb.moderation.getStanding
query
One member's standing with a forum: the bans in force against them and the warnings they've received. Both are derived from the forum's public moderation actions.
-
app.atmobb.poll.vote
record
A vote in a thread's poll. Lives in the voter's repo. One record per selected option; deleting retracts the vote.
-
app.atmobb.richtext.block
defs
A code block.
-
app.atmobb.richtext.facet
object
Annotation of a sub-string within rich text.
app.bivri
78
Narrow ›
-
app.bivri.actor.defs
defs
Actor view type definitions. Tiered like app.bsky.actor.defs so embedded views stay cheap: basic is embedded in feed items, detailed is served by getProfile.
-
app.bivri.actor.getConsent
query
Read only the authenticated account's server-local age confirmation and accepted Policy Versions. Absence means not yet confirmed. Birth dates are never retained or returned.
-
app.bivri.actor.getPreferences
query
Read the authenticated account's own preferences. Scoped to the caller and to nobody else: there is no parameter naming whose preferences to read, because one account's preferences are never another account's business. An account that has never set a preference reads the defaults rather than an absence, so a client has nothing to guess.
-
app.bivri.actor.getProfile
query
Get a user profile by DID or handle.
-
app.bivri.actor.profile
record
A declaration of a Bivri member profile.
-
app.bivri.actor.putConsent
procedure
Confirm the authenticated account is at least fourteen on the server's Korean calendar date and accepts both currently Active Policy Versions. The birth date is used only in request memory, never persisted or returned.
-
app.bivri.actor.putPreferences
procedure
Replace the authenticated account's own preferences. Every group sent is replaced whole and every group omitted is left as it was, so a client that knows about one group cannot silently reset another it has never heard of. Sending the same preferences twice is the same as sending them once. Preferences are the account's alone: nothing here names another account, and nothing here is served to one.
-
app.bivri.actor.updateProfile
procedure
Update the authenticated user's profile. Requires OAuth session.
-
app.bivri.bookmark.createGroup
procedure
Create a named bookmark group in the authenticated member's repository.
-
app.bivri.bookmark.createItem
procedure
Place an artwork in one of the authenticated member's bookmark groups.
-
app.bivri.bookmark.deleteGroup
procedure
Delete a bookmark group the authenticated member owns. Deleting a record that is already gone succeeds, so a retried request is safe.
-
app.bivri.bookmark.deleteItem
procedure
Remove an artwork from a bookmark group by deleting the authenticated member's bookmark item record. Deleting a record that is already gone succeeds, so a retried request is safe.
-
app.bivri.bookmark.group
record
A named group a member sorts bookmarked artworks into.
-
app.bivri.bookmark.item
record
A bookmark placing one artwork into one of the member's bookmark groups.
-
app.bivri.bookmark.listGroupItems
query
List items in a bookmark group.
-
app.bivri.bookmark.listGroups
query
List bookmark groups. Requires authentication.
-
app.bivri.bookmark.updateGroup
procedure
Rename a bookmark group the authenticated member owns.
-
app.bivri.feed.artwork
record
Record containing a Bivri artwork: one or more images published together under a single title.
-
app.bivri.feed.artworkV2
record
Artwork record supporting JPEG, PNG, GIF and WebP originals. Earlier app.bivri.feed.artwork records retain their original schema and identity.
-
app.bivri.feed.comment
record
Record containing a comment on an artwork.
-
app.bivri.feed.createArtwork
procedure
Publish a new artwork to the authenticated member's repository. Requires an OAuth session; the record is written to the member's own PDS.
-
app.bivri.feed.createArtworkV2
procedure
Publish a new artwork to the authenticated member's repository. Requires an OAuth session; the record is written to the member's own PDS.
-
app.bivri.feed.createComment
procedure
Post a comment from the authenticated member's repository.
-
app.bivri.feed.createDraft
procedure
Create creator-only private Draft metadata for a direct upload by the authenticated member. Requires authentication. Commission and Quest workflows derive their client Party from the awarded relationship instead of accepting a caller-selected DID. Draft bytes are uploaded through a separate authorized path and never enter a PDS while unpublished.
-
app.bivri.feed.createLike
procedure
Like a record from the authenticated member's repository.
-
app.bivri.feed.crossPost
procedure
Cross-post an artwork to Bluesky. Requires authentication.
-
app.bivri.feed.defs
defs
Feed view type definitions
-
app.bivri.feed.deleteArtwork
procedure
Delete an artwork the authenticated member owns from their repository. Deleting a record that is already gone succeeds, so a retried request is safe.
-
app.bivri.feed.deleteComment
procedure
Delete a comment the authenticated member owns. Deleting a record that is already gone succeeds, so a retried request is safe.
-
app.bivri.feed.deleteDraft
procedure
Delete a private Draft owned by the authenticated creator. Non-Parties receive DraftNotFound so the Draft's existence is not disclosed.
-
app.bivri.feed.deleteLike
procedure
Remove a like by deleting the authenticated member's like record. Deleting a record that is already gone succeeds, so a retried request is safe.
-
app.bivri.feed.getActorArtworks
query
Get artworks by a specific actor.
-
app.bivri.feed.getActorLikes
query
Get artworks liked by a specific actor.
-
app.bivri.feed.getArtwork
query
Get artwork details by AT-URI.
-
app.bivri.feed.getArtworkComments
query
Get comments for an artwork.
-
app.bivri.feed.getArtworkLikes
query
Get likes for an artwork.
-
app.bivri.feed.getDiscoveryArtworks
query
Get the public discovery feed. Authentication is not required: a guest sees public artworks and an authenticated member also sees logged_in ones. Unlisted artworks are returned to nobody.
-
app.bivri.feed.getDraft
query
Get private metadata for one Draft when the authenticated member is a Party. A missing Draft and a Draft outside the caller's Parties both return DraftNotFound so existence is not disclosed. Draft bytes use a separate authorized path.
-
app.bivri.feed.getInitialFeed
query
Get the authenticated Member's initial Artwork feed selected by their durable interest Tags. An empty interest set or no currently servable match returns an empty feed rather than silently substituting public discovery results.
-
app.bivri.feed.getRelatedTags
query
Get tags that frequently appear together with a given tag, ranked by co-occurrence count.
-
app.bivri.feed.getTagArtworks
query
Get artworks carrying a tag, paginated by cursor.
-
app.bivri.feed.getTimeline
query
Get timeline of artworks from followed actors. Requires authentication.
-
app.bivri.feed.like
record
Record declaring a like by the author.
-
app.bivri.feed.listDrafts
query
List private Draft metadata for which the authenticated member is a Party. Requires authentication and never returns Draft bytes.
-
app.bivri.feed.publishDraft
procedure
Irreversibly publish a Draft owned by the authenticated creator as a public app.bivri.feed.artwork record. Non-Parties receive DraftNotFound so existence is not disclosed.
-
app.bivri.feed.updateArtwork
procedure
Edit an artwork the authenticated member owns. Only the fields present in the request change; the rest of the record is preserved as it stands at the member's PDS.
-
app.bivri.feed.updateArtworkV2
procedure
Edit an artwork the authenticated member owns. Only the fields present in the request change; the rest of the record is preserved as it stands at the member's PDS.
-
app.bivri.feed.updateComment
procedure
Edit the text of a comment the authenticated member owns. The artwork and reply parent remain unchanged.
-
app.bivri.graph.createFollow
procedure
Follow another account from the authenticated member's repository.
-
app.bivri.graph.deleteFollow
procedure
Stop following an account by deleting the authenticated member's follow record. Deleting a record that is already gone succeeds, so a retried request is safe.
28 more under app.bivri ›
app.bluvy
8
Narrow ›
-
app.bluvy.tube.authFull
permission-set
-
app.bluvy.tube.channel
record
How a creator presents their Bluvy Tube channel, on top of their Bluesky profile (name, avatar and bio stay in app.bsky.actor.profile): a longer about text, a banner, links, and the videos to feature. One per account, written to the creator's own repo. See App\Creator\ChannelProfileService in the Bluvy Tube source for the writer.
-
app.bluvy.tube.clip
record
A short excerpt of a video, cut by the account that owns this record: Bluvy Tube gives it its own page and embed, which play only that part of the video. The video itself is not copied.
-
app.bluvy.tube.favorite
record
A Bluvy Tube-specific favorite of a video post, written to the favoriting user's own repo. Distinct from any AT Protocol-native bookmark — this is a Bluvy-only concept, source of truth for Bluvy Tube's own 'favorites' feature (not a like or repost). See App\Controller\Account\FavoriteController in the Bluvy Tube source for the writer.
-
app.bluvy.tube.playlist
record
A Bluvy Tube playlist — a named, ordered collection of videos, written to the owning user's own repo. Membership is tracked separately by app.bluvy.tube.playlist.item records referencing this record via strongRef, the same 'list + separate items' shape as app.bsky.graph.list/listitem. See App\Controller\Account\PlaylistController in the Bluvy Tube source for the writer.
-
app.bluvy.tube.playlist.item
record
One video's membership in a app.bluvy.tube.playlist, written to the playlist owner's own repo as a separate record (not embedded in the playlist record itself) — same shape as app.bsky.graph.listitem referencing an app.bsky.graph.list. See App\Controller\Account\PlaylistController in the Bluvy Tube source for the writer.
-
app.bluvy.tube.preferences
record
Bluvy Tube-specific per-app appearance preferences for one account, written to that account's own repo at rkey `self`. Not required or validated by the PDS or any other AT Protocol app — Bluvy Tube reads this back itself at login to server-render the correct theme and remove the theme flash-of-unstyled-content. Each Bluvy app keeps its own independent record in its own namespace; this one is Bluvy Tube's. See App\Service\AppearanceService in the Bluvy Tube source for the writer.
-
app.bluvy.tube.video.metadata
record
Bluvy Tube-specific metadata for a published video, written to the creator's own repo alongside the app.bsky.feed.post record that actually carries the video (via app.bsky.embed.video). Not required or validated by the PDS or any other AT Protocol app — Bluvy Tube reads this back itself to render an owner-editable title/description/language overlay on top of the plain post text. Written by App\Service\VideoPublicationProcessor (native uploads) and rewritten by App\Service\PdsMetadataSyncService
app.bsky
131
Narrow ›
-
app.bsky.actor.contentVisibilityDeclaration
record
A declaration of an account's preferences for appearing in content discovery surfaces.
-
app.bsky.actor.defs
defs
If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.
-
app.bsky.actor.getPreferences
query
Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth.
-
app.bsky.actor.getProfile
query
Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.
-
app.bsky.actor.getProfiles
query
Get detailed profile views of multiple actors.
-
app.bsky.actor.getSuggestions
query
Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding.
-
app.bsky.actor.link
record
A link shown on the account's profile. The profile record's links field sets which links are shown, and in what order.
-
app.bsky.actor.profile
record
A declaration of a Bluesky account profile.
-
app.bsky.actor.putPreferences
procedure
Set the private preferences attached to the account.
-
app.bsky.actor.searchActors
query
Find actors (profiles) matching search criteria. Does not require auth.
-
app.bsky.actor.searchActorsTypeahead
query
Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry. Does not require auth.
-
app.bsky.actor.status
record
A declaration of a Bluesky account status.
-
app.bsky.ageassurance.begin
procedure
Initiate Age Assurance for an account.
-
app.bsky.ageassurance.defs
defs
The access level granted based on Age Assurance data we've processed.
-
app.bsky.ageassurance.getConfig
query
Returns Age Assurance configuration for use on the client.
-
app.bsky.ageassurance.getState
query
Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side.
-
app.bsky.authCreatePosts
permission-set
-
app.bsky.authDeleteContent
permission-set
-
app.bsky.authFullApp
permission-set
-
app.bsky.authManageFeedDeclarations
permission-set
-
app.bsky.authManageLabelerService
permission-set
-
app.bsky.authManageModeration
permission-set
-
app.bsky.authManageNotifications
permission-set
-
app.bsky.authManageProfile
permission-set
-
app.bsky.authViewAll
permission-set
-
app.bsky.bookmark.createBookmark
procedure
Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.
-
app.bsky.bookmark.defs
defs
Object used to store bookmark data in stash.
-
app.bsky.bookmark.deleteBookmark
procedure
Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication.
-
app.bsky.bookmark.getBookmarks
query
Gets views of records bookmarked by the authenticated user. Requires authentication.
-
app.bsky.contact.defs
defs
Associates a profile with the positional index of the contact import input in the call to `app.bsky.contact.importContacts`, so clients can know which phone caused a particular match.
-
app.bsky.contact.dismissMatch
procedure
Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication.
-
app.bsky.contact.getMatches
query
Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication.
-
app.bsky.contact.getSyncStatus
query
Gets the user's current contact import status. Requires authentication.
-
app.bsky.contact.importContacts
procedure
Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication.
-
app.bsky.contact.removeData
procedure
Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication.
-
app.bsky.contact.sendNotification
procedure
System endpoint to send notifications related to contact imports. Requires role authentication.
-
app.bsky.contact.startPhoneVerification
procedure
Starts a phone verification flow. The phone passed will receive a code via SMS that should be passed to `app.bsky.contact.verifyPhone`. Requires authentication.
-
app.bsky.contact.verifyPhone
procedure
Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication.
-
app.bsky.draft.createDraft
procedure
Inserts a draft using private storage (stash). An upper limit of drafts might be enforced. Requires authentication.
-
app.bsky.draft.defs
defs
A draft containing an array of draft posts.
-
app.bsky.draft.deleteDraft
procedure
Deletes a draft by ID. Requires authentication.
-
app.bsky.draft.getDrafts
query
Gets views of user drafts. Requires authentication.
-
app.bsky.draft.updateDraft
procedure
Updates a draft using private storage (stash). If the draft ID points to a non-existing ID, the update will be silently ignored. This is done because updates don't enforce draft limit, so it accepts all writes, but will ignore invalid ones. Requires authentication.
-
app.bsky.embed.defs
defs
width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.
-
app.bsky.embed.external
object
A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).
-
app.bsky.embed.gallery
object
An assortment of media embedded in a Bluesky record (eg, a post).
-
app.bsky.embed.getEmbedExternalView
query
Resolve one AT-URI record into the data needed to render an enhanced external embed. The records are validated against the requested `url` before any view is built. When validation passes, returns `data`, `associatedRefs` (strongRefs to embed into a post's external.associatedRefs) and the raw `associatedRecords`, plus a legacy `view` for Standard.site records only. When validation fails, only `unverifiedAssociatedRefs` and `unverifiedAssociatedRecords` are returned and no view or data is built.
-
app.bsky.embed.images
object
A set of images embedded in a Bluesky record (eg, a post).
-
app.bsky.embed.record
object
A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.
-
app.bsky.embed.recordWithMedia
object
A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.
81 more under app.bsky ›
app.bulleted
14
Narrow ›
-
app.bulleted.admin.deny
procedure
Add a value to the appview's denylist and, by default, remove what it has already indexed. Requires the administrative credential. Adding to the list stops future indexing; nuking removes what is already there, which is why nuke defaults to true.
-
app.bulleted.admin.listDenied
query
Page through the appview's denylist, newest first. Requires the administrative credential. You cannot operate a list you cannot read: without this, the only way to audit a takedown is to open the database.
-
app.bulleted.admin.undeny
procedure
Remove a value from the appview's denylist and rebuild the membership filter. Requires the administrative credential. A denylist with no removal path means one mistyped DID is permanent. Undeny does NOT restore rows a nuke removed; the restoration field says what brings the content back, if anything does.
-
app.bulleted.appAccess
permission-set
-
app.bulleted.authFull
permission-set
-
app.bulleted.comment
record
A comment on a node, owned by its author.
-
app.bulleted.commentPolicy
record
Who may comment on a bullet and on the bullets beneath it. Record key 'self' is the repository's default; any other key names the node at 'root', and applies to that node and its descendants. The absence of any policy means nobody may comment, so silence is the closed state.
-
app.bulleted.getOutline
query
The public outline for an identity, optionally zoomed to one bullet. Answers from this appview's index of public records; it does not read the identity's PDS. No authentication, because everything here is already public.
-
app.bulleted.mirror
record
A live reference rendering another node's subtree in place.
-
app.bulleted.node
record
A single bullet in an outline. Parentage is expressed only by a child pointing up at its parent; there is no children array.
-
app.bulleted.note
record
Supplemental text for a node. Shares the node's record key and repository, so the note for at://{did}/app.bulleted.node/{rkey} lives at at://{did}/app.bulleted.note/{rkey}.
-
app.bulleted.outline
record
Titles and describes an outline, and names who may contribute to it. Record key 'self' means the identity's whole forest; any other key names the subtree at 'root'. The key is 'any' rather than 'tid' because 'self' is not a TID.
-
app.bulleted.space
space
An outline shared with a named set of people. Every bullet is still a record in its author's own permissioned repo for this space; the space is the authorization and sync boundary they share, not a place records are moved to. Identified by the proposal-0016 triple of space authority DID, this NSID as the space type, and a space key.
-
app.bulleted.spaceAccess
permission-set
app.certified
15
Narrow ›
-
app.certified.actor.organization
record
Extended metadata for an organization actor. Complements the base actor profile (app.certified.actor.profile), which holds the display name, description, website, avatar, and banner, with organization-specific fields such as legal name, full logo, public contact email, legal structure, reference links, and locations.
-
app.certified.actor.profile
record
A declaration of a Certified account profile.
-
app.certified.authWrite
permission-set
-
app.certified.badge.award
record
Records a badge award to a user, project, or activity claim.
-
app.certified.badge.definition
record
Defines a badge that can be awarded via badge award records to users, projects, or activity claims.
-
app.certified.badge.response
record
Recipient response to a badge award.
-
app.certified.defs
defs
Common type definitions used across certified protocols.
-
app.certified.feed.like
record
Record declaring a 'like' of a piece of subject content. Social feedback only: a like carries no protocol meaning about the subject (it is not an evaluation, endorsement, or acknowledgement). Schema-compatible with app.bsky.feed.like.
-
app.certified.feed.repost
record
Record representing a 'repost' of an existing record, surfacing it to the reposter's followers. The subject is pinned by CID, so the repost refers to the version the reposter saw, not to later edits. Schema-compatible with app.bsky.feed.repost.
-
app.certified.graph.entityFollow
record
Record declaring a social 'follow' relationship with a non-account entity, such as a specific record. Account (DID) follows are out of scope and belong to app.certified.graph.follow. The subject is an open union so additional non-DID entity kinds can be added in the future.
-
app.certified.graph.follow
record
Record declaring a social 'follow' relationship of another account.
-
app.certified.link.evm
record
A verifiable link between an ATProto DID and an EVM wallet address, proven via a cryptographic signature. Currently supports EOA wallets via EIP-712 typed data signatures; the proof field is an open union to allow future signature methods.
-
app.certified.location
record
A location reference
-
app.certified.signature.defs
defs
Common type definitions for cryptographic signatures attached to records, per the ATProtocol Attestation Specification. Each signature's `$type` says what it attests.
-
app.certified.signature.proof
record
A remote attestation proof record holding the CID of attested content. Lives in the attestor's repository and is referenced from the attested record's `signatures` array via `com.atproto.repo.strongRef`. Conforms to the ATProtocol Attestation Specification.
app.cosmosis
8
Narrow ›
-
app.cosmosis.cluster
record
A personally curated group of accounts. Clusters have no fixed size cap: membership is stored as separate `app.cosmosis.clusterMember` records rather than inline, so a Cluster can hold thousands of members. Clusters are always permissioned: each Cluster lives inside its own dedicated Space of type `app.cosmosis.clusterSpace`. Note that the Space's own member list governs *access* to the Cluster and is distinct from the clusterMember records, which are the Cluster's *contents*.
-
app.cosmosis.clusterMember
record
A single account's membership in a Cluster. Lives inside the same Space as its parent `app.cosmosis.cluster` record. Delete this record to remove the account from the Cluster. The record key SHOULD be the subject's DID when that DID is a valid record key (true for all did:plc and most did:web identifiers), which makes writes idempotent and lets clients remove a member without a lookup; otherwise use a tid.
-
app.cosmosis.clusterSpace
space
Space type for a single Cosmosis Cluster. Each Cluster gets its own Space of this type, holding exactly one app.cosmosis.cluster record plus that Cluster's app.cosmosis.clusterMember records. The Space skey and the Cluster record's rkey share the same tid. Granting an app access to one Space of this type exposes only that one Cluster.
-
app.cosmosis.galaxy
record
A user's Galaxy: the outer boundary of who they know they would feel comfortable interacting with online. Each account has at most one Galaxy (record key `self`). Membership is stored as separate `app.cosmosis.galaxyMember` records so a Galaxy can hold thousands of accounts. Galaxies are always permissioned: the Galaxy lives in a dedicated Space of type `app.cosmosis.galaxySpace`. The Space `skey` is a tid minted at creation (HappyView skeys are unique per Space type across an entire instance, s
-
app.cosmosis.galaxyMember
record
A single account inside the owner's Galaxy. Lives inside the Galaxy's Space; the parent Galaxy is implied, since each account has exactly one Galaxy and each Galaxy Space holds exactly one Galaxy record. Delete this record to remove the account from the Galaxy. The record key SHOULD be the subject's DID when that DID is a valid record key (true for all did:plc and most did:web identifiers); otherwise use a tid. There must be at most one galaxyMember per subject, and readers must still de-duplica
-
app.cosmosis.galaxySpace
space
Space type for a user's Cosmosis Galaxy: the outer boundary of who they would feel comfortable interacting with online. Each user has one Space of this type, holding the app.cosmosis.galaxy record (rkey self) and the Galaxy's app.cosmosis.galaxyMember records. The skey is a tid, because HappyView requires skeys to be unique per Space type across the whole instance.
-
app.cosmosis.supercluster
record
A derived grouping of accounts defined as a set expression (union / intersection / difference) over Clusters and/or other Superclusters. No members are stored directly; membership is evaluated at query time by resolving the expression tree. Superclusters are always permissioned: each lives inside its own dedicated Space of type `app.cosmosis.superclusterSpace`, with the Space `skey` and record `rkey` sharing the same tid. (Every leaf of an expression is ultimately a Cluster, and Clusters are alw
-
app.cosmosis.superclusterSpace
space
Space type for a single Cosmosis Supercluster. Each Supercluster gets its own Space of this type, holding exactly one app.cosmosis.supercluster record. The Space skey and the record's rkey share the same tid. Resolving the Supercluster also requires access to the Spaces of every Cluster and Supercluster it references.
app.didpic
130
Narrow ›
-
app.didpic.actor.defs
defs
Record of the user confirming they're 18 or over. Required before flipping any adult-content label (nsfw, etc.) from 'hide' to 'blur' or 'show'. Once present, persists indefinitely — set at first opt-in, cleared only by account deletion (server-side cascade) or the dev-reset path. `method` distinguishes OS-verified (Apple Declared Age Range / Play age-signals confidently returned >=18) from self-attested (user tapped Agree in an in-app modal). Self-attested is the practical floor most apps land
-
app.didpic.actor.exists
query
Lightweight existence check: returns 200 if the actor is a known, active didpic user (same activity filter as the admin Users page). Designed for the image CDN's known-DID gate where the heavier getProfilePublic was too slow.
-
app.didpic.actor.getPrefs
query
The authenticated viewer's preferences.
-
app.didpic.actor.getProfile
query
Get a profile by DID or handle.
-
app.didpic.actor.getProfilePublic
query
Unauthenticated profile view for public web landings. Omits viewer-relative fields.
-
app.didpic.actor.getProfiles
query
Batch fetch profiles by DID or handle. Up to 25 per call.
-
app.didpic.actor.getProfilesBasic
query
Batch fetch minimal profile info by DID, for actors already known to the AppView. Does not resolve unseen DIDs. Up to 100 per call.
-
app.didpic.actor.getSuggestedContacts
query
The viewer's closest contacts, for starting a new conversation.
-
app.didpic.actor.getSuggestions
query
Suggested accounts for the viewer to follow.
-
app.didpic.actor.profile
record
User profile record.
-
app.didpic.actor.putPref
procedure
Write one of the authenticated viewer's preferences.
-
app.didpic.actor.searchActors
query
Search accounts by handle or display name.
-
app.didpic.admin.applyAccountLabel
procedure
Add a label to an account.
-
app.didpic.admin.applyPostLabel
procedure
Add a label to a post.
-
app.didpic.admin.clearClientError
procedure
Delete a client error row.
-
app.didpic.admin.deleteActor
procedure
Delete an account's data.
-
app.didpic.admin.deletePushToken
procedure
Delete a push token globally.
-
app.didpic.admin.getActor
query
Get an actor's moderation state, profile, roles, and labels.
-
app.didpic.admin.getAnalyticsOverview
query
Aggregate analytics for the last 30 days.
-
app.didpic.admin.getAppeal
query
Get a single appeal.
-
app.didpic.admin.getClientError
query
Get one client error by id.
-
app.didpic.admin.getPost
query
Get a post or comment's moderation state and labels.
-
app.didpic.admin.getPostEditHistory
query
Get a post's current version plus every snapshot of prior versions.
-
app.didpic.admin.getPushToken
query
Get a push token's detail and bound actors.
-
app.didpic.admin.getReport
query
Get a single report.
-
app.didpic.admin.getScansForActor
query
Get an actor's scan history.
-
app.didpic.admin.getScansForSubject
query
Get scans for a record.
-
app.didpic.admin.getSubjectContext
query
Get the actor + post + comment + message bundle for a report/appeal subject.
-
app.didpic.admin.grantRole
procedure
Grant a role.
-
app.didpic.admin.growthStats
query
Content growth snapshot.
-
app.didpic.admin.listAppeals
query
List appeals.
-
app.didpic.admin.listAuditLog
query
List audit log entries.
-
app.didpic.admin.listClientErrors
query
List unique client errors, newest first.
-
app.didpic.admin.listPushTokensByActor
query
List push tokens registered to an actor.
-
app.didpic.admin.listReports
query
List moderation reports.
-
app.didpic.admin.listResyncFailures
query
List actors with a failed resync job.
-
app.didpic.admin.listRoles
query
List role grants.
-
app.didpic.admin.listScans
query
List moderation scans.
-
app.didpic.admin.listSuppressedTags
query
List suppressed tags.
-
app.didpic.admin.listUsers
query
List indexed actors, newest first.
-
app.didpic.admin.queueCounts
query
Counts of open moderation items.
-
app.didpic.admin.removeAccountLabel
procedure
Remove a label from an account.
-
app.didpic.admin.removePostLabel
procedure
Remove a label from a post.
-
app.didpic.admin.reopenAppeal
procedure
Re-open a resolved appeal.
-
app.didpic.admin.reopenReport
procedure
Re-open a resolved report.
-
app.didpic.admin.rescanSubject
procedure
Re-scan an image.
-
app.didpic.admin.resolveAppeal
procedure
Resolve an appeal.
-
app.didpic.admin.resolveReport
procedure
Resolve a report.
-
app.didpic.admin.restoreActor
procedure
Restore an account to active.
-
app.didpic.admin.resyncActor
procedure
Enqueue or reset a resync job for an actor.
80 more under app.didpic ›
app.gainforest
36
Narrow ›
-
app.gainforest.ac.audio
record
Generic audio resource record aligned with the TDWG Audiovisual Core standard (http://www.tdwg.org/standards/638). Represents a single audio recording (field recording, soundscape, species call) with its technical metadata. Links to a dwc.occurrence as evidence and optionally to an ac.deployment describing the recording device setup. Does not carry location, weather, habitat, or device fields — those belong on dwc.event, dwc.occurrence, or ac.deployment respectively.
-
app.gainforest.ac.deployment
record
Bioacoustics recorder deployment record. Describes a passive acoustic monitoring (PAM) device — such as an AudioMoth, Song Meter, or Swift — placed at a fixed location for a period of time. One deployment produces many audio recordings; each ac.audio record references its deployment via deploymentRef. Captures the device configuration, placement details, and duty cycle that are constant across all recordings from that deployment.
-
app.gainforest.ac.multimedia
record
Audubon Core multimedia resource record. Represents a single media item (image, audio, video, spectrogram) associated with a biodiversity occurrence. Based on the TDWG Audiovisual Core standard (http://www.tdwg.org/standards/638). Each media item is a separate record linked to a dwc.occurrence via occurrenceRef.
-
app.gainforest.asset.file
record
Generic durable asset record for uploaded blobs. Example use: anchoring uploads during draft editing so blobs persist until final records reference them.
-
app.gainforest.common.defs
defs
Shared type definitions for biodiversity and environmental data collection
-
app.gainforest.dwc.dataset
record
A named dataset grouping a batch of Darwin Core occurrence records uploaded together. Created during the tree upload wizard so users can manage and reference their uploads as cohesive units.
-
app.gainforest.dwc.defs
defs
Shared type definitions for Darwin Core aligned biodiversity records
-
app.gainforest.dwc.event
record
A sampling event record aligned with Darwin Core Event class. Enables star-schema pattern where multiple occurrences reference a shared event context (location, protocol, effort).
-
app.gainforest.dwc.measurement
record
Measurement or fact records aligned with the Darwin Core MeasurementOrFact class. Links to an occurrence via occurrenceRef. Supports three paths: floraMeasurement (typed fields for sessile organisms like trees, plants, corals), faunaMeasurement (typed fields for mobile organisms like mammals, birds, reptiles, fish), and genericMeasurement (flexible key-value array for anything else). All three paths bundle multiple measurements into a single record per occurrence, reducing PDS storage compared t
-
app.gainforest.dwc.occurrence
record
A single biodiversity occurrence record aligned with Simple Darwin Core (TDWG Standard 450, version 2023-09-13). Represents one organism or group of organisms at a particular place and time.
-
app.gainforest.evaluator.defs
defs
Shared type definitions for decentralized evaluator services. Evaluators attach structured, typed evaluation data to records (a more sophisticated evolution of the labeler pattern).
-
app.gainforest.evaluator.evaluation
record
An evaluation record published by an evaluator in their own repo. Contains structured, typed results about a target record (or batch of records). Discovered by AppViews via the atproto-accept-evaluators HTTP header pattern.
-
app.gainforest.evaluator.service
record
Declaration record published at rkey 'self' to register an account as an evaluator service. Analogous to app.bsky.labeler.service for labelers.
-
app.gainforest.evaluator.subscription
record
A subscription record published by a user in their own repo to request evaluations from a specific evaluator service. The evaluator detects subscriptions via Jetstream and processes matching records. Deleting this record unsubscribes.
-
app.gainforest.feed.like
record
Record declaring a 'like' of a piece of subject content. A faithful port of app.bsky.feed.like into the app.gainforest.feed namespace. `subject` is a com.atproto.repo.strongRef (uri + cid), so a like can target any record in the GainForest commons — an observation, project, cert, organization, donation, post, or comment — and the GainForest appview decides which subject types to aggregate. Unlike = delete this record.
-
app.gainforest.feed.post
record
Record containing a GainForest feed post. A faithful port of app.bsky.feed.post into the app.gainforest.feed namespace. A reply (i.e. a 'comment') is a post that carries a `reply` ref; because that ref uses com.atproto.repo.strongRef, the GainForest appview can honour replies whose parent/root is ANY record in the commons (an observation, project, cert, organization, or donation), not only another post. Deprecated `entities`/`textSlice` fields from the Bluesky source were omitted in favour of `f
-
app.gainforest.feed.repost
record
Record representing a 'repost' (reshare) of existing subject content. A faithful port of app.bsky.feed.repost into the app.gainforest.feed namespace. `subject` is a com.atproto.repo.strongRef (uri + cid), so a reshare can target any record in the GainForest commons — an observation, project, cert, organization, donation, post, or comment — and the GainForest appview decides which subject types to aggregate and resurface in timelines. Undo reshare = delete this record.
-
app.gainforest.funding.config
record
A record that represents the funding / donations configuration for a given bumicert. It shares the same rkey as the claim.activity (bumicert) record.
-
app.gainforest.gbif.dataset
record
Tracks a dataset registered with GBIF via the Registry API. Links a PDS organization to its GBIF dataset UUID, installation, and archive blob.
-
app.gainforest.labelReview
record
not from the namespace authority
A steward's verdict on an observation's species label, stored in the GainForest moderation account. Confirmations are an append-only event stream: the newest event per observation wins, so any steward can reverse another's decision without deleting history. A confirmation names the exact label it reviewed; it goes stale automatically when the observation's label changes afterwards.
-
app.gainforest.link.evm
record
A verifiable link between an ATProto DID and an EVM wallet address, with platform attestation. The user proves wallet ownership via EIP-712 signature, and the platform co-signs to attest the linking occurred through a trusted service.
-
app.gainforest.organization.defaultSite
record
A declaration of the default site for an organization
-
app.gainforest.organization.donation
record
A record of a donation or financial transaction for financial transparency
-
app.gainforest.organization.getIndexedOrganizations
query
Get all organizations to view initially on map
-
app.gainforest.organization.info
record
A declaration of an organization or project
-
app.gainforest.organization.layer
record
A declaration of a layer for an organization
-
app.gainforest.organization.member
record
A community or team member of an organization
-
app.gainforest.organization.observations.dendogram
record
A declaration of a dendogram observation for an organization
-
app.gainforest.organization.observations.fauna
record
DEPRECATED: Use app.gainforest.dwc.occurrence instead. A declaration of a fauna observation for an organization.
-
app.gainforest.organization.observations.flora
record
DEPRECATED: Use app.gainforest.dwc.occurrence instead. A declaration of a flora observation for an organization.
-
app.gainforest.organization.observations.measuredTreesCluster
record
A declaration of a measured trees cluster for an organization
-
app.gainforest.organization.predictions.fauna
record
DEPRECATED: Use app.gainforest.dwc.occurrence with basisOfRecord='MachineObservation' instead. A declaration of a fauna prediction for an organization.
-
app.gainforest.organization.predictions.flora
record
DEPRECATED: Use app.gainforest.dwc.occurrence with basisOfRecord='MachineObservation' instead. A declaration of a flora prediction for an organization.
-
app.gainforest.wallet.pendingSend
record
A transfer from the account's donation wallet (app.gainforest.wallet.primary) that still needs more passkey approvals. Multi-approval wallets (threshold > 1) collect approvals asynchronously: the initiator stores the exact unsigned ERC-4337 UserOperation here together with their own approval, remaining passkey holders approve from their own devices, and the final approver signs the full userOp hash which submits the operation on-chain and deletes this record. Every stored approval is a WebAuthn
-
app.gainforest.wallet.primary
record
An account's canonical donation wallet (personal profile or organization): a Splits SmartVault (ERC-4337 passkey multisig) whose address is derived deterministically with CREATE2 from the account DID and the founding signer set. Because owner, signers, threshold, and the salt scheme are all recorded here, anyone can recompute SmartVaultFactory.getAddress(...) and verify that `address` really belongs to this account — the derivation is the proof; no signature is needed. Fixed rkey `self`: one can
-
app.gainforest.wallet.splitsVault
record
LEGACY — superseded by app.gainforest.wallet.primary; existing records are still read and are migrated to the primary collection on their next write. An organization's shared donation wallet: a Splits SmartVault (ERC-4337 passkey multisig) whose address is derived deterministically with CREATE2 from the organization DID and the founding signer set. Because owner, signers, threshold, and the salt scheme are all recorded here, anyone can recompute SmartVaultFactory.getAddress(...) and verify that
app.golfthesky
2
Narrow ›
-
app.golfthesky.course
record
A hole built in the Golf the Sky designer, living in the repo of whoever built it. The geometry is a list of parts from the game's parts library (blocks, slopes, hills, free shapes, rings, ponds, greens — some of them moving) with a tee and a cup, carried as encoded JSON because the coordinates are fractional. Anyone can play it from a link; the record is where it lives.
-
app.golfthesky.round
record
One Golf the Sky round, published by the player into their own repo. The record stores every shot rather than a score: the game's ball physics are deterministic, so re-simulating the shots reproduces the round exactly. Owning the record is the identity proof, and replaying it is the score proof — strokes and ticks in this record are advisory and never trusted by a leaderboard.
app.kalangitan
11
Narrow ›
-
app.kalangitan.actor.profile
record
not from the namespace authority
A persona: one of possibly several profiles on a single account. Every post, note, and story belongs to exactly one persona. Location visibility, precision, and gating defaults are set per-persona (see app.kalangitan.location.visibility). A public persona's records live in the account's public repo. A gated persona's records, including this profile record itself, live inside that persona's atproto Space, with a public stub record (app.kalangitan.actor.stub) in the public repo for discovery.
-
app.kalangitan.actor.stub
record
not from the namespace authority
Minimal public record for a gated persona, living in the owner's public repo. A Space's address (authority/type/skey) cannot be stumbled onto by browsing a public repo, so each gated persona needs a stub that says only: this persona exists, here is how to request access. Name, bio, avatar, and all content stay inside the Space and are invisible to non-members. Required whenever an actor.profile exists with gated=true; must not exist for public personas.
-
app.kalangitan.feed.note
record
not from the namespace authority
A short, lightweight status note. Location is optional. Belongs to exactly one persona via profileUri. For a gated persona this record lives inside the persona's Space; Spaces provide access control, not confidentiality.
-
app.kalangitan.feed.post
record
not from the namespace authority
A standard post. Location is a required part of every record in this app, not an optional tag. Belongs to exactly one persona via profileUri; the persona's location.visibility defaults govern how the location is stored and shared. For a gated persona this record lives inside the persona's Space. Spaces provide access control, not confidentiality. The space host and PDS operator can technically read this data.
-
app.kalangitan.feed.story
record
not from the namespace authority
An ephemeral story: visible until expiresAt, then hidden and eligible for deletion. Location is required. Belongs to exactly one persona via profileUri. For a gated persona this record lives inside the persona's Space; Spaces provide access control, not confidentiality.
-
app.kalangitan.graph.accessGrant
record
not from the namespace authority
Owner-authored acceptance of a follow-as-access-request on a gated persona. Written by the owner of the persona named in the referenced follow record. Effective access state = follow record exists AND matching grant record exists. NOTE: writing this record alone is not sufficient at the protocol level. The owner must also add the follower's DID to the Space's member list via the space host. Both actions are required; the AppView treats the grant as the app-layer signal and the member list as the
-
app.kalangitan.graph.follow
record
not from the namespace authority
Follow of a persona, identified by its profile record's AT-URI. This is both a follow and (for gated personas) an access request, one record type, not two. Lives in the follower's own public repo; only the follower can write or delete it. For a public persona, the follow record alone grants read access to the persona's content. For a gated persona, the AppView treats this record as a pending access request; effective access requires a matching app.kalangitan.graph.accessGrant written by the pers
-
app.kalangitan.location.live
record
not from the namespace authority
Live location: a single continuously-overwritten record, NOT a growing collection. Belongs to a persona via profileUri; near-real-time updates are feasible because Spaces support direct PDS-to-PDS sync without a relay, so this record never bloats the repo. Only written when the owning persona's location.visibility mode is 'live'. CONVENTION: this record's repo key (rkey) MUST match the rkey of the app.kalangitan.actor.profile record named in profileUri, so the two records pair up deterministical
-
app.kalangitan.location.snapshot
record
not from the namespace authority
A discrete "here's where I was" location record. A snapshot, like any other post. Contrast with app.kalangitan.location.live, which is a single continuously-overwritten record. Belongs to a persona via profileUri; the persona's location.visibility defaults govern whether snapshots are recorded at all and at what precision.
-
app.kalangitan.location.visibility
record
not from the namespace authority
Per-persona location defaults: whether location is shared at all (mode) and at what granularity (precision). These defaults keep posting low-friction. Location behavior is configured once per persona, not per post. CONVENTION: this record's repo key (rkey) MUST match the rkey of the app.kalangitan.actor.profile record named in profileUri, so the two records pair up deterministically.
-
app.kalangitan.persona
space
Space type declaration (proposal 0016 'Space type declarations') for a gated kalangitan persona. One gated persona is one Space: space read access is all-or-nothing at the space boundary (0016 'Read access'), and access is granted per persona, so gated personas cannot share a Space. The skey is the persona profile record's rkey (the same pairing convention location.live and location.visibility use). The Space is anchored on the persona owner's DID and managed with com.atproto.simplespace: readPo
app.lovesky
15
Narrow ›
-
app.lovesky.actor.defs
defs
not from the namespace authority
A public card photo. Blobs are world-readable and may be cached by any relay or mirror; users should be told this before upload.
-
app.lovesky.actor.getPreferences
query
not from the namespace authority
The caller's private matching preferences, or NotFound if none are set. Requires an authenticated Lovesky session.
-
app.lovesky.actor.profile
record
not from the namespace authority
The public Lovesky dating card. Creating this record is the act of opting in; deleting it is the act of opting out. It is replicated to every relay and readable by anyone, so it must never contain sexual orientation, gender sought, birthdate, precise location, or anything the user would not put on a public web page. Those live in the AppView's private preferences (app.lovesky.actor.putPreferences).
-
app.lovesky.actor.putPreferences
procedure
not from the namespace authority
Store the caller's private matching preferences in the Lovesky AppView. Requires an authenticated Lovesky session. Nothing in this payload is ever written to the user's repo.
-
app.lovesky.chat.defs
defs
not from the namespace authority
One message in a match's conversation. Conversations exist only between matched accounts and only inside the Lovesky AppView.
-
app.lovesky.chat.getMessages
query
not from the namespace authority
Messages in one of the caller's conversations, newest first.
-
app.lovesky.chat.sendMessage
procedure
not from the namespace authority
Send a message in one of the caller's conversations. Requires an authenticated Lovesky session.
-
app.lovesky.chat.updateRead
procedure
not from the namespace authority
Mark every message in a conversation as read by the caller.
-
app.lovesky.discover.getCandidates
query
not from the namespace authority
Ranked cards for the caller to browse. Filtered by both sides' private preferences, blocks in either direction, prior likes and passes, and moderation labels. Requires an authenticated Lovesky session and a published card.
-
app.lovesky.match.createLike
procedure
not from the namespace authority
Like or pass on a card. Stored privately in the AppView. If the subject has already liked the caller, a match and a conversation are created atomically. The response never reveals a one-sided like from the other party.
-
app.lovesky.match.deleteMatch
procedure
not from the namespace authority
Unmatch. Deletes the match and its conversation for both sides and records a pass so the subject does not reappear in discovery.
-
app.lovesky.match.getMatches
query
not from the namespace authority
The caller's mutual matches, newest first.
-
app.lovesky.moderation.createBlock
procedure
not from the namespace authority
Block an account within Lovesky: ends any match, hides them from discovery and chat in both directions. Independent of Bluesky blocks, which are honored automatically.
-
app.lovesky.moderation.createReport
procedure
not from the namespace authority
Report an account to Lovesky's moderators. Reports are private; the subject is never told who reported them.
-
app.lovesky.moderation.deleteBlock
procedure
not from the namespace authority
Remove a Lovesky block.
app.matakite
6
Narrow ›
-
app.matakite.audit
record
An append-only attestation that a policy-selected auditor observed an app.matakite.* record create, update, or delete, or intentionally voided an unrepresentable event. The auditor repository establishes observation chronology for clients that trust its DID; source-record createdAt and Jetstream time_us remain provenance rather than trusted time.
-
app.matakite.dispute
record
A public counter-attestation against a resolution. With no bonds available (no money), the deterrent is reputational: disputes are signed records attached to the disputer's DID, so frivolous disputes cost the disputer. Disputes feed resolver track records ('N resolutions, M disputed, K upheld') that appviews surface when applying trust policies.
-
app.matakite.flag
record
A public report that another app.matakite.* record violates community norms — spam, unresolvable criteria, private-individual target, harassment, duplicate, etc. Flags are signed records in the flagger's own PDS: public, timestamped, and attached to the flagger's DID. Frivolous flagging feeds the flagger's own quality record; the design mirrors app.matakite.dispute — the deterrent is reputational, not economic. Flags are inputs to appview indexing, display policy, and labelers; they are not cens
-
app.matakite.forecast
record
A forecast on a binary, multi, numeric, or date question. Revisions are new records with the same subject uri; the full trail is retained and used for time-weighted scoring. Appviews select the payload matching the cid-pinned question type and reject records with conflicting typed payloads.
-
app.matakite.question
record
A resolvable forecasting question. Immutability contract: editing this record after forecasts exist changes its CID; forecasts reference the question by strongRef (uri+cid), so appviews detect and flag post-forecast edits.
-
app.matakite.resolution
record
An outcome determination for a question. Resolution is data, not authority: any DID can write one, and appviews choose which resolvers to trust and display (default: the question's designated resolver). Outcome semantics follow Metaculus: 'ambiguous' = reality could not be determined under the criteria; 'annulled' = the question itself was defective (underspecified, assumptions violated). Both are excluded from forecaster Brier scoring; 'annulled' counts against the question author's quality rec
app.rocksky
83
Narrow ›
-
app.rocksky.actor.defs
defs
-
app.rocksky.actor.getActorAlbums
query
Get albums for an actor
-
app.rocksky.actor.getActorArtists
query
Get artists for an actor
-
app.rocksky.actor.getActorCompatibility
query
Get compatibility for an actor
-
app.rocksky.actor.getActorLovedSongs
query
Get loved songs for an actor
-
app.rocksky.actor.getActorNeighbours
query
Get neighbours for an actor
-
app.rocksky.actor.getActorScrobbles
query
Get scrobbles for an actor
-
app.rocksky.actor.getActorSongs
query
Get songs for an actor
-
app.rocksky.actor.getProfile
query
Get the profile of an actor
-
app.rocksky.actor.status
record
The current listening status of the actor. Only one can be active at a time (rkey: self).
-
app.rocksky.album
record
A declaration of an album.
-
app.rocksky.album.defs
defs
-
app.rocksky.album.getAlbum
query
Get detailed album view
-
app.rocksky.album.getAlbumTracks
query
Get tracks for an album
-
app.rocksky.album.getAlbums
query
Get albums
-
app.rocksky.artist
record
A declaration of an artist.
-
app.rocksky.artist.defs
defs
-
app.rocksky.artist.getArtist
query
Get artist details
-
app.rocksky.artist.getArtistAlbums
query
Get artist's albums
-
app.rocksky.artist.getArtistRecentListeners
query
Get artist recent listeners ordered by most recent scrobble
-
app.rocksky.artist.getArtistTracks
query
Get artist's tracks
-
app.rocksky.artist.getArtists
query
Get artists
-
app.rocksky.charts.defs
defs
-
app.rocksky.charts.getScrobblesChart
query
Get the scrobbles chart
-
app.rocksky.charts.getTopArtists
query
Get top artists
-
app.rocksky.charts.getTopTracks
query
Get top tracks
-
app.rocksky.equalizer
record
A saved equalizer preset. The rkey is the preset name slugified: lower case, dashes, no spaces (e.g. "Bass Boost" -> "bass-boost").
-
app.rocksky.equalizer.defs
defs
-
app.rocksky.equalizer.deletePreset
procedure
Delete one of the authenticated user's equalizer presets.
-
app.rocksky.equalizer.listPresets
query
List equalizer presets. If `did` is provided the request is public; otherwise an auth token is required and the caller's own presets are returned.
-
app.rocksky.equalizer.putPreset
procedure
Create or update one of the authenticated user's equalizer presets. The record key is derived from the name (lower case, dashes, no spaces), so saving with an existing name overwrites that preset.
-
app.rocksky.event.defs
defs
An artist on an event lineup, linked to the Rocksky artist when one was resolved.
-
app.rocksky.event.getEvent
query
Get a music event by the AT-URI of either its calendar event record or its app.rocksky.event.music record.
-
app.rocksky.event.getEventRsvps
query
List who responded to an event, most recent first.
-
app.rocksky.event.getEvents
query
List indexed music events, soonest first. Without a time window only unexpired events are returned: those ending (or, with no end, starting) today or later, plus undated ones.
-
app.rocksky.event.music
record
Marks a community.lexicon.calendar.event as a music event (concert, festival, club night...) and links it to the artists performing. The calendar event carries the name, dates and venue; this record carries what is specific to music. Rocksky only indexes calendar events that have one of these attached.
-
app.rocksky.event.putRsvp
procedure
Set the authenticated user's RSVP on an event. Reuses their existing RSVP record.
-
app.rocksky.feed.defs
defs
-
app.rocksky.feed.generator
record
Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.
-
app.rocksky.feed.getFeed
query
Get the feed by uri
-
app.rocksky.feed.getFeedGenerator
query
Get information about a feed generator
-
app.rocksky.feed.getFeedGenerators
query
Get all feed generators
-
app.rocksky.feed.getFeedSkeleton
query
Get the feed by uri
-
app.rocksky.feed.getStories
query
Get all currently playing tracks by users
-
app.rocksky.feed.search
query
Search for content in the feed
-
app.rocksky.graph.follow
record
Record declaring a social 'follow' relationship of another account.
-
app.rocksky.like
record
A declaration of a like.
-
app.rocksky.mirror.getMirrorSources
query
Get the authenticated user's scrobble mirror sources (Last.fm, ListenBrainz, Teal.fm).
-
app.rocksky.mirror.putMirrorSource
procedure
Upsert a mirror source for the authenticated user. Toggling `enabled` notifies the mirror process over NATS so it can start/stop the per-user task without a restart.
-
app.rocksky.player.defs
defs
33 more under app.rocksky ›
app.standard-reader
71
Narrow ›
-
app.standard-reader.authBasicFeatures
permission-set
-
app.standard-reader.authCollections
permission-set
-
app.standard-reader.bookmark
record
Marks a site.standard.document as saved for later by the reader. Presence of the record means saved; deleting it removes the article from the save queue.
-
app.standard-reader.bookmarkDocument
procedure
Save an article for later.
-
app.standard-reader.collection
record
Curated magazine collection manifest for a site.standard.document. Uses the same record key as the document it extends so both records can be fetched with one predictable pair of GETs.
-
app.standard-reader.collectionsPublication
record
Marks a site.standard.publication as a Standard Reader collections series. Uses the same record key as the publication it marks.
-
app.standard-reader.createList
procedure
Create a new publication list.
-
app.standard-reader.defs
defs
An article as shown in feed rows and search results (metadata only).
-
app.standard-reader.deleteList
procedure
Delete a publication list.
-
app.standard-reader.followPublication
procedure
Subscribe to a site.standard.publication.
-
app.standard-reader.followUser
procedure
Follow another user by DID.
-
app.standard-reader.getAuthor
query
Author profile for a DID with aggregate stats and a first page of their publications.
-
app.standard-reader.getAuthorPosts
query
Every article a DID has a byline on — their own posts plus documents they are credited on in other publications (featured in) — newest first, with cursor pagination.
-
app.standard-reader.getAuthorPublications
query
Publications owned by a DID with cursor pagination.
-
app.standard-reader.getBookmarkStatus
query
Whether the subject reader bookmarked a document.
-
app.standard-reader.getDocument
query
Fetch a single article: card metadata, aggregate stats, and the renderable body (content) ready for the renderers.
-
app.standard-reader.getDocumentContext
query
Deferred reading-view context: related articles, recents, social proof, citations.
-
app.standard-reader.getFollowStatus
query
Whether the subject reader subscribes to a publication.
-
app.standard-reader.getFollowedByPeopleYouFollow
query
Publications followed by Bluesky accounts the caller follows.
-
app.standard-reader.getHomeFeed
query
Signed-in home page critical path: featured lead and latest rows.
-
app.standard-reader.getLabeler
query
Resolve a single labeler by DID or handle (for previewing before subscribing), with the calling reader's subscription state. Discovered the standard way via the DID document's #atproto_labeler service.
-
app.standard-reader.getLabelers
query
List the labelers the calling reader is subscribed to, each resolved (the standard way) to a labeler view. Used by the Settings → Labelers page.
-
app.standard-reader.getLabels
query
Fetch labels for a set of subject AT-URIs from the calling reader's subscribed labelers. Returns nothing for labelers the reader is not subscribed to.
-
app.standard-reader.getLatestFeed
query
Chronological feed of indexed articles with optional filter.
-
app.standard-reader.getLikes
query
Subject reader liked articles.
-
app.standard-reader.getList
query
Public metadata and member publications for an app.standard-reader.list AT-URI.
-
app.standard-reader.getListFeed
query
Chronological article feed across all publications in a list.
-
app.standard-reader.getPublication
query
Fetch a single publication profile with owner identity and aggregate stats.
-
app.standard-reader.getPublicationDocuments
query
Chronological article feed for a single publication with cursor pagination.
-
app.standard-reader.getPublicationSubscribers
query
Readers subscribed to a publication, most recently subscribed first, with cursor pagination.
-
app.standard-reader.getPublications
query
Browse the publication directory with topic filter, sort, and cursor pagination.
-
app.standard-reader.getReadStatus
query
Whether the subject reader has read a document.
-
app.standard-reader.getReadingHistory
query
Subject reader reading history.
-
app.standard-reader.getRecommendStatus
query
Whether the subject reader liked a document.
-
app.standard-reader.getRecommendedPublications
query
Personalized publication recommendations for the authenticated user.
-
app.standard-reader.getSaved
query
Subject reader save queue with hydrated document rows.
-
app.standard-reader.getTagFeed
query
Articles or publications carrying a given tag.
-
app.standard-reader.getTrendingDocuments
query
Ranked list of trending articles across the network.
-
app.standard-reader.getTrendingPublications
query
Ranked list of trending discover-eligible publications.
-
app.standard-reader.getUserFollowStatus
query
Whether the subject reader follows a user.
-
app.standard-reader.getUserLists
query
Every publication list authored by a DID, each with its member publications resolved.
-
app.standard-reader.getUserSubscriptions
query
Publications a DID subscribes to, most recently subscribed first, with cursor pagination.
-
app.standard-reader.graph.follow
record
Follows another user (a DID, not a publication). Presence of the record means followed; deleting it unfollows. The rkey is derived from the subject DID so each followed user maps to a single record. A followed user's recommends and documents enrich the reader's home feed.
-
app.standard-reader.graph.mute
record
Mutes a subject for this reader: either a user (a DID) or a publication (the AT-URI of its site.standard.publication record). Presence of the record means muted; deleting it unmutes. The rkey is derived from the subject so each subject maps to a single record. Muted subjects are hidden from the reader's feeds and discovery surfaces, but direct navigation still works and subscriptions are untouched.
-
app.standard-reader.labeler.defs
defs
-
app.standard-reader.labeler.service
record
Registers a Standard Reader labeler. This record is the single source of truth for a labeler: its identity, where to reach its label server, how it presents, and its label-value definitions. Indexed off the network like any other record (the owner of the record is the labeler's author); the label server itself only answers com.atproto.label.queryLabels / subscribeLabels.
-
app.standard-reader.labeler.subscription
record
Subscribes the reader to a labeler service (like adding a Bluesky moderation service). Presence of the record means subscribed; deleting it unsubscribes. The rkey is derived from the labeler DID so each labeler maps to a single record. Successor to app.standard-reader.labelerSubscription, nested under the labeler NSID group.
-
app.standard-reader.labelerSubscription
record
Subscribes the reader to a labeler service (like adding a Bluesky moderation service). Presence of the record means subscribed; deleting it unsubscribes. The rkey is derived from the labeler DID so each labeler maps to a single record.
-
app.standard-reader.list
record
A named, ordered, shareable list of publications (like a Bluesky user list, but for site.standard.publication subscriptions). Lists are one level deep; a publication may appear in multiple lists.
-
app.standard-reader.listSave
record
Saves another reader's app.standard-reader.list into this reader's app (like adding a Bluesky list). Presence of the record means saved; deleting it removes the list again.
21 more under app.standard-reader ›
app.tempomusic
49
Narrow ›
-
app.tempomusic.actor.defs
defs
The viewer's analytics consent preferences. Private appview data — never written to the public PDS repo. Business fields only: the last-write-wins clock travels as a sibling `updatedAtMicros` field on the get/put envelopes, never inside this document.
-
app.tempomusic.actor.deleteAccount
procedure
Schedule the requesting viewer's account for deletion. Soft-deletes the profile and cascades soft-delete on every post, reply and like owned by the viewer in a single transaction. The viewer can log back in within 30 days and call restoreAccount to undo. After 30 days the account is hard-deleted irreversibly and the content is anonymised. See ADR-009 for the full retention lifecycle.
-
app.tempomusic.actor.getAnalyticsConsent
query
Fetch the requesting viewer's analytics consent preferences. The viewer DID is read from the service-auth JWT (`iss` claim). `preferences` and `updatedAtMicros` are absent together when the viewer has never stored preferences — the client then hydrates its early-access defaults.
-
app.tempomusic.actor.getDeletionState
query
Return the requesting viewer's account-deletion state so the client's bootstrap gate can decide between showing the app, the dated restoration screen, or the terminal 'window passed' variant (TEM-492). The viewer DID is read from the service-auth JWT (`iss` claim) — no explicit parameter, matching the appview's `getAnalyticsConsent` convention. When the profile row has been hard-deleted at day 30 the endpoint returns `deleted: false` (indistinguishable from an account that was never deleted — in
-
app.tempomusic.actor.profile
record
Customizable profile attributes for a Tempo actor. Stored as a singleton per repository under the literal record key 'self'.
-
app.tempomusic.actor.putAnalyticsConsent
procedure
Store the requesting viewer's analytics consent preferences with last-write-wins semantics on the sibling updatedAtMicros clock (client wall-clock microseconds): the server keeps the document with the highest value and always returns the winning document with its clock, which the client must adopt as its new local state. The viewer DID is read from the service-auth JWT (`iss` claim).
-
app.tempomusic.actor.restoreAccount
procedure
Restore the requesting viewer's previously soft-deleted account. Clears deleted_at on the profile and unconditionally on every post, reply and like owned by the viewer (including content the viewer soft-deleted individually before the account cascade). Moderation-held content stays in moderation hold. Only valid within the 30-day restoration window opened by deleteAccount; outside the window the profile has been hard-deleted and the cascade content is anonymised, so restoration is impossible. Se
-
app.tempomusic.actor.searchActorsTypeahead
query
Accounts whose display name or handle starts with `q`, case-insensitively, for the mention picker. At most `limit` results, ordered: exact handle match first, then display-name prefix matches, then handle prefix matches, each group by display name then DID. Filtered for the viewer: accounts in a block relation with the viewer in either direction, sanctioned accounts (suspended or banned), soft-deleted or moderation-held profiles and the viewer's own account are never returned. The viewer DID is
-
app.tempomusic.embed.defs
defs
Width/height ratio of an image or video. Used by clients to reserve layout space before media loads and to choose appropriate display dimensions.
-
app.tempomusic.embed.external
object
Embedded external link with preview metadata (Open Graph-style title, description, and thumbnail).
-
app.tempomusic.embed.images
object
Image embed. Currently limited to one image per post; maxLength may be increased in future versions without breaking existing records.
-
app.tempomusic.embed.video
object
Video embed. One video per post.
-
app.tempomusic.feed.defs
defs
An album, EP, single, or any long-form release.
-
app.tempomusic.feed.getPost
query
Fetch a single Tempo post by its AT-URI.
-
app.tempomusic.feed.getPostReplies
query
Paginated flat list of replies whose root is the given post URI, in chronological order. When the request carries a service-auth JWT, the viewer DID is read from its `iss` claim and each returned reply carries a viewer projection; anonymous requests receive replies without viewer state.
-
app.tempomusic.feed.getTimeline
query
Paginated chronological feed of timeline items. Each item is discriminated by `$type` (today only `app.tempomusic.feed.post`; future variants such as `app.tempomusic.feed.review` plug in additively). When the request carries a service-auth JWT, the viewer DID is read from its `iss` claim and each returned item carries a viewer projection; anonymous requests receive items without viewer state.
-
app.tempomusic.feed.like
record
A like record. Subject is a strongRef to either an app.tempomusic.feed.post or an app.tempomusic.feed.reply. strongRef is collection-agnostic by design — these constraints live in AppView validation, not in the lexicon schema.
-
app.tempomusic.feed.post
record
A music-related post sharing what the user is experiencing.
-
app.tempomusic.feed.reply
record
A text reply attached to a Tempo post. Reply records form threads via the reply ref; the music subject lives on the root post, not on the reply itself.
-
app.tempomusic.gateway.createSession
procedure
Exchange a PDS-minted service auth token for a gateway session. The service auth JWT travels in the Authorization header (aud = the gateway DID, lxm = this NSID) and is single-use. Browser callers (Origin header present) receive the session as an HttpOnly cookie and no sessionToken is returned.
-
app.tempomusic.graph.block
record
Record declaring a 'block' relationship against another account, mirroring app.bsky.graph.block. NOTE: like every repo record, blocks are public — the AppView indexes them to enforce visibility (viewer-relative feed filtering, global reply suppression between blocked pairs, notification suppression). Deleting the record lifts the block; the v1 mobile client exposes no unblock UI but the AppView projects deletes from day one.
-
app.tempomusic.moderation.createReport
procedure
Submit a user-initiated report on a post, reply, or actor account. The reporter DID is read from the authenticated principal. Reports are dedupe-forever on (reporter, subject): a duplicate submission returns the existing report id with `deduped: true` and no new row is inserted. Per-reporter rate limit applies (5/hour, 50/day). Reports are server-side records only — they are NEVER published as PDS records, never broadcast on the firehose, and are only readable by moderators via the admin surface
-
app.tempomusic.moderation.defs
defs
Report subject identifying an actor account.
-
app.tempomusic.moderation.listModerationNotices
query
List the authenticated user's own moderation notices (takedown, suspension, ban), newest first. Prepared for future client consumption; delivery channels (push/email) are out of scope. The subject is always the caller — there is no parameter to read another user's notices.
-
app.tempomusic.notification.defs
defs
A single notification surfaced to the recipient. Server-projected from indexed like, reply and post records; recipients are scoped server-side from the viewer parameter.
-
app.tempomusic.notification.getUnreadCount
query
Count of unread notifications for the requesting viewer. The viewer DID is read from the service-auth JWT (`iss` claim) — no `?viewer=` query parameter.
-
app.tempomusic.notification.listNotifications
query
Paginated notifications addressed to the requesting viewer, newest first. The viewer DID is read from the service-auth JWT (`iss` claim) — no `?viewer=` query parameter.
-
app.tempomusic.notification.updateSeen
procedure
Mark the requesting viewer's notifications as seen up to seenAt. Server clamps the stored value to max(stored, received) so the marker is monotonic. The viewer DID is read from the service-auth JWT (`iss` claim) — no `?viewer=` query parameter.
-
app.tempomusic.richtext.facet
object
Annotation of a sub-string within text. Features describe the meaning of the annotated range: mention, link, tag, or inline music reference.
-
app.tempomusic.staff.banAccount
procedure
Permanently ban an account: all of its content disappears from the public read surface and no surface can lift the state. Escalating an active suspension replaces it. Requires the `superAdmin` role. Writes an `accountBanned` audit row. Federation caveat: the ban blocks this DID — re-registration under a fresh DID is structurally possible in AT Protocol.
-
app.tempomusic.staff.createInviteCode
procedure
Generate a batch of single-use PDS invite codes (TEM-502). Requires the caller to have the `superAdmin` role. Each call requests `quantity` codes from the PDS (`com.atproto.server.createInviteCode` with `useCount=1`), writes one `inviteCodeCreated` audit row per successfully-created code (payload = SHA-256 hash of the suffix + `use_count`, never the plain code), and returns the suffix-only codes. When the PDS returns a transient failure mid-batch the handler stops iterating and returns the succe
-
app.tempomusic.staff.defs
defs
AppView projection of a moderation_audit row. The audit log is append-only and never purged; entries survive hard-deletion of the actor account.
-
app.tempomusic.staff.disableInviteCodes
procedure
Disable one or more PDS invite codes (TEM-502). Requires the caller to have the `superAdmin` role. Codes are provided as suffix-only strings; the handler re-prepends the env prefix stored under `APPVIEW_PDS_INVITE_CODE_PREFIX` before calling `com.atproto.admin.disableInviteCodes`. On success, writes one `inviteCodeDisabled` audit row per code (payload = SHA-256 hash of the suffix, never the plain code).
-
app.tempomusic.staff.dismissReport
procedure
Close a report without acting on the subject. Valid from `open` (fast-path obvious junk) and from `underReview`. Writes a single `reportDismissed` audit row. Fast-path dismissal directly from `open` does NOT emit a `reportTriaged` audit row first — only the dismissal entry is written.
-
app.tempomusic.staff.getAccountModeration
query
Current account-level moderation state of a DID (suspension or ban), or an empty object when the account is unrestricted. A lapsed suspension is reported with its (past) `until` — interpretation is the caller's. Requires the `moderator` role.
-
app.tempomusic.staff.getReport
query
Fetch a single report by id, including its subject snapshot as captured at intake. Requires the caller to be an active moderator.
-
app.tempomusic.staff.getSubjectContent
query
Moderator-grade fetch of a report subject's stored record and lifecycle state, INCLUDING rows the public read surface hides: taken-down content, soft-deleted rows inside the 30-day evidence window, and tombstoned rows (record is then null — 'purged' — and the console shows a banner instead of content). ADR-009 future-work item 'expose retained content through the moderation surface'. Requires the caller to be an active moderator. When media attachments ship, CSAM-quarantined blobs are NEVER rend
-
app.tempomusic.staff.getSubjectModerationHistory
query
Audit timeline for a single subject (post URI, reply URI, or account DID). Returns every moderation_audit row referencing the subject, in reverse-chronological order. Used by the moderator UI to answer 'what has ever happened to this content/account'. Requires the caller to be an active moderator.
-
app.tempomusic.staff.grantStaffRole
procedure
Add a DID to the moderators allowlist with the given role. Requires the caller to have the `superAdmin` role. Writes a `moderatorGranted` audit row only when a new row is inserted or a revoked row is reactivated. Idempotent: granting a DID that already holds the same active role returns 200 with `granted: false` and no audit row.
-
app.tempomusic.staff.listAuditEvents
query
Global audit journal browser for the moderation console. Returns moderation_audit rows in reverse-chronological (created_at, id) keyset order, optionally filtered by acting moderator, action type, or subject DID. Complements getSubjectModerationHistory (per-subject view) with the 'what has the team been doing' view. Requires the caller to be an active moderator.
-
app.tempomusic.staff.listInviteCodes
query
List PDS invite codes on-demand via the PDS (`com.atproto.admin.getInviteCodes`). No local mirror — the source of truth is the PDS. Requires the caller to have the `superAdmin` role. Codes are returned as suffix-only strings (the env prefix stored under `APPVIEW_PDS_INVITE_CODE_PREFIX` has been stripped). Optional `createdBy` filter narrows the listing to codes emitted by a specific staff DID (applied server-side by the AppView — the admin endpoint has no such parameter); when omitted every code
-
app.tempomusic.staff.listReports
query
Cursored listing of moderation reports for the queue view. Filterable by status, subject type, reason, reporter, and subject author. Sorted by (created_at DESC, id DESC). Requires the caller to be an active moderator (any role).
-
app.tempomusic.staff.listStaff
query
List currently-active moderators. Audit transparency: any moderator may see who else holds privileges. Set `includeRevoked: true` to include historical (revoked) rows. Sorted by (granted_at DESC, did). Requires the caller to be an active moderator (any role).
-
app.tempomusic.staff.restoreSubject
procedure
Flip `moderation_status` back to 0 on a previously taken-down subject row. Writes a `subjectRestore` audit row. Trivially symmetric with takedownSubject — both act on the subject row only; lifting an account-wide sanction is unsuspendAccount's job (bans are permanent). Requires the caller to be an active moderator.
-
app.tempomusic.staff.revokeStaffRole
procedure
Mark a moderator row as revoked. The DID can no longer pass the moderator gate (latency = the moderator-cache TTL, default 30s). Requires the caller to have the `superAdmin` role. A super-admin cannot revoke themselves. Writes a `moderatorRevoked` audit row only when an active row was actually revoked. Idempotent: revoking a DID that is not currently an active moderator returns 200 with `revoked: false` and no audit row.
-
app.tempomusic.staff.suspendAccount
procedure
Suspend an account: all of its content disappears from the public read surface (feeds, single fetches, threads, notifications) while the row is active. Reversible via unsuspendAccount; optionally time-boxed via `until` (evaluated at read time — a lapsed suspension readmits content with no further action). Re-suspending replaces the current suspension (new reason/expiry, new audit row). Requires the `moderator` role. Writes an `accountSuspended` audit row.
-
app.tempomusic.staff.takedownSubject
procedure
Flip `moderation_status` on a subject row to a non-zero takedown class. Read paths immediately refuse to serve the subject (404 on getPost / getReply / actor reads). Re-takedown against an already-taken-down subject is permitted as a severity escalation (e.g. `reported` → `legalHold`) or to amend the reason; each call writes a new audit row. Scoped to the subject row ONLY: an account takedown flips the profile row (offensive avatar/bio case) and does not touch the account's content — hiding ever
-
app.tempomusic.staff.triageReport
procedure
Claim a report for review. Transitions status `open` → `underReview` atomically; if the report has already been claimed by another moderator, returns `AlreadyTriaged`. Writes a `reportTriaged` audit row. Requires the caller to be an active moderator.
-
app.tempomusic.staff.unsuspendAccount
procedure
Lift an account suspension: deletes the current state row (history stays in the audit log) and instantly readmits the account's content on the public surface. Also accepts a LAPSED suspension (removes the stale row). Cannot lift a ban. Requires the `moderator` role. Writes an `accountUnsuspended` audit row.
app.zeens
58
Narrow ›
-
app.zeens.authFull
permission-set
-
app.zeens.c2pa
record
Content Credentials (C2PA) read from a post's original photos at upload, for the photos the creator chose to show them on. The rkey matches the rkey of the associated post record, as with app.zeens.postMeta. This is a summary of what the C2PA manifest said, not the manifest itself: the manifest can carry an uncropped ingredient thumbnail and the photographer's GPS, so it is deliberately not republished. The summary is the creator's statement, signed by their repo; `status` records what the valid
-
app.zeens.chatPrefs
record
A user's chat privacy preference: who may start a conversation with them. This is a public policy flag (not message content), so storing it in a public repo is fine. One record per user (rkey 'self'). The server-side gate and the AppView indexer both enforce it. Carries the app.zeens.v marker.
-
app.zeens.collection
record
A user-curated collection (folder) of Zeens posts and articles. Visibility controls whether anyone other than the owner can see it via the AppView. The cover is the owner's chosen `coverPhoto` when set, otherwise the most recently added item, resolved at render time.
-
app.zeens.collectionItem
record
A single item (post or article) inside a Zeens collection. The collection itself is referenced by its AT-URI. Removing an item is a record delete. Re-adding the same subject creates a new item record (clients should de-dupe by subject.uri at write time if needed).
-
app.zeens.collectionRejection
record
Written by a community collection's owner when a submitted photo does not qualify for it: either declined in review or removed after approval. Carries no reason; the collection's own rules are the reason. Resets the photographer's auto-approve standing.
-
app.zeens.event
record
An event: a photowalk, workshop, meetup, exhibition or talk. Written to the organiser's own PDS. Others RSVP via app.zeens.rsvp (ATProto handle) or via an email address tracked off-protocol in PocketBase. The app does NOT collect payment: paid events carry free-text paymentInstructions and any URL/link in that field is rejected at write time. Carries the app.zeens.v marker so firehose + Lua filters recognise it. NOTE: the record id stays 'app.zeens.event' and the app.zeens.* namespace is network
-
app.zeens.eventComment
record
A comment (question / feedback / discussion) on an app.zeens.event, written to the commenter's own PDS. Bluesky replies require an app.bsky.feed.post parent, and an event isn't one, so events use this dedicated record (same rationale as app.zeens.post). A `parent` strongRef threads replies, letting the organiser respond in-line. Counted into the event's reply_count. Carries the app.zeens.v marker.
-
app.zeens.eventPhoto
record
Tags one of the author's photo posts to an app.zeens.event, written to the author's own PDS. Only permitted when the author has an app.zeens.rsvp with status 'going' to that event AND the event has already ended; both gates are enforced client- and server-side at write time. Structurally a clone of app.zeens.collectionItem. Removing a tag is a record delete. Carries the app.zeens.v marker.
-
app.zeens.featuredItem
record
An admin-curated featured item, written to the dedicated curator repo (feeder.psky.social). Currently always a post; `kind` future-proofs featured collections. `active=false` pulls the item from the splash carousel but keeps it for the Inspire > Featured archive. Reorder = putRecord with a new `position`; unfeature = putRecord with active=false; hard-remove = deleteRecord.
-
app.zeens.getActiveAuthors
query
Returns the distinct DIDs that have posted Zeens content (have an app.zeens.postMeta record) since an optional `since` timestamp. Powers the 'posted recently' half of the admin Active Users tab in one bulk query instead of a per-user getAuthorFeed.
-
app.zeens.getChatGate
query
Return whether a sender may start/continue a conversation with a recipient, based on the recipient's chatPrefs and the follow relationship. Used by the server-side start gate.
-
app.zeens.getChatUnreadCount
query
Return the total number of unread chat messages for a viewer across all accepted conversations (for the nav badge).
-
app.zeens.getCollection
query
Fetch a single collection record + a recent-items preview for the cover. Returns 404 if visibility=private and viewer != owner.
-
app.zeens.getCollectionContributors
query
Everyone whose photos appear in a collection, most recent first, with their photo count.
-
app.zeens.getCollectionItems
query
List items inside a collection. Returns 404 if the collection is private and viewer != owner. Items are returned newest-first by addedAt.
-
app.zeens.getCollections
query
List collections owned by an actor. Private collections are only returned when viewer == actor.
-
app.zeens.getCollectionsContaining
query
For a viewer, list which of their own collections (private + public) currently contain a given subject URI. Each match includes the parent collection's name, rkey, and visibility. Used by the 'Add to collection' modal to show which boxes are already checked, and by the post-detail page to render a 'part of collection' pill (public collections only).
-
app.zeens.getCollectionsFeed
query
Browse all public collections across users, ordered by most recent item activity (newest item indexed_at). Only collections with at least 3 items are returned (MIN_ITEMS in getCollectionsFeed.lua). Optional `q` filters by name (preferred) then description text.
-
app.zeens.getCommunityActivity
query
What `owner` did with `actor`'s photos: items added to a community collection and rejections, newest first, plus the actor's auto-approve standing.
-
app.zeens.getCommunitySubmissions
query
Submissions to `owner`'s community collections, each with its derived status (pending / approved / declined). Without `actor` returns the pending review queue; with `actor` returns that photographer's own submissions in every status.
-
app.zeens.getContentFacets
query
Category and location counts for the /search discovery landing, computed with the same visibility and matching rules getPhotoFeed applies so a tile's count matches the search it links to. A category counts a post when its postMeta categories match OR the post carries the tag as a hashtag facet.
-
app.zeens.getConvos
query
Return a viewer's conversation list (newest activity first), paginated. No message preview is returned. 'state' selects the inbox or the requests bucket.
-
app.zeens.getEngagement
query
Like count and the viewer's own like for any record URI, one or a batch. Subject-agnostic: post_engagement is keyed by subject URI and the like hook counts likes on anything, so this serves zeens, events, articles and posts without a branch per lexicon. Pass `uris` to ask about a whole listing in one call -- the profile and studio Zeens tabs list from the author's repo, which carries no engagement, so without a batch each card would need its own round trip.
-
app.zeens.getEvent
query
Fetch a single event by AT-URI, hydrated with the organiser's profile and raw RSVP counts (going / interested) aggregated from app.zeens.rsvp records. For gated events (approvalRequired or capacityMode=waitlist) these raw counts are advisory; the SvelteKit layer overlays canonical approved/waitlisted counts from PocketBase, which Lua cannot see.
-
app.zeens.getEventComments
query
List comments on an event via app.zeens.eventComment, newest-first by createdAt. Returns a flat list (each carrying its optional parent ref) so the client can thread organiser replies. Each comment is hydrated with the author's profile and its own like_count + the viewer's like state.
-
app.zeens.getEventFacets
query
Category and mode counts for the events filter strip, aggregated in Postgres over the whole catalog (not tallied from a page of results). Lets the client offer only filters that will actually return something. Scoped by the same time window as getEvents, so an Upcoming strip counts upcoming events.
-
app.zeens.getEventPhotos
query
List photos tagged to an event via app.zeens.eventPhoto, newest-first by addedAt. Each item is hydrated with the underlying post + author profile + engagement so the client can render a card without a per-item round trip. Same shape as getCollectionItems.
-
app.zeens.getEventRsvps
query
List the ATProto RSVPs to an event, hydrated with each responder's profile. Zeens members are surfaced first. Returns raw rsvp records only; email RSVPs and organiser approval/waitlist state live in PocketBase and are merged in by the SvelteKit layer.
-
app.zeens.getEvents
query
Browse events. Defaults to upcoming events (startsAt >= now) ordered by startsAt ascending with a stable uri tie-breaker. Supports multi-value category filtering (OR-matched), mode filtering (in person / online / hybrid), and nearby filtering (lat/lng/radius, reusing the getNearbyPhotos coordinate convention).
-
app.zeens.getExifFacets
query
Aggregate distinct EXIF facet values (makes, models, lenses, apertures, focal lengths, camera/lens gear with counts) across all app.zeens.postMeta records. Powers the search UI's cascading filters and popular-gear chips without needing any client-side aggregation.
-
app.zeens.getFeaturedFeed
query
List admin-curated featured items from the curator repo, joined to their subject posts and hydrated with author + live engagement counts. `activeOnly=true` returns the splash set ordered by admin position; otherwise returns the full archive newest-first. `curator` is the curator account DID.
-
app.zeens.getFilmFacets
query
Aggregate film-stock usage across app.zeens.postMeta records that have film.stockSlug set. Powers the search 'Popular film stocks' sidebar and the per-profile 'Top film stocks' card.
-
app.zeens.getFollowingFeed
query
Get photos from accounts the requesting user follows. Replaces the fan-out getAuthorFeed pattern.
-
app.zeens.getHotFeed
query
Get the 'hot' Zeens home feed: gravity-decayed engagement score over posts that clear the featuring like floor.
-
app.zeens.getMemberFollowers
query
Followers of the given actor who are themselves on Zeens (have authored at least one app.zeens.postMeta record).
-
app.zeens.getMemberFollows
query
Accounts the given actor follows who are themselves on Zeens (have authored at least one app.zeens.postMeta record).
-
app.zeens.getMessages
query
Return the message history for one conversation, newest-first, paginated. Each item's body is base64-obfuscated (not encrypted); Zeens decodes it. The viewer must be a participant.
-
app.zeens.getNearbyPhotos
query
Retrieve geotagged Zeens photos inside a geographic bounding box. Powers the Explore map: each result carries its lat/lng (decoded from the int*1e7 stored in postMeta), the first image cid for a thumbnail, the author identity, and the like count for ordering co-located stacks.
-
app.zeens.getPhotoFeed
query
Retrieve a feed of Zeens photos and videos with optional filters by camera, category, and engagement.
-
app.zeens.getPostsByTag
query
Get Zeens photo posts carrying a hashtag, newest first or by popularity.
-
app.zeens.getSubjectCovers
query
Cover thumbnails for a batch of zeen / collection URIs. Deliberately narrow -- URIs in, cover refs out -- so a notifications list can draw a preview per row without a round trip each. getCollection takes one uri and returns the whole record plus an item count; a zeen had no AppView read at all and getZeen goes to the author's PDS for every page's full text to find one cid.
-
app.zeens.getSuggestedUsers
query
Suggested accounts for a viewer in one query: members with at least minPosts Zeens posts, ordered by posts in the last 30 days then most recent post, excluding the viewer and accounts the viewer already follows. An optional pinned DID leads the list unless it is already followed.
-
app.zeens.getTrending
query
Get trending Zeens photos ranked by engagement within a time window.
-
app.zeens.getZeensFeed
query
Browse published zeens across users, newest first by publishedAt (the date the zeen became readable, stamped once and preserved across edits — not indexed_at, which reorders on a backfill). Drafts, page-less records and zeens with no publishedAt are excluded. Optional `q` filters by title (preferred) then description text.
-
app.zeens.hideConvo
query
Mark a conversation hidden for the viewer (the delete-conversation view side). getConvos excludes it until a new message arrives.
-
app.zeens.markConvoSeen
query
Advance the viewer's per-conversation seen cursor (never moves backwards). Modelled as a query to avoid the DPoP requirement on procedures; it writes internal bookkeeping, not a PDS record.
-
app.zeens.message
record
A single chat message, written to the SENDER's repo. The body is base64-obfuscated (NOT encrypted) so it isn't plainly readable when browsing the repo, but it is not secret — anyone can decode it. Chats are public on the user's PDS. The convoId groups a 1:1 conversation. Carries the app.zeens.v marker so the firehose recognises it.
-
app.zeens.notification.getUnreadCount
query
Get the count of unread notifications for a Zeens user (count newer than the user's seenAt cursor).
-
app.zeens.notification.listNotifications
query
List notifications for the authenticated Zeens user. Merges likes, replies, follows, group-membership and group-photo events from the firehose.
8 more under app.zeens ›