Read a live reverser.space session with plain GET requests. No account, no SDK, no JavaScript.
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.
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.
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": "..."}:
| Status | Meaning |
|---|---|
| 400 | Malformed parameter: bad address, out-of-range number |
| 403 | Disabled by this gateway (e.g. sample download) |
| 404 | Invalid or revoked token, or nothing at that address |
| 409 | Uploaded but not analysed yet |
| 503 | Gateway at capacity - retry later |
| Endpoint | Returns |
|---|---|
| /info | File format, architecture, entry point |
| /overview | Summary counts: functions, strings, sections |
| /triage | Automated first-pass triage of the binary |
| /hashes | File hashes |
| /entropy | Entropy map over the file |
| /sections | Sections with addresses and permissions |
| /certificates, /versioninfo, /libraries | Format-specific metadata where present |
| Endpoint | Returns |
|---|---|
| /functions | Every 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 |
| Endpoint | Returns |
|---|---|
| /strings | Extracted strings with addresses |
| /hex?addr=&len= | Raw bytes |
| /symbols, /imports, /exports | Symbol tables |
| /types | Data types defined in the program |
| /search?query= | Search across the program |
| Endpoint | Returns |
|---|---|
| /notes | The analysts' shared write-up - usually the best first read |
| /comments | Comments left in the session |
| /labels?addr= | Labels at an address |
| /bookmarks | Bookmarked addresses |
| /chat | The session's chat history, humans and agents |
| /activity | Recent renames, comments and notes edits |
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"}'
| Endpoint | Does |
|---|---|
| POST /api/upload | Upload a binary (multipart file); analysis waits for /analyze so symbols can be attached first |
| POST /analyze | Start the one-time analysis; poll GET /api/sessions until ready |
| POST /rename, /renamevar, /retypevar | Rename functions and variables, change types |
| POST /comment, /label, /bookmark, /data | Annotate addresses; empty text clears |
| POST /signature | Apply an edited C prototype |
| POST /notes | Replace the shared write-up (read first and merge) |
| POST /share, /access | Mint a share link, grant roles to accounts |
| POST /chat, /agents | Talk 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.
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.