Developers
API reference
The AppView and the feed generator speak XRPC with service auth; otc-web proxies members' calls to them.
Calling the services
Draft outline
Members' calls go through otc-web and their PDS's service proxy, with service auth (aud = the service's did:web and fragment). Admin methods need the admin step-up. Errors are {"error", "message"}.
Methods
| NSID | Kind | What it is |
|---|---|---|
us.off-the-clock.admin.evaluateFeed | procedure | Dry-runs a feed configuration over the newest candidates in a pair's content space, without publishing it |
us.off-the-clock.admin.getBlob | query | One blob and the records that reference it |
us.off-the-clock.admin.getMember | query | One DID's membership and the records behind it |
us.off-the-clock.admin.getPolicyStatus | query | Who has accepted a pair's current policy |
us.off-the-clock.admin.getSpace | query | One registered pair, with its content space's record counts by collection |
us.off-the-clock.admin.listBlobs | query | Every blob a record in a community space references |
us.off-the-clock.admin.listFeeds | query | A pair's effective feeds with their configurations, by record key, the one its space record names marked default |
us.off-the-clock.admin.listLabels | query | The labels that count, newest first |
us.off-the-clock.admin.listMembers | query | Every DID a membership record names, with the records behind it |
us.off-the-clock.admin.listRecords | query | A community space's records, newest first, hidden ones included |
us.off-the-clock.admin.listSpaces | query | The self management space and every registered pair, the default pair first and the rest by name |
us.off-the-clock.browseSpaces | query | The space directory (D50): the spaces with a profile, in record-key order, oldest first, for members who read the default pair's content space |
us.off-the-clock.feed.getFeedSkeleton | query | A page of a feed's items, newest first by the feed's sort |
us.off-the-clock.getAuthorRecords | query | A member's records in one community space, newest first |
us.off-the-clock.getFeed | query | A feed by record key: its generator's skeleton, hydrated by collection |
us.off-the-clock.getMembership | query | Community-wide membership, computed from the records in the management spaces: the same projection this service uses to answer com.atproto.simplespace.checkUserAccess for every space |
us.off-the-clock.getPolicy | query | A content space's current policy, for its members whether or not they have accepted it, with a signed URL of its body and the viewer's acceptance |
us.off-the-clock.getProfile | query | A member's community profile from the general space, or their handle alone |
us.off-the-clock.getRecord | query | One record in a community space the viewer can read: a post with its thread, a poll with its view and the thread of its replies, an event with its RSVPs, or any other record |
us.off-the-clock.listCalendarFeeds | query | The viewer's two calendar feeds for one space they read, all and mine, created on first call |
us.off-the-clock.listFeeds | query | A pair's feeds, the one its space record names first and the rest by name |
us.off-the-clock.listNotifications | query | The viewer's notifications, grouped by kind and subject within a day, newest group first |
us.off-the-clock.listPins | query | The counting pins of one space the viewer reads, in the order they were pinned, one per subject, with subjects the viewer cannot see left out; at most ten |
us.off-the-clock.listSpaceMembers | query | The members holding a pair's content space, its admins first and then by handle, as basic profile views from the cached profiles |
us.off-the-clock.listSpaceRecords | query | The visible records of one collection in one community space, newest first or by start time from now |
us.off-the-clock.listSpaces | query | The registered pairs whose content space the viewer can read, the default pair first, with their names, default feeds, and member counts |
us.off-the-clock.polls.getPoll | query | One poll of a content space the viewer reads, with its results counted now: each member's newest vote cast between opensAt and closesAt by a member the viewer may see |
us.off-the-clock.push.getPushSettings | query | Whether this AppView sends Web Push, its VAPID public key, and the viewer's devices and push preferences (D63) |
us.off-the-clock.push.putPushPreferences | procedure | Replaces the viewer's push preferences: each kind named is on or off, every other takes its default, and the spaces listed are muted |
us.off-the-clock.push.registerPushSubscription | procedure | Registers this browser's push subscription to the viewer |
us.off-the-clock.push.unregisterPushSubscription | procedure | Removes one of the viewer's subscriptions, named by its endpoint or by the id getPushSettings gave it |
us.off-the-clock.searchMembers | query | Members of the community whose handle or display name starts with q |
us.off-the-clock.searchRecords | query | Posts, events, bookmarks, and polls of one content space the viewer reads, matching every condition given: words (keyword), a full-text query (text) or a meaning (semantic), an H3 cell, a radius around a point, a bookmark's domain, and a tag |
us.off-the-clock.setCalendarFeed | procedure | Rotates, disables, or enables one of the viewer's calendar feeds in a space they read |
us.off-the-clock.updateSeen | procedure | Marks the viewer's notifications read up to seenAt |
Example: getFeed
Draft outline
A request and a trimmed response, from the deck's "xrpc-feed" slide.
Web routes
Draft outline
A table of otc-web's routes for people linking into the site: /feed, /space/<key>, /profile/<handle>, /notifications, /spaces, /drafts, /settings, /admin, /about, /policies, /login, /oauth-client-metadata.json, /manifest.webmanifest, /sw.js.