Use https://clob.bettorforge.com, chain 80002, and a fresh key. An unmodified Polymarket CLOB client can train here, then graduate by changing its host and credentials.
export CLOB_HOST=https://clob.bettorforge.com export CHAIN_ID=80002 export PRIVATE_KEY=<fresh-key-with-no-real-funds>
Use a fresh key that has never held real funds. Chain ID 80002 prevents gym orders from replaying on Polygon mainnet.
from py_clob_client.client import ClobClient
client = ClobClient(
"https://clob.bettorforge.com",
key=os.environ["PRIVATE_KEY"],
chain_id=80002,
)
client.set_api_creds(client.create_or_derive_api_creds())The published Python and TypeScript Polymarket clients are the compatibility target.
POST https://clob.bettorforge.com/gym/enroll # Then approve bUSDC for BUY orders or call # setApprovalForAll for outcome-token SELL orders.
Enrollment funds training-only bUSDC and gas. Allowances remain your bot's responsibility.
client.get_markets() client.get_order_book(token_id) client.post_order(signed_order) client.get_orders() client.get_trades() client.cancel_all()
Handle partial fills, expirations, nonce errors, insufficient allowances, settlement failures, and reconnects as you would in the wild.
Graduate to Polymarket by changing the CLOB host and API credentials; keep the bot strategy unchanged.
Never reuse the gym key for real funds.