Auth
Accounts, sessions, API keys, and websocket tickets.
Custody
Deposit addresses, balances, and withdrawals.
RFQ
Quote requests, quotes, and matching.
Core concepts
Requests and quotes. A taker posts a quote request for an asset on a venue (Polymarket, Kalshi, or Limitless). Market makers see the request (without the requester’s identity, unless the requester opted into disclosure) and respond with quotes. The taker accepts a quote to match. Quotes expire; a match against an expired quote is rejected. Custody. Deposits arrive on per-user derived addresses. Balances are tracked per(venue, asset), with USDC held separately. Withdrawals are queued and
processed asynchronously.
Wire formats
Identifiers and uniqueness
For integrators mirroring this API into their own storage:Request ids
Every response carries anx-request-id header: a server-minted UUID that keys
our logs. Include it when reporting a problem. The server never adopts an id you
send; an inbound x-request-id is logged alongside ours, so if you attach your
own ids, a request that never got a response can still be found.
Websockets
Market data, user events, and the RFQ stream are served over websockets (/ws/market, /ws/user, /ws/rfq), authenticated with short-lived tickets
minted from POST /auth/ws-ticket. The protocol (tickets, handshakes, and event frames) is documented in
Websockets.