atproto.md read-only · markdown · no-auth live
~ ▸ curl atproto.md/at://{actor}/{collection}/{rkey}

atproto.md

AT Protocol data as clean Markdown. Any collection on any PDS — first-party Bluesky or third-party lexicons. No auth, no API key.

routes

GET/at://{actor}
Repo overview — every collection in the repo.
/at://bsky.app
GET/at://{actor}/{collection}
List records in any collection on any PDS. Paginated.
/at://bsky.app/app.bsky.feed.post
GET/at://{actor}/{collection}/{rkey}
Fetch a single record by rkey.
/at://bsky.app/app.bsky.actor.profile/self
GET/backlinks/{at-uri-or-did-or-url}new
Who links to a target — likes, reposts, replies, follows, or any lexicon.
/backlinks/at://…/site.standard.document/3md4qsktbms24
GET/discover/{collection}new
Every repo on the network using a lexicon.
/discover/site.standard.document
GET/lexicon/{nsid}new
Resolve a Lexicon schema by NSID — DNS _lexicon TXT → DID → schema record.
/lexicon/app.bsky.feed.post
GET/plc/audit/{actor}new
PLC audit log — PDS migrations, handle changes, and key rotations over time.
/plc/audit/bsky.app
GET/plc/data/{actor}new
Current PLC state — active PDS, handles, signing key, and rotation keys.
/plc/data/bsky.app
GET/plc/last/{actor}new
The most recent PLC operation and the state it established.
/plc/last/bsky.app
GET/resolve/{actor}
Full identity chain — handle → DID → DID document → PDS endpoint.
/resolve/bsky.app

try it

# resolve a profile~ ▸ curl https://atproto.md/at://bsky.app/app.bsky.actor.profile/self # find everyone using a lexicon~ ▸ curl https://atproto.md/discover/site.standard.document # latest posts~ ▸ curl "https://atproto.md/at://bsky.app/app.bsky.feed.post?limit=5"

for llm agents

# install the MCP server in Claude Code~ ▸ claude mcp add --transport http atproto-md https://atproto.md/mcp # or save the skill as a slash command~ ▸ curl -s https://atproto.md/skill.md > ~/.claude/commands/atproto.md