At this level
place.stream · 8- place.stream.authFull permission-set
- place.stream.defs defs not from the namespace authority A game from the gamesgamesgamesgames catalog, identified by its AT URI.
- place.stream.getLikes query not from the namespace authority Get likes for a subject (video or comment).
- place.stream.key record not from the namespace authority Record linking an atproto identity with a stream signing key
- place.stream.like record not from the namespace authority Record indicating a like on some other record (e.g. a video or a comment).
- place.stream.livestream record Record announcing a livestream is happening
- place.stream.segment record not from the namespace authority Media file representing a segment of a livestream
- place.stream.video record Some audiovisual content.
- place.stream.badge.def record not from the namespace authority Defines a badge's visual appearance and type. Created by the issuer and referenced by issuance records.
- place.stream.badge.defs defs not from the namespace authority A resolved view of a badge issuance, including def fields for display.
- place.stream.badge.getIssuedBadges query not from the namespace authority Returns badges issued to the authenticated user, organized by display slot. Also indicates which badges are currently selected in the user's chat profile.
- place.stream.badge.getValidBadges query not from the namespace authority Get valid badges for the authenticated user, optionally in the context of a specific streamer's chat
- place.stream.badge.issuance record not from the namespace authority Grants a specific badge to a recipient. The badge only appears in chat after the recipient adds this record to their place.stream.chat.profile selection array.
- place.stream.beta.getStatus query not from the namespace authority Report an account's access status for a named beta feature: whether it has been granted (via a trusted place.stream.beta.invite, or because this node isn't beta-gating the feature), has an outstanding place.stream.beta.request, or neither. Defaults to the authenticated caller when `did` is omitted.
- place.stream.beta.invite record not from the namespace authority Grants a single account access to a named beta feature on this network. Records live in a project-operated repo (the streamplace node's `--beta-invite-did`); operators trust invites only from that one account, by configuration. Each (did, feature) pair gets its own record so individual features can be revoked independently by deleting the corresponding record.
- place.stream.beta.request record not from the namespace authority Requests access to a named beta feature on this network. Published in the requester's own repo, so the requesting account is the record's authority — there is no separate subject field. Operators index these to surface who is waiting for access; granting access is a separate place.stream.beta.invite record issued by the operator-trusted issuer. Each (requester, feature) pair gets its own record.
- place.stream.branding.deleteBlob procedure not from the namespace authority Delete a branding asset blob. Requires admin authorization.
- place.stream.branding.exportBundle query not from the namespace authority Download the node's branding as a bundle: a zip with branding.yaml (every set key; image keys name files in the zip) plus the image files. Re-import it on another node with place.stream.branding.importBundle. Requires admin authorization.
- place.stream.branding.getBlob query not from the namespace authority Get a specific branding asset blob by key.
- place.stream.branding.getBranding query not from the namespace authority Get all branding configuration for the broadcaster.
- place.stream.branding.importBundle procedure not from the namespace authority Apply a branding bundle (see exportBundle). By default the bundle replaces the node's branding: keys it does not mention are removed. Every value is validated like updateBlob. Requires admin authorization.
- place.stream.branding.updateBlob procedure not from the namespace authority Update or create a branding asset blob. Requires admin authorization.
- place.stream.broadcast.defs defs
- place.stream.broadcast.getBroadcaster query Get information about a Streamplace broadcaster.
- place.stream.broadcast.origin record Record indicating a livestream is published and available for replication at a given address. By convention, the record key is streamer::server
- place.stream.broadcast.syndication record Record created by a Streamplace broadcaster to indicate that they will be replicating a livestream. NYI
- place.stream.chat.access record not from the namespace authority A rule about who may chat on this streamer's streams. Rules are evaluated per streamer: when any allow rule exists, only accounts matching an allow rule may chat; accounts matching a deny rule never may. A streamer with no rules has open chat.
- place.stream.chat.defs defs View of a pinned chat record with hydrated message data.
- place.stream.chat.gate record Record defining a single gated chat message.
- place.stream.chat.message record Record containing a Streamplace chat message.
- place.stream.chat.pinnedRecord record Record pinning a chat message for prominent display.
- place.stream.chat.profile record Record containing customizations for a user's chat profile.
- place.stream.live.denyTeleport procedure Deny an incoming teleport request.
- place.stream.live.getClip query not from the namespace authority Clip a livestream between two instants as a flat (faststart) MP4. The clip is cut on MUXL segment boundaries: it holds every segment whose start falls within [start, end], so it may begin up to one segment late and run up to one segment past end. Segments come from the node's livestream recordings and from the recent stream it holds in memory; each segment's C2PA signature passes through verbatim. Only published (live) segments are clipped. Requires a signed-in caller: an OAuth session, or a ser
- place.stream.live.getLiveUsers query Get a list of livestream segments for a user
- place.stream.live.getProfileCard query Get an OG image associated with a given account.
- place.stream.live.getRecommendations query Get the list of streamers recommended by a user
- place.stream.live.getSegments query Get a list of livestream segments for a user
- place.stream.live.recommendations record A list of recommended streamers, in order of preference
- place.stream.live.searchActorsTypeahead query Find actor suggestions for a prefix search term. Expected use is for auto-completion during text field entry.
- place.stream.live.startLivestream procedure Create a new place.stream.livestream record, automatically populating a thumbnail and creating a Bluesky post and whatnot. You can do this manually by creating a record but this method can work better for mobile livestreaming and such.
- place.stream.live.stopLivestream procedure Stop your current livestream, updating your current place.stream.livestream record and ceasing the flow of video.
- place.stream.live.subscribeSegments subscription Subscribe to a stream's new segments as they come in!
- place.stream.live.teleport record Record defining a 'teleport', that is active during a certain time.
- place.stream.live.viewCount record not from the namespace authority Current view count for a livestream on a particular server.
- place.stream.live.viewerCount record Current viewer count for a livestream on a particular server. Record keys are streamer_did::server_did by convention.
- place.stream.media.createUpload procedure not from the namespace authority Start a resumable upload of arbitrary media content. Returns a TUS upload URL and a short-lived bearer token used to authenticate subsequent chunk requests (no DPoP required on chunks). The DID of the authenticated user is recorded against the upload; on completion a VOD processing task is enqueued.
- place.stream.media.defs defs not from the namespace authority A track backed by a MUXL container
- place.stream.media.deleteVideo procedure not from the namespace authority Delete a place.stream.video record and, on request, the track records its source points at. The content blob and the upload stay, so the record can be published again from the same upload. The caller must be the record's owner or hold livestream.manage from them; the records are deleted with the owner's session.
- place.stream.media.finalizeLivestream procedure not from the namespace authority Turn a finished livestream into a VOD. The server concatenates the MUXL segments it recorded for the livestream(s) into a single content blob, derives the playback sidecars, and publishes the place.stream.media.track records. By default it leaves a draft VOD the streamer publishes later via place.stream.vod.publishDraft; with publish set it publishes the place.stream.video record as soon as the VOD is finalized. The caller must be the streamer, or a moderator they have granted livestream.manage;
- place.stream.media.getUploadStatus query not from the namespace authority Get the processing status of a previously created upload. Only accessible by the DID that created the upload.
- place.stream.media.getVideo query not from the namespace authority Get a hydrated view of a place.stream.video record — the record itself plus author info plus aggregated view counts summed across every reporting node we've indexed. View counts come from place.stream.media.viewCount records; consumers see one number per metric, with the underlying multi-reporter detail collapsed away.
- place.stream.media.getVideoList query not from the namespace authority List videos newest first. Scoped to a single repo when `repo` is supplied; otherwise lists videos across every indexed repo. Returns hydrated video views with author info and view counts.
- place.stream.media.listVideos query not from the namespace authority A streamer's place.stream.video records (read from their PDS) and this node's uploads for them: everything updateVideo, deleteVideo and publishVideo take. The caller must be the streamer or hold livestream.manage from them.
- place.stream.media.origin record not from the namespace authority An attestation that a MUXL blob is available for download from the publishing node, retrievable via XRPC (com.atproto.repo.getBlob and similar). Published by the Streamplace node that hosts the blob, not by the user who owns the underlying video. The rkey is conventionally the blob's BDASL CID — atproto lexicon doesn't yet have a literal-rkey syntax so we settle for `key: any` and rely on the convention.
- place.stream.media.publishVideo procedure not from the namespace authority Publish a place.stream.video record for a finished upload, server-side. The caller supplies the record it would otherwise putRecord itself; the server overrides the fields it is authoritative about (source tracks and durationMs, taken from the processed upload) and, if the record carries no thumb, generates one from the video and attaches it. The record is written to the authenticated user's repo. The caller must own the upload, or hold livestream.manage from its owner; the record is written wit
- place.stream.media.track record not from the namespace authority A track for a video stream, either part of the source or a custom additional track. One of: video, audio, subtitles.
- place.stream.media.updateVideo procedure not from the namespace authority Rewrite a place.stream.video record in place: retitle, redescribe or retag it, or point it at a finished upload's tracks (publishing them if the upload has none yet: the repair for a record published without tracks, or the way to point a record at a re-finalized VOD). Fields left out are kept; an empty description or tag list clears it. The caller must be the record's owner or hold livestream.manage from them; the record is written with the owner's session.
- place.stream.media.viewCount record not from the namespace authority A streamplace node's report of view counts for one place.stream.video over a closed time window. Published in the reporting node's server repo (not the streamer's), so a video served by multiple nodes accumulates multiple records — consumers are expected to sum across trusted reporters. The rkey is conventionally `<windowStart-as-tid>-<video-rkey>` so re-running the aggregator over the same window is idempotent. Counts represent the reporting node's best effort given the data it has; the `tracks
- place.stream.metadata.configuration record not from the namespace authority Default metadata record for livestream including content warnings, rights, and distribution policy
- place.stream.metadata.contentRights object not from the namespace authority Content rights and attribution information.
- place.stream.metadata.contentWarnings object not from the namespace authority Content warnings for a stream.
- place.stream.metadata.distributionPolicy object not from the namespace authority Distribution and rebroadcast policy.
- place.stream.moderation.createBlock procedure Create a block (ban) on behalf of a streamer. Requires 'ban' permission. Creates an app.bsky.graph.block record in the streamer's repository.
- place.stream.moderation.createGate procedure Create a gate (hide message) on behalf of a streamer. Requires 'hide' permission. Creates a place.stream.chat.gate record in the streamer's repository.
- place.stream.moderation.createPin procedure Pin a chat message on behalf of a streamer. Requires 'message.pin' permission. Creates a place.stream.chat.pinnedRecord in the streamer's repo, replacing any existing pin.
- place.stream.moderation.createVodGate procedure Create a gate (hide VOD comment) on behalf of a streamer. Requires 'vod.comment.hide' permission. Creates a place.stream.vod.gate record in the streamer's repository.
- place.stream.moderation.defs defs
- place.stream.moderation.deleteBlock procedure Delete a block (unban) on behalf of a streamer. Requires 'ban' permission. Deletes an app.bsky.graph.block record from the streamer's repository.
- place.stream.moderation.deleteGate procedure Delete a gate (unhide message) on behalf of a streamer. Requires 'hide' permission. Deletes a place.stream.chat.gate record from the streamer's repository.
- place.stream.moderation.deletePin procedure Unpin a pinned chat message on behalf of a streamer. Requires 'message.pin' permission. Deletes the place.stream.chat.pinnedRecord from the streamer's repo.
- place.stream.moderation.deleteVodGate procedure Delete a gate (unhide VOD comment) on behalf of a streamer. Requires 'vod.comment.hide' permission. Deletes a place.stream.vod.gate record from the streamer's repository.
- place.stream.moderation.permission record Record granting moderation permissions to a user for this streamer's content.
- place.stream.moderation.updateLivestream procedure Update livestream metadata on behalf of a streamer. Requires 'livestream.manage' permission. Updates a place.stream.livestream record in the streamer's repository.
- place.stream.multistream.createTarget procedure not from the namespace authority Create a new target for rebroadcasting a Streamplace stream.
- place.stream.multistream.defs defs not from the namespace authority
- place.stream.multistream.deleteTarget procedure not from the namespace authority Delete a target for rebroadcasting a Streamplace stream.
- place.stream.multistream.listTargets query not from the namespace authority List a range of targets for rebroadcasting a Streamplace stream.
- place.stream.multistream.putTarget procedure not from the namespace authority Update an existing target for rebroadcasting a Streamplace stream.
- place.stream.multistream.target record not from the namespace authority An external server for rebroadcasting a Streamplace stream
- place.stream.playback.getLivePlaylist query not from the namespace authority Get an HLS CMAF playlist for a live stream. Returns a master playlist when `track` is omitted, or a single-track media playlist when `track` is supplied. The playlist references each segment + per-track init segment via getLiveSegment. Segments come from an in-memory sliding window fed as the stream is ingested (or replicated to this node), so a playlist is only available while the stream is live here.
- place.stream.playback.getLiveSegment query not from the namespace authority Fetch a single live HLS segment, or a track's init segment, from the in-memory live window. `seg` is `init` for the EXT-X-MAP init segment, otherwise the segment's media-sequence number; a cosmetic `.m4s` suffix is accepted (and ignored) so ffmpeg-based HLS players will fetch it. HTTP Range is honored. Segments are the verbatim signed canonical .m4s, so provenance travels with playback.
- place.stream.playback.getPlaybackServer query not from the namespace authority Get available playback servers for a livestream.
- place.stream.playback.getPlaybackSession query not from the namespace authority Mint the caller's own playback session for their live stream. Every playback URL carries a signed session as `sid`; the anonymous one a playlist hands out opens published streams only, while the owner session this returns also opens the caller's unpublished (pre-live) stream to their own player. Requires an authenticated session; the result is bound to the caller's DID. Pass it as `sid` on getLivePlaylist.
- place.stream.playback.getVideoBlob query not from the namespace authority Fetch a content-addressed MUXL playback blob by CID. Serves either a primary fMP4 archive or a per-track init segment — both are CID-addressed and indistinguishable from the endpoint's point of view. HTTP `Range` headers are honored; HLS media playlists generated by getVideoPlaylist reference this endpoint with `EXT-X-BYTERANGE` to serve segments out of the primary blob. The `did` identifies the owning account for egress accounting: the blob itself is content-addressed and owner-agnostic, so the
- place.stream.playback.getVideoPlaylist query not from the namespace authority Get an HLS CMAF playlist for a video. Returns a master playlist when `track` is omitted, or a single-track media playlist when `track` is supplied. The playlist references each segment + per-track init segment via getVideoBlob, addressed by content hash. The `uri` is an AT-URI pointing at a playable record — today only place.stream.video records are supported, but the surface is collection-agnostic so other record types can join later.
- place.stream.playback.whep procedure not from the namespace authority Play a stream over WebRTC using WHEP.
- place.stream.server.createWebhook procedure Create a new webhook for receiving Streamplace events.
- place.stream.server.defs defs S3 storage configuration for backups.
- place.stream.server.deleteStorage procedure Delete S3 storage configuration.
- place.stream.server.deleteWebhook procedure Delete an existing webhook.
- place.stream.server.getServerTime query Get the current server time for client clock synchronization
- place.stream.server.getStorage query Get S3 storage configuration (with masked secret key).
- place.stream.server.getWebhook query Get details for a specific webhook.
- place.stream.server.listWebhooks query List webhooks for the authenticated user.
- place.stream.server.settings record Record containing user settings for a particular Streamplace node
- place.stream.server.updateWebhook procedure Update an existing webhook configuration.
- place.stream.server.upsertStorage procedure Create or update S3 storage configuration for backups.
- place.stream.vod.comment record not from the namespace authority Record containing a comment on a VOD.
- place.stream.vod.createDraft procedure not from the namespace authority Create an empty draft VOD in the 'processing' state. The draft is the durable anchor for an upload: the client creates it first, then passes its URI to place.stream.media.createUpload so the upload's processing fills this draft. Lets the user start editing metadata while the upload runs, and supports re-upload (a failed upload leaves the draft intact; a new createUpload with the same draftUri re-points it).
- place.stream.vod.defs defs not from the namespace authority A comment view without its own `replyTo`, used to represent the parent of a reply without recursively nesting the whole thread.
- place.stream.vod.deleteDraft procedure not from the namespace authority Discard a draft VOD. The processed content blob is not deleted (it may be referenced elsewhere). Only the draft record is removed.
- place.stream.vod.draftDefs defs not from the namespace authority A draft VOD with its ats:// URI and CID, for list/get responses.
- place.stream.vod.draftVideo record not from the namespace authority A draft VOD: pre-publication video metadata and processing state. Modeled as a permissioned-data-style record (CBOR-serialized, addressed by an ats:// URI) stored in statedb until the permissioned-data spec ships (bluesky-social/proposals PR #94, the 0016-permissioned-data proposal). Publishing promotes it to a public place.stream.video record.
- place.stream.vod.gate record not from the namespace authority Record defining a single gated VOD comment.
- place.stream.vod.getComments query not from the namespace authority Get comments for a place.stream.video record.
- place.stream.vod.getDraft query not from the namespace authority Get a single draft VOD by its ats:// URI. Only accessible by the draft's author.
- place.stream.vod.listDrafts query not from the namespace authority List the authenticated user's draft VODs, newest first.
- place.stream.vod.publishDraft procedure not from the namespace authority Promote a ready draft VOD to a public place.stream.video record. The server carries over source and durationMs from the draft, backfills a generated thumbnail if the draft has none, writes the video record via putRecord, then deletes the draft.
- place.stream.vod.updateDraft procedure not from the namespace authority Update a draft VOD's editable metadata. Server-authoritative fields (source, durationMs, status) are preserved. Editing is allowed in any status, so the user can pre-fill metadata while processing. All fields except uri are optional (partial update).