Trading Fees
PolySimulator mirrors Polymarket’s V2 taker fee schedule exactly. Fees are simulated money (this is paper trading), but the economics are real: every taker fill is debited the same fee a live Polymarket fill would pay, so a strategy that is fee-unprofitable here is fee-unprofitable there.Fee Formula
The
p × (1 − p) factor makes the fee symmetric around 0.99 pays a tiny
fraction of what the same share count pays at $0.50. Fees are rounded to 5
decimal places; the smallest charged fee is 0.00001 USD (amounts below that
round to zero). The amount actually debited from your balance is settled at
cent precision.
Worked example — 10-share BUY at $0.65 on a crypto market:
Category Rates
The schedule mirrors Polymarket’s published fee table:
Discover a market’s rate programmatically:
base_feemirrors Polymarket’s legacy base-fee parameter (observed live:1000on fee-charging markets — sports, politics and crypto alike — and0on fee-free markets). It tells you whether fees are enabled, not the rate. Ported bots that read the PM field see byte-compatible PM behavior.fee_rate_bpsis the PolySimulator extra field carrying the effective per-category taker rate actually charged, in basis points (the table above). Use this one for fee math.
token_id is required, and errors mirror Polymarket’s live responses
verbatim: a missing or malformed token_id returns
400 {"error": "Invalid token id"}; a well-formed token that resolves to
no synced market returns 404 {"error": "fee rate not found for market"}.
Makers Pay Zero — Classified by Marketability
Matching Polymarket V2, takers pay the fee and makers pay nothing:- Market orders, FOK, FAK/IOC — always taker.
- GTC limit orders that are marketable at placement (a BUY at/above the live ask, or a SELL at/below the live bid) — taker. The order crosses the book the moment you place it; the ~1-second matching-loop latency doesn’t make it a maker. Swapping FOK market orders for marketable GTC limits does not dodge the fee.
- GTC limit orders that genuinely rest (placed away from the touch and filled later when the market moves into them) — maker, zero fee.
fee_rate_bps on /v1/data/trades rows reports the rate actually applied
to each fill: the category rate in bps for taker fills, 0 for fee-free
fills (maker fills, geopolitics markets, emergency exits).
Fee-Free Fills
Documented Divergences from Polymarket
Next Steps
- Placing Orders — fee field on fill responses
- Slippage Protection — fees in the execution model
- Trade History — auditing debited fees per fill