AppView API
Public XRPC queries and procedures for the Standard Reader indexed read-model.
Overview
Standard Reader exposes an AT Proto AppView at https://standard-reader.app/xrpc. Public directory and feed queries read the Neon index; personal state lives in each reader's PDS as app.standard-reader.* repo records.
Prefer a typed client? The whole API ships as codegen'd AT Protocol lexicon schemas in @standard-reader/lexicons. Pair it with @atproto/lex-client for fully-typed client.call() queries and procedures.
Service discovery
Service DID is did:web:standard-reader:app. The service advertises a DID document and an OAuth protected resource descriptor for clients that negotiate scopes.
Authentication
Public reads need no token. Authenticated reads and writes accept standard AT Proto credentials: call your PDS with atproto-proxy: did:web:standard-reader:app#standard_reader_appview (recommended), or call the AppView directly with Authorization: DPoP plus a DPoP proof. Token validity is checked via com.atproto.server.getSession on the issuer PDS.
Reader state endpoints also accept an optional did query param to read a reader's public indexed state without auth.
MCP server
This API is also served as a Model Context Protocol server at https://standard-reader.app/mcp. Paste that URL into an MCP client and authorize it; the fifty-odd methods above are grouped into fifteen tools, and the client can read the network and act on your behalf.
It is an OAuth 2.1 protected resource: an unauthenticated request answers 401 with a resource metadata pointer, clients register themselves dynamically, and PKCE is required. Two scopes: mcp:read and mcp:write.
Public queries
no auth · 9 endpointsMatch a web page URL to an indexed standard.site article or publication.
| Param | Type |
|---|---|
| url | uri |
| urls | uri[] |
| did | did |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.resolveUrl?url=https%3A%2F%2Fhudexperten.se'
Click Run example to fetch a live response.
Resolve an AT Proto handle, domain, or DID to publication previews.
| Param | Type |
|---|---|
| handle* | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.resolveHandle?handle=rockstar.l7y.media'
Click Run example to fetch a live response.
Full-text search over indexed publications.
| Param | Type |
|---|---|
| q* | string |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.searchPublications?q=reader&limit=5'
Click Run example to fetch a live response.
Full-text search over indexed articles.
| Param | Type |
|---|---|
| q* | string |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.searchDocuments?q=reader&limit=5'
Click Run example to fetch a live response.
Fetch a single publication profile with owner identity and aggregate stats.
| Param | Type |
|---|---|
| publication* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getPublication?publication=at%3A%2F%2Fdid%3Aplc%3Ayivadxxkqphatoon4w3ybd5g%2Fsite.standard.publication%2F3mqwgy2nt2ca2'
Click Run example to fetch a live response.
Fetch a single article: card metadata, aggregate stats, and the renderable body (content) ready for the renderers.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getDocument?document=at%3A%2F%2Fdid%3Aplc%3Agigmfatlw5oclnczr2admewg%2Fsite.standard.document%2F2v33wmbg6oogs'
Click Run example to fetch a live response.
Page through a single publication's articles, newest first, with cursor pagination.
| Param | Type |
|---|---|
| publication* | at-uri |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getPublicationDocuments?publication=at%3A%2F%2Fdid%3Aplc%3Ayivadxxkqphatoon4w3ybd5g%2Fsite.standard.publication%2F3mqwgy2nt2ca2&limit=5'
Click Run example to fetch a live response.
Readers subscribed to a publication, most recently subscribed first, with cursor pagination.
| Param | Type |
|---|---|
| publication* | at-uri |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getPublicationSubscribers?publication=at%3A%2F%2Fdid%3Aplc%3Ayivadxxkqphatoon4w3ybd5g%2Fsite.standard.publication%2F3mqwgy2nt2ca2&limit=10'
Click Run example to fetch a live response.
Browse the publication directory with topic filter, sort, and cursor pagination.
| Param | Type |
|---|---|
| topic | string |
| sort | string |
| limit | integer |
| cursor | string |
| q | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getPublications?limit=6&sort=readers'
Click Run example to fetch a live response.
Directory & feeds
no auth · 12 endpointsChronological feed of indexed articles with optional filter.
| Param | Type |
|---|---|
| filter | string |
| limit | integer |
| cursor | string |
| did | did |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getLatestFeed?filter=all&limit=5'
Click Run example to fetch a live response.
Ranked list of trending discover-eligible publications.
| Param | Type |
|---|---|
| limit | integer |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getTrendingPublications?limit=6'
Click Run example to fetch a live response.
Ranked list of trending articles across the network.
| Param | Type |
|---|---|
| limit | integer |
| scope | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getTrendingDocuments?limit=6'
Click Run example to fetch a live response.
Articles or publications carrying a given tag.
| Param | Type |
|---|---|
| tag* | string |
| view | string |
| sort | string |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getTagFeed?tag=other&view=articles&limit=5'
Click Run example to fetch a live response.
Author profile for a DID with aggregate stats and a first page of their publications.
| Param | Type |
|---|---|
| did* | did |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getAuthor?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g'
Click Run example to fetch a live response.
Publications owned by a DID with cursor pagination.
| Param | Type |
|---|---|
| did* | did |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getAuthorPublications?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&limit=5'
Click Run example to fetch a live response.
Every article a DID has a byline on — their own posts plus documents they are credited on elsewhere (featured in) — newest first, with cursor pagination.
| Param | Type |
|---|---|
| did* | did |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getAuthorPosts?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&limit=5'
Click Run example to fetch a live response.
Publications a DID subscribes to, most recently subscribed first, with cursor pagination.
| Param | Type |
|---|---|
| did* | did |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getUserSubscriptions?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&limit=5'
Click Run example to fetch a live response.
Public metadata and member publications for an app.standard-reader.list AT-URI.
| Param | Type |
|---|---|
| list* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getList?list=at%3A%2F%2Fdid%3Aplc%3Aexample%2Fapp.standard-reader.list%2Fabc'
Set API_DOCS_FIXTURE_LIST_URI to run this example.
Chronological article feed across all publications in a list.
| Param | Type |
|---|---|
| list* | at-uri |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getListFeed?list=at%3A%2F%2Fdid%3Aplc%3Aexample%2Fapp.standard-reader.list%2Fabc&limit=5'
Set API_DOCS_FIXTURE_LIST_URI to run this example.
Every publication list authored by a DID, each with its member publications resolved.
| Param | Type |
|---|---|
| did* | did |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getUserLists?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g'
Click Run example to fetch a live response.
Deferred reading-view context: related articles, recents, social proof.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getDocumentContext?document=at%3A%2F%2Fdid%3Aplc%3Agigmfatlw5oclnczr2admewg%2Fsite.standard.document%2F2v33wmbg6oogs'
Click Run example to fetch a live response.
Personalized feeds
auth · 3 endpointsSigned-in home page critical path: featured lead and latest rows.
| Param | Type |
|---|---|
| scope | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getHomeFeed?scope=subscriptions'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Personalized publication recommendations for the authenticated user.
| Param | Type |
|---|---|
| limit | integer |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getRecommendedPublications?limit=6'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Publications followed by Bluesky accounts the caller follows.
| Param | Type |
|---|---|
| limit | integer |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getFollowedByPeopleYouFollow?limit=6'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Reader state
auth · or did · 8 endpointsWhether the subject reader subscribes to a publication.
| Param | Type |
|---|---|
| did | did |
| publication* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getFollowStatus?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&publication=at%3A%2F%2Fdid%3Aplc%3Ayivadxxkqphatoon4w3ybd5g%2Fsite.standard.publication%2F3mqwgy2nt2ca2'
Click Run example to fetch a live response.
Whether the subject reader follows a user.
| Param | Type |
|---|---|
| did | did |
| subject* | did |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getUserFollowStatus?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&subject=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g'
Click Run example to fetch a live response.
Whether the subject reader has read a document.
| Param | Type |
|---|---|
| did | did |
| document* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getReadStatus?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&document=at%3A%2F%2Fdid%3Aplc%3Agigmfatlw5oclnczr2admewg%2Fsite.standard.document%2F2v33wmbg6oogs'
Click Run example to fetch a live response.
Whether the subject reader bookmarked a document.
| Param | Type |
|---|---|
| did | did |
| document* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getBookmarkStatus?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&document=at%3A%2F%2Fdid%3Aplc%3Agigmfatlw5oclnczr2admewg%2Fsite.standard.document%2F2v33wmbg6oogs'
Click Run example to fetch a live response.
Whether the subject reader liked a document.
| Param | Type |
|---|---|
| did | did |
| document* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getRecommendStatus?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&document=at%3A%2F%2Fdid%3Aplc%3Agigmfatlw5oclnczr2admewg%2Fsite.standard.document%2F2v33wmbg6oogs'
Click Run example to fetch a live response.
Subject reader save queue with hydrated document rows.
| Param | Type |
|---|---|
| did | did |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getSaved?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&limit=5'
Click Run example to fetch a live response.
Subject reader reading history.
| Param | Type |
|---|---|
| did | did |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getReadingHistory?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&limit=5'
Click Run example to fetch a live response.
Subject reader liked articles.
| Param | Type |
|---|---|
| did | did |
| limit | integer |
| cursor | string |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getLikes?did=did%3Aplc%3Ayivadxxkqphatoon4w3ybd5g&limit=5'
Click Run example to fetch a live response.
Write procedures
auth · 17 endpointsSubscribe to a site.standard.publication.
| Param | Type |
|---|---|
| publication* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.followPublication' -H 'Content-Type: application/json' -d '{"publication":"at://did:plc:yivadxxkqphatoon4w3ybd5g/site.standard.publication/3mqwgy2nt2ca2"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Remove a publication subscription.
| Param | Type |
|---|---|
| publication* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.unfollowPublication' -H 'Content-Type: application/json' -d '{"publication":"at://did:plc:yivadxxkqphatoon4w3ybd5g/site.standard.publication/3mqwgy2nt2ca2"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Follow another user by DID.
| Param | Type |
|---|---|
| did* | did |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.followUser' -H 'Content-Type: application/json' -d '{"did":"did:plc:yivadxxkqphatoon4w3ybd5g"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Unfollow a user by DID.
| Param | Type |
|---|---|
| did* | did |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.unfollowUser' -H 'Content-Type: application/json' -d '{"did":"did:plc:yivadxxkqphatoon4w3ybd5g"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Recommend an article on the network.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.recommendDocument' -H 'Content-Type: application/json' -d '{"document":"at://did:plc:gigmfatlw5oclnczr2admewg/site.standard.document/2v33wmbg6oogs"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Remove your recommendation from an article on the network.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.unrecommendDocument' -H 'Content-Type: application/json' -d '{"document":"at://did:plc:gigmfatlw5oclnczr2admewg/site.standard.document/2v33wmbg6oogs"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Mark an article as read.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.markRead' -H 'Content-Type: application/json' -d '{"document":"at://did:plc:gigmfatlw5oclnczr2admewg/site.standard.document/2v33wmbg6oogs"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Mark an article as unread.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.markUnread' -H 'Content-Type: application/json' -d '{"document":"at://did:plc:gigmfatlw5oclnczr2admewg/site.standard.document/2v33wmbg6oogs"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Save an article for later.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.bookmarkDocument' -H 'Content-Type: application/json' -d '{"document":"at://did:plc:gigmfatlw5oclnczr2admewg/site.standard.document/2v33wmbg6oogs"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Remove an article from the save queue.
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.unbookmarkDocument' -H 'Content-Type: application/json' -d '{"document":"at://did:plc:gigmfatlw5oclnczr2admewg/site.standard.document/2v33wmbg6oogs"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Add another reader publication list to this app.
| Param | Type |
|---|---|
| list* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.saveList' -H 'Content-Type: application/json' -d '{"list":"at://did:plc:example/app.standard-reader.list/abc"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Remove a saved list from this app.
| Param | Type |
|---|---|
| list* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.unsaveList' -H 'Content-Type: application/json' -d '{"list":"at://did:plc:example/app.standard-reader.list/abc"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Mark all unread articles in the effective follow set as read.
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.markAllRead' -H 'Content-Type: application/json' -d '{}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Mark all unread articles from one publication as read.
| Param | Type |
|---|---|
| publication* | at-uri |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.markPublicationAllRead' -H 'Content-Type: application/json' -d '{"publication":"at://did:plc:yivadxxkqphatoon4w3ybd5g/site.standard.publication/3mqwgy2nt2ca2"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Create a new publication list.
| Param | Type |
|---|---|
| name* | string |
| description | string |
| publications* | at-uri[] |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.createList' -H 'Content-Type: application/json' -d '{"name":"Example list","publications":["at://did:plc:yivadxxkqphatoon4w3ybd5g/site.standard.publication/3mqwgy2nt2ca2"]}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Replace an existing publication list owned by the actor.
| Param | Type |
|---|---|
| rkey* | string |
| name* | string |
| publications* | at-uri[] |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.updateList' -H 'Content-Type: application/json' -d '{"rkey":"abc","name":"Updated list","publications":["at://did:plc:yivadxxkqphatoon4w3ybd5g/site.standard.publication/3mqwgy2nt2ca2"]}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Delete a publication list owned by the actor.
| Param | Type |
|---|---|
| rkey* | string |
curl -sS -X POST 'https://standard-reader.app/xrpc/app.standard-reader.deleteList' -H 'Content-Type: application/json' -d '{"rkey":"abc"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).