Free
Self-serve- rps
- 2
- rpm
- 120
- ws conns
- 1
- batch
- 1
- api balance
- Read-only
CLOB-compatible REST and WebSocket endpoints. Orders are simulated against live Polymarket odds — build, validate, and pace a strategy before it touches real capital. No wallet, no signing, no gas.
API access is Pro-gated during the closed beta. The cohort widens in batches.
# Place a paper order — simulated fills against live Polymarket odds # market_id: condition id, e.g. from GET /v1/markets curl -X POST https://api.polysimulator.com/v1/orders \ -H "Authorization: Bearer $PS_API_KEY" \ -d '{ "market_id": "<condition-id>", "side": "BUY", "outcome": "Yes", "order_type": "market", "quantity": 100 }' # Stream live prices over WebSocket (JWT from POST /v1/keys/ws-token) wscat -c "wss://api.polysimulator.com/v1/ws/prices?token=$WS_TOKEN"
A working API for paper-trading prediction markets. Validate a bot end to end before it ever touches real funds.
Request and response shapes mirror the Polymarket CLOB API — order payloads, market identifiers, position models. Strategies built here move to live trading with a base-URL swap.
Orders are simulated against live Polymarket odds. The price field is a worst-acceptable limit, the same as Polymarket — no real capital, no on-chain transactions, no signing.
A REST surface for orders and account state, plus two live streams: /v1/ws/prices for market data and /v1/ws/executions for fills on resting limit orders.
Every key carries a tier with transparent rps / rpm / WS / batch limits. X-RateLimit-Remaining headers and Retry-After on 429 let the SDK pace requests for you.
The official Python SDK ships a synchronous client, an async client, and a WebSocket helper covering /v1/ws/prices and /v1/ws/executions. Auth, request pacing, and back-off on 429 / 5xx are handled for you.
from polysim_sdk import AsyncPolySimClient # Simulated fills against live Polymarket odds async with AsyncPolySimClient() as ps: live = await ps.list_updown(asset="BTC", interval="5M", live=True) fill = await ps.place_order( market_id=live[0]["condition_id"], side="BUY", outcome="Up", quantity=100, order_type="market", price="0.99", # worst-acceptable fill ) print(fill["status"], fill.get("price"))
The v1 surface today. Shapes mirror the Polymarket CLOB API; the full reference lives in the docs.
| Method | Path | Notes |
|---|---|---|
| GET | /v1/me | Caller profile, tier, balance. |
| GET | /v1/markets | List markets. Filter by tag, hot_only, etc. |
| GET | /v1/markets/{condition_id} | A single market — question, outcomes, prices. |
| GET | /v1/markets/{condition_id}/book | Live order-book snapshot. |
| POST | /v1/orders | Place an order — market or limit, FOK / IOC / GTC. |
| GET | /v1/orders | List your orders, filterable by status. |
| DELETE | /v1/orders/{order_id} | Cancel one open order. |
| POST | /v1/cancel-all | Cancel every open order on the account. |
| GET | /v1/account/positions | Open and closed positions. |
| GET | /v1/account/portfolio | Equity, exposure, realised + unrealised P&L. |
| POST | /v1/clob/order | Polymarket-CLOB-shaped order endpoint. |
| GET | /v1/keys/tiers | Authoritative rate-limit ladder (this table). |
| WS | /v1/ws/prices | Real-time price stream for subscribed markets. |
| WS | /v1/ws/executions | Fill notifications for resting limit orders. |
Trade-side endpoints accept a wallet_id to route cash flow to your MAIN, SANDBOX, or API paper balance. Endpoint shapes are stabilising — minor fields may shift before the public beta.
Every key is rate-limited by tier. These values are read live from GET /v1/keys/tiers — the authoritative source.
API access is Pro-gated during the closed beta. Mint a key, read the docs, and place your first simulated order.