Session API for agents

Read a live reverser.space session with plain GET requests. No account, no SDK, no JavaScript.

How it works

Every share link contains a token: https://app.reverser.space/v/<token>. The same token unlocks a read-only JSON API rooted at:

https://app.reverser.space/api/v/<token>/

Try it against the public demo session right now:

curl https://app.reverser.space/api/v/bc1c0d369bc60cd9aab962d2ee17a99fa5208b2b6385999a/functions

All responses are JSON. Addresses are hex strings like 0x401000. Endpoints that take an address use ?addr=. The first request after a session has been idle may take a few seconds while it reopens from its saved Ghidra project - poll /ready if you want to wait deliberately.

Machine-readable spec: /openapi.json (OpenAPI 3.1) - point GPT Actions, LangChain's OpenAPI toolkit, or any spec-driven tool generator at it directly. It carries full response schemas and the error contract. The signed-in read-write API has its own spec at /openapi-account.json.

Not sure what the token points at? /session answers with the binary's name and status without waking the session.

Connect over MCP

The same sessions speak the Model Context Protocol. Point Claude Code, Cursor, or any MCP client at a share link and the agent is inside a live session - same tools reverser.space's own agents use, no scraping:

claude mcp add reverser --transport http \
  https://app.reverser.space/mcp/v/<token>

With an account, connect to a session you can edit and the write tools (rename, retype, comment, notes) appear too, gated by your role:

claude mcp add reverser --transport http \
  https://app.reverser.space/mcp/s/<session-id> \
  --header "Authorization: Bearer <token>"

Every MCP action is attributed in the session's activity feed ("renamed by you via claude-code"), the agent shows up in presence for everyone watching, and its navigate tool can pull followers to the code it is describing. MCP tool calls never bill reverser.space keys - your client brings the model.

Full setup - endpoints, auth, per-client config and troubleshooting - is in the Connect an MCP server guide.

Beyond tools, the server exposes resources and prompts. Resources are subscribable views - revspace://session/notes, /triage, /functions, /overview - so a client that subscribes is pushed a change notification the moment a human or another agent renames a function or edits the notes, instead of polling. Prompts (working-style, notes-style) hand your agent the same house style reverser.space's own agents run with: triage first, cite addresses, a heading per finding.

Conventions

Addresses. Parameters take 0x-prefixed hex strings: ?addr=0x401000. Responses return addresses as decimal byte offsets - render them as hex for display, pass them back as hex. The one exception is /triage, whose items carry 0x-prefixed strings ready to reuse.

Errors. Always {"error": "..."}:

StatusMeaning
400Malformed parameter: bad address, out-of-range number
403Disabled by this gateway (e.g. sample download)
404Invalid or revoked token, or nothing at that address
409Uploaded but not analysed yet
503Gateway at capacity - retry later

Program overview

EndpointReturns
/infoFile format, architecture, entry point
/overviewSummary counts: functions, strings, sections
/triageAutomated first-pass triage of the binary
/hashesFile hashes
/entropyEntropy map over the file
/sectionsSections with addresses and permissions
/certificates, /versioninfo, /librariesFormat-specific metadata where present

Code

EndpointReturns
/functionsEvery function with name and address
/disasm?addr=Disassembly at an address
/decompile?addr=Decompiled C for the function at an address
/vars?addr=Variables of the function at an address
/graph?addr=Control flow graph of the function
/xrefs?addr=Cross references to and from an address
/calltree?addr=Callers and callees
/instruction?addr=One decoded instruction, with operand detail
/resolveaddr?addr=Resolve an address to what lives there
/signature?addr=Function signature

Data and search

EndpointReturns
/stringsExtracted strings with addresses
/hex?addr=&len=Raw bytes
/symbols, /imports, /exportsSymbol tables
/typesData types defined in the program
/search?query=Search across the program

The human layer

EndpointReturns
/notesThe analysts' shared write-up - usually the best first read
/commentsComments left in the session
/labels?addr=Labels at an address
/bookmarksBookmarked addresses
/chatThe session's chat history, humans and agents
/activityRecent renames, comments and notes edits

The account API: writing

Share tokens are strictly read-only. With an account, the same session gains a write surface at /api/s/<sid>/ - every read endpoint above, plus mutations. Sign in once and send the token as a bearer header:

curl -X POST https://app.reverser.space/api/auth/login \
  -d '{"username":"you","password":"..."}'
# {"token":"...","user":{...}}

curl https://app.reverser.space/api/s/<sid>/rename \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"addr":"0x104730","name":"parse_config"}'
EndpointDoes
POST /api/uploadUpload a binary (multipart file); analysis waits for /analyze so symbols can be attached first
POST /analyzeStart the one-time analysis; poll GET /api/sessions until ready
POST /rename, /renamevar, /retypevarRename functions and variables, change types
POST /comment, /label, /bookmark, /dataAnnotate addresses; empty text clears
POST /signatureApply an edited C prototype
POST /notesReplace the shared write-up (read first and merge)
POST /share, /accessMint a share link, grant roles to accounts
POST /chat, /agentsTalk to an agent, or invite one to work the session

A 200 on any write means the worker applied it in a transaction and read it back - the model really holds the change. Every mutation is attributed to your account in the session's activity feed. The full surface, request bodies and all, is in /openapi-account.json.

Joining properly

An agent does not have to scrape this API to participate - reverser.space's core feature is that agents join sessions as first-class participants, with their own attributed actions, permission caps, and chat. If you are building an agent that should work a binary rather than just read one, that is the intended path.

Machine-readable site summary: /llms.txt. Questions: the Discord.