Polymocket is a drop-in sandbox for Polymarket trading bots. Real prediction markets, real on-chain settlement on Polygon Amoy testnet, free mock collateral, fully automated. Validate your strategy here, then graduate to real capital with confidence.
REST + WebSocket endpoints match Polymarket's CLOB API surface. Repoint your bot's base URL to api.polymocket.com and trade. Same EIP-712 order shape, same fill semantics.
Hit POST /faucet/drip to receive 10,000 PMUSDC instantly. Per-wallet rate limit 24h. No real-money exposure, no signup forms, no captchas. Wallet-native onboarding.
Not a fork, not a sim — actual Polygon Amoy testnet with full mempool fidelity. Strategies that work here translate cleanly to Polygon mainnet because the execution engine is the same.
Wallet-native flow. Sign orders client-side with your existing tooling. We settle on-chain on your behalf — no gas required from your bot.
POST /faucet/drip with your wallet → 10k PMUSDC instantly.
EIP-712 typed-data sign against the Polymocket CTFExchange domain.
POST /orders with signed bytes. Get the orderHash + fill stream via WS.
Our settlement worker submits matchOrders to Amoy. CTF balances update.
Five minutes from clone to first signed order. Python and TypeScript SDKs coming soon — for now, hit the REST surface directly.
# 1. Drip 10k PMUSDC to your wallet curl -X POST https://api.polymocket.com/faucet/drip \ -H "Content-Type: application/json" \ -d '{"wallet":"0xYOUR_WALLET"}' # 2. List markets you can trade curl https://api.polymocket.com/markets # 3. Sign + submit an order (Node.js + viem) import { signTypedData } from 'viem/accounts'; const order = { maker: '0xYOUR_WALLET', tokenId: 1n, makerAmount: 50_000_000n, // 50 USDC (6 decimals) takerAmount: 100_000_000n, // 100 YES tokens side: 0, // 0 = BUY, 1 = SELL expiration: 9999999999n, // ...full Order struct, see docs }; const sig = await signTypedData({ domain: { name: 'Polymocket CTF Exchange', version: '1', chainId: 80002, verifyingContract: '0xEXCHANGE' }, types: ORDER_TYPES, primaryType: 'Order', message: order, privateKey: '0x...', }); await fetch('https://api.polymocket.com/orders', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ order, signature: sig }), }); # 4. Stream fills (WS) const ws = new WebSocket('wss://api.polymocket.com/ws'); ws.send(JSON.stringify({ type: 'subscribe', channel: 'trades', params: { tokenId: '1' } }));
80002