Off the Clock Docs

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

NSIDKindWhat it is
us.off-the-clock.admin.evaluateFeedprocedureDry-runs a feed configuration over the newest candidates in a pair's content space, without publishing it
us.off-the-clock.admin.getBlobqueryOne blob and the records that reference it
us.off-the-clock.admin.getMemberqueryOne DID's membership and the records behind it
us.off-the-clock.admin.getPolicyStatusqueryWho has accepted a pair's current policy
us.off-the-clock.admin.getSpacequeryOne registered pair, with its content space's record counts by collection
us.off-the-clock.admin.listBlobsqueryEvery blob a record in a community space references
us.off-the-clock.admin.listFeedsqueryA pair's effective feeds with their configurations, by record key, the one its space record names marked default
us.off-the-clock.admin.listLabelsqueryThe labels that count, newest first
us.off-the-clock.admin.listMembersqueryEvery DID a membership record names, with the records behind it
us.off-the-clock.admin.listRecordsqueryA community space's records, newest first, hidden ones included
us.off-the-clock.admin.listSpacesqueryThe self management space and every registered pair, the default pair first and the rest by name
us.off-the-clock.browseSpacesqueryThe 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.getFeedSkeletonqueryA page of a feed's items, newest first by the feed's sort
us.off-the-clock.getAuthorRecordsqueryA member's records in one community space, newest first
us.off-the-clock.getFeedqueryA feed by record key: its generator's skeleton, hydrated by collection
us.off-the-clock.getMembershipqueryCommunity-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.getPolicyqueryA 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.getProfilequeryA member's community profile from the general space, or their handle alone
us.off-the-clock.getRecordqueryOne 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.listCalendarFeedsqueryThe viewer's two calendar feeds for one space they read, all and mine, created on first call
us.off-the-clock.listFeedsqueryA pair's feeds, the one its space record names first and the rest by name
us.off-the-clock.listNotificationsqueryThe viewer's notifications, grouped by kind and subject within a day, newest group first
us.off-the-clock.listPinsqueryThe 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.listSpaceMembersqueryThe 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.listSpaceRecordsqueryThe visible records of one collection in one community space, newest first or by start time from now
us.off-the-clock.listSpacesqueryThe 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.getPollqueryOne 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.getPushSettingsqueryWhether this AppView sends Web Push, its VAPID public key, and the viewer's devices and push preferences (D63)
us.off-the-clock.push.putPushPreferencesprocedureReplaces 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.registerPushSubscriptionprocedureRegisters this browser's push subscription to the viewer
us.off-the-clock.push.unregisterPushSubscriptionprocedureRemoves one of the viewer's subscriptions, named by its endpoint or by the id getPushSettings gave it
us.off-the-clock.searchMembersqueryMembers of the community whose handle or display name starts with q
us.off-the-clock.searchRecordsqueryPosts, 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.setCalendarFeedprocedureRotates, disables, or enables one of the viewer's calendar feeds in a space they read
us.off-the-clock.updateSeenprocedureMarks 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.