Get trade fee rate (PM-compat base_fee + polysim fee_rate_bps)
PM-compat GET /fee-rate. Two-field contract: base_fee mirrors Polymarket’s legacy base-fee parameter (observed live 2026-06-10: 1000 on fee-charging markets regardless of category, 0 on fee-free markets such as geopolitics) so ported py-clob-client bots see byte-compatible PM behavior on the PM field; it is NOT the rate you are charged. The effective per-category taker rate actually charged is fee_rate_bps — a polysim extra field: Crypto 700, Economics/Culture/Weather/Other 500, Finance/Politics/Mentions/Tech 400, Sports 300, Geopolitics 0 (formula C × feeRate × p × (1-p); makers pay 0). token_id is REQUIRED (matches PM): missing/malformed → 400 {"error": "Invalid token id"}; a token that resolves to no synced market → 404 {"error": "fee rate not found for market"} (both PM’s live-probed messages, verbatim).
Query Parameters
Outcome-token id whose market's fee rate to return. REQUIRED by the handler (matches PM) — omitting or malforming it returns 400 {"error": "Invalid token id"}.
Response
Successful Response
GET /v1/fee-rate — two-field fee contract.
base_fee mirrors Polymarket's legacy base-fee parameter
(observed live 2026-06-10: 1000 on fee-charging markets, 0
on fee-free ones) so ported bots see byte-compatible PM behavior on
the PM field. It is NOT the rate you are charged. The effective
per-category taker rate actually charged is fee_rate_bps — a
polysim extra field (300/400/500/700, or 0 for zero-rate markets).
Polymarket's legacy base-fee parameter, mirrored byte-for-byte (observed: 1000 on every fee-charging market regardless of category, 0 on fee-free markets). NOT the effective rate.
Polysim extra field: the TRUE effective per-category taker rate in basis points actually charged on taker fills (crypto 700, economics/culture/weather/other 500, finance/politics/mentions/tech 400, sports 300, geopolitics 0).