This guide reflects Polymarket’s CLOB V2. The V1 clients (
py-clob-client, @polymarket/clob-client, the Rust rs-clob-client, and the Polymarket/agents framework) were archived in May 2026 and no longer work against production. If you’re still on V1 code you have to move to V2 regardless, so the mappings below target V2.What changed
Authentication
Polymarket requires deriving API credentials (apiKey, secret, passphrase) through an L1 EIP-712 handshake, then signing every request with HMAC-SHA256 across 5POLY_* headers.
Limitless uses a scoped API token (a token ID + secret) generated in the UI. You sign each request with HMAC-SHA256 and send three headers: lmts-api-key, lmts-timestamp, and lmts-signature.
- Polymarket (V2)
- Limitless
POLY_* headers, but you do sign each request: derive the three lmts-* headers with sign_request(TOKEN_ID, SECRET, method, path, body) for every authenticated call. The timestamp must be within 30 seconds of server time. See the full Authentication guide for details, and the Programmatic API guide for partner scopes (sub-account management and delegated order signing).
Endpoint mapping
Market data
Trading
Portfolio
Fetch a market
- Polymarket (V2)
- Limitless
Build and sign an order
Both sides use EIP-712 typed data, but the order field sets diverge in V2. Polymarket V2 droppedtaker, nonce, feeRateBps, and expiration from the signed struct and added timestamp, metadata, and builder. Limitless keeps the classic CTF-style fields (taker, expiration, nonce, feeRateBps) and has no timestamp/metadata/builder. Key differences:
- Polymarket (V2)
- Limitless
ownerId is your Limitless profile ID — a required field on every POST /orders request. Fetch it once from GET /profiles/me (the id field) and cache it. Polymarket’s SDK handles this internally; on Limitless you pass it explicitly.Porting a Polymarket agent
If you’re adapting a Polymarket trading bot (a V2 CLOB client integration, or a port of the now-archivedPolymarket/agents framework), here’s a checklist:
1
Swap credentials
Replace
POLYGON_WALLET_PRIVATE_KEY with your existing private key on Base. Add your scoped API token (TOKEN_ID + SECRET) and sign each request with HMAC (lmts-api-key/lmts-timestamp/lmts-signature) instead of Polymarket’s POLY_* headers. You still drop Polymarket’s L1/L2 credential derivation — Limitless tokens are issued in the UI.2
Collapse the three hosts into one
Replace
gamma-api.polymarket.com, clob.polymarket.com, and data-api.polymarket.com all with api.limitless.exchange. Positions and history that you read from data-api move to /portfolio/*.3
Change chain ID
Update
chainId from 137 to 8453 in all EIP-712 domain definitions.4
Update EIP-712 domain
Change the domain
name from "Polymarket CTF Exchange" to "Limitless CTF Exchange", and the version from "2" to "1".5
Swap token ID fields
Replace
clobTokenIds lookups with the market’s tokens object. On Limitless the convention is fixed: tokens.yes = Yes, tokens.no = No (unlike Polymarket, where you pair clobTokenIds against outcomes).6
Use venue addresses
Fetch
venue.exchange from GET /markets/:slug and use it as verifyingContract. On Polymarket V2 you targeted the fixed CTF Exchange V2 contract — on Limitless each market can have its own venue.7
Rework the order fields
Remove the V2 fields
timestamp, metadata, and builder — Limitless doesn’t use them. Add back the classic CTF fields Limitless requires: taker, expiration, nonce, and feeRateBps. Also drop SDK-side params like tick_size and signature_type from your order construction.8
Add ownerId to order submissions
POST /orders requires an ownerId field (your Limitless profile ID, from GET /profiles/me). Polymarket’s SDK handles this internally; on Limitless you pass it explicitly in every order payload alongside order, orderType, and marketSlug.9
Update approvals
Approve USDC on Base (not pUSD on Polygon) to
venue.exchange. For NegRisk SELL orders, also approve Conditional Tokens to venue.adapter. See venue system.WebSocket
See WebSocket events for the full event reference.
Quick reference for agents
If you’re building an LLM-powered agent or bot, here’s the minimal flow:Partner and platform migrations
If you’re migrating a platform that manages multiple user accounts on Polymarket (e.g., a trading desk, social trading app, or embedded prediction market), the Limitless Programmatic API provides a first-class partner flow:Recommended setup for partners:
- Store HMAC credentials on your backend — never expose them to frontends
- Use the SDK server-side to sign partner-authenticated requests
- Expose only your own app-specific endpoints to the frontend
- Keep public market reads (orderbooks, prices) directly in the browser
Next steps
Python quick start
Full end-to-end walkthrough with error handling.
Venue system
How venue contracts and token approvals work.
Programmatic API
Partner integrations, sub-accounts, and delegated signing.
API reference
Complete endpoint documentation.
EIP-712 signing
Full order type definition and field reference.