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.
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.
Public queries
no auth · 7 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%2Fcadernodeandre.leaflet.pub'
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%3Atpahzhv7j7bxzcw6g35sijrd%2Fsite.standard.publication%2F3mo5ccevb422r'
Click Run example to fetch a live response.
Fetch a single article card metadata and aggregate stats (no full body).
| Param | Type |
|---|---|
| document* | at-uri |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getDocument?document=at%3A%2F%2Fdid%3Aplc%3Aki5px4zg2sa2zhmojphgtjys%2Fsite.standard.document%2F3mocs5c6czk2h'
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 · 9 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=observability&view=articles&limit=5'
Click Run example to fetch a live response.
Author profile for a DID with aggregate stats.
| Param | Type |
|---|---|
| did* | did |
curl -sS 'https://standard-reader.app/xrpc/app.standard-reader.getAuthor?did=did%3Aplc%3Atpahzhv7j7bxzcw6g35sijrd'
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%3Atpahzhv7j7bxzcw6g35sijrd&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.
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%3Aki5px4zg2sa2zhmojphgtjys%2Fsite.standard.document%2F3mocs5c6czk2h'
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 · 7 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%3Atpahzhv7j7bxzcw6g35sijrd&publication=at%3A%2F%2Fdid%3Aplc%3Atpahzhv7j7bxzcw6g35sijrd%2Fsite.standard.publication%2F3mo5ccevb422r'
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%3Atpahzhv7j7bxzcw6g35sijrd&document=at%3A%2F%2Fdid%3Aplc%3Aki5px4zg2sa2zhmojphgtjys%2Fsite.standard.document%2F3mocs5c6czk2h'
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%3Atpahzhv7j7bxzcw6g35sijrd&document=at%3A%2F%2Fdid%3Aplc%3Aki5px4zg2sa2zhmojphgtjys%2Fsite.standard.document%2F3mocs5c6czk2h'
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%3Atpahzhv7j7bxzcw6g35sijrd&document=at%3A%2F%2Fdid%3Aplc%3Aki5px4zg2sa2zhmojphgtjys%2Fsite.standard.document%2F3mocs5c6czk2h'
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%3Atpahzhv7j7bxzcw6g35sijrd&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%3Atpahzhv7j7bxzcw6g35sijrd&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%3Atpahzhv7j7bxzcw6g35sijrd&limit=5'
Click Run example to fetch a live response.
Write procedures
auth · 15 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:tpahzhv7j7bxzcw6g35sijrd/site.standard.publication/3mo5ccevb422r"}'
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:tpahzhv7j7bxzcw6g35sijrd/site.standard.publication/3mo5ccevb422r"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Like 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:ki5px4zg2sa2zhmojphgtjys/site.standard.document/3mocs5c6czk2h"}'
Sign in to run this example (curl uses Bearer $ACCESS_TOKEN).
Remove a network like from an article.
| 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:ki5px4zg2sa2zhmojphgtjys/site.standard.document/3mocs5c6czk2h"}'
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:ki5px4zg2sa2zhmojphgtjys/site.standard.document/3mocs5c6czk2h"}'
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:ki5px4zg2sa2zhmojphgtjys/site.standard.document/3mocs5c6czk2h"}'
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:ki5px4zg2sa2zhmojphgtjys/site.standard.document/3mocs5c6czk2h"}'
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:ki5px4zg2sa2zhmojphgtjys/site.standard.document/3mocs5c6czk2h"}'
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:tpahzhv7j7bxzcw6g35sijrd/site.standard.publication/3mo5ccevb422r"}'
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:tpahzhv7j7bxzcw6g35sijrd/site.standard.publication/3mo5ccevb422r"]}'
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:tpahzhv7j7bxzcw6g35sijrd/site.standard.publication/3mo5ccevb422r"]}'
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).