Prediction Market·EVM (Base)
Limitless Exchange
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.
- 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
- pnpm add @limitless-labs/limitless-exchange-ts-sdk viem
| Variable | Scope | Description |
|---|---|---|
| LIMITLESS_API_BASE_URL | Client | Base URL for the Limitless API — defaults to https://api.limitless.exchange/api-v1. |
| LIMITLESS_PRIVATE_KEY | Server | Private key used to sign the auth message and EIP-712 orders. Server-only — never ship to the browser. |
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.
- ⚑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.