fee = k × P × (1 − P) × outcomeTokens
P is the execution price, 0 < P < 1.
k is a period-specific coefficient.
outcomeTokens is the number of outcome tokens traded.
- The curve peaks at
P = 0.5 (max uncertainty) and decays to 0 at
the extremes.
- Maker fee is always 0. Only the taker pays on each fill.
Why quadratic (not linear)?
The linear min(P, 1−P) curve (Polymarket’s default) is twice as
expensive at the top of the book. For tail markets the linear curve
still charges meaningful fees; the quadratic curve naturally eases to
zero.
At feeRateBps = 400 (WC period):
| P | Linear peak | Quadratic (PS) | Ratio |
|---|
| 0.05 | 0.20% | 0.019% | 10.5× lower |
| 0.25 | 1.00% | 0.75% | 1.33× lower |
| 0.5 | 2.00% | 1.00% | 2× lower |
| 0.75 | 1.00% | 0.75% | 1.33× lower |
| 0.95 | 0.20% | 0.019% | 10.5× lower |
Period-specific coefficients
The platform operates under a three-period fee schedule
(PS-MM Rebate Model v7). The effective feeRateBps = k × 10_000:
| Period | Peak at P=0.5 | k | feeRateBps |
|---|
| Pre-WC | 0.35% | 0.014 | 140 |
| WC | 1.00% | 0.040 | 400 |
| Post-WC | 0.50% | 0.020 | 200 |
Read the currently-active period + fee via
GET /api/platform/fee-config (public endpoint).
Charging direction
- SELL: fee deducted from collateral proceeds.
fee_collateral = k × P × (1−P) × outcomeTokens.
- BUY: fee deducted in outcome tokens.
fee_tokens = k × (1−P) × outcomeTokens.
Both give the same USD fee for the same fill — just denominated in
the asset the user is receiving.
How fees appear in the response
Every Trade object carries:
{
"id": "...",
"price": "0.52",
"quantity": "100",
"fee": "0.2496",
"side": "buy"
}
For per-fill audit, use GET /api/me/fees.
On-chain equivalence
The off-chain fee matches the on-chain fee charged by CTFExchange
at settlement time, modulo integer-division rounding (≤ 1 atomic USDC
unit). Same feeRateBps value signs into the EIP-712 Order.
Fee cap
Contract enforces feeRateBps ≤ MAX_FEE_RATE_BIPS (1000). Peak-at-0.5
at the cap is 2.5%. Raising requires Board approval and redeploy.
Examples
// BUY 100 YES at P=0.52, WC period (k=0.04)
const price = 0.52;
const quantity = 100;
const k = 0.04;
const feeTokens = k * (1 - price) * quantity; // 1.92 YES tokens
const feeUsd = k * price * (1 - price) * quantity; // 1.00 USDC equiv
// SELL 100 YES at P=0.80, Pre-WC period (k=0.014)
const feeUsd = 0.014 * 0.80 * 0.20 * 100; // 0.224 USDC
Rebates
The schedule covers fees. Mirror-image rebates to market
makers are a separate system (PS-MM Rebate Model v7 §2). Rebates
settle monthly. Contact
partners@predictstreet.com.