- Reading is public and allows any origin (CORS).
- Writing uses the signed-in user’s CabalSpy ID access token as
Authorization: Bearer <token>. The token must carry the scopethesis, so request it at sign-in, for example withdata-scope="openid profile thesis"on the login button.
Base URL
Endpoints
Path parameters:{chain} is one of solana, bnb, base, eth, rh, {mint} the token address, {id} a thesis or reply id.
The theses list, the summary and the websocket show theses of all platforms. Add
scope=instance&client_id=csid_... to show only the theses written on that instance, see Reach.
With a Bearer token on read requests, my_reactions and is_mine are filled for the signed-in user. Thesis objects are the same as in the Data API.
Responses
Success:{"success": true, "data": ...}, plus pagination (limit, has_more, next_cursor) on lists. Errors: {"success": false, "error": {"code": "...", "message": "..."}}. The messages are written for end users.
Access tokens live 15 minutes. When a write returns invalid_token, refresh the token or let the user sign in again.
Requests are also limited per IP address: 240 reads, 30 writes and 120 reactions per minute.
Live websocket
A public websocket per token pushes new theses, replies, reactions and removals. No key or token is needed.
Every message also carries
chain and mint. An invalid chain or token address closes the connection with code 1008, and each IP address can hold at most 20 connections.
