← Protocols
Limitless Exchange
01Description

High-frequency prediction market on Base focused on hourly/daily crypto and stock-price markets. Hybrid CLOB + NegRisk AMM with REST + websocket APIs and a TypeScript SDK; settles in USDC on Base.

02Best for
  • 01short-duration prediction market frontends
  • 02automated market-making bots on Base
  • 03hourly/daily price markets widgets
  • 04portfolio + PnL dashboards
  • 05agent / bot trading on prediction markets
03Install
  • pnpm add @limitless-labs/limitless-exchange-ts-sdk viem
04Environment variables
VariableScopeDescription
LIMITLESS_API_BASE_URLClientBase URL for the Limitless API — defaults to https://api.limitless.exchange/api-v1.
LIMITLESS_PRIVATE_KEYServerPrivate key used to sign the auth message and EIP-712 orders. Server-only — never ship to the browser.
05Prompt snippet
Use Limitless Exchange for prediction markets on Base. Auth is a 3-step flow: (1) `GET /auth/signing-message` to fetch a nonce, (2) sign it with the wallet, (3) `POST /auth/login` to exchange the signature for a session JWT. Discover markets via `GET /markets?status=active&sortBy=volume` (returns CLOB + NegRisk markets and `clobTokenIds` for YES/NO). Build orders by EIP-712 signing the CTF Exchange order struct, then `POST /orders` to submit; manage state with `GET /orders` / `DELETE /orders/{id}`. Stream live orderbooks and fills via the websocket at `wss://api.limitless.exchange/ws` after subscribing with the JWT. Use `@limitless-labs/limitless-exchange-ts-sdk` for typed clients and the NegRisk batch-trading endpoints.
06Gotchas
  • Two market types coexist: CLOB (single binary outcome) and NegRisk (multi-outcome with shared collateral). They use different exchange contracts and order schemas — branch on `market.type` before signing.
  • Settles in native USDC on Base (NOT USDC.e or USDbC). Pre-fund users with bridged-to-Base USDC or trades will revert at the ERC-20 transfer.
  • Hourly/daily markets resolve fast — disputes are rare but a delayed Chainlink/oracle round can push settlement past expiry. Read `market.resolutionStatus` rather than assuming `expiry < now ⇒ resolved`.
  • Auth JWT is short-lived (~1 hour). Refresh via re-signing the nonce, or a long-running bot will start 401-ing without warning.
  • Order signatures use EIP-712 against the CTF Exchange domain on Base (chainId 8453). Reusing the Polymarket order struct (Polygon, chainId 137) will silently mismatch and the API will return `InvalidSignature`.
  • Limitless geofences blocked jurisdictions at the UI layer; mirror their geo-blocklist if you ship a public frontend.
07Alternatives