Skip to main content
The thesis widget runs on a small public API on id.cabalspy.xyz. Client-side apps can use it directly, without a backend and without an API key:
  • 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 scope thesis, so request it at sign-in, for example with data-scope="openid profile thesis" on the login button.
For server-to-server writing with your API key, use the Data API instead.

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.