Polymarket Tick Size (2026): Minimum Ticks, Changes and the API

The Short Answer
Every Polymarket market has a minimum tick size, the price increment every limit order must sit on, and it is one of 0.1, 0.01, 0.005, 0.0025, 0.001 or 0.0001. Read the active value from the market before you price an order. It is orderPriceMinTickSize in the Gamma API, market.trading.minimumTickSize in the TypeScript SDK, or GET /tick-size?token_id= on the CLOB. The tick can change while a market trades, and Polymarket announces each change as a tick_size_change event on the market WebSocket. An order priced off the grid is rejected with an error saying it "breaks minimum tick size rule".
Key Takeaways
- Polymarket uses six tick sizes, from 10 cents down to a hundredth of a cent, and 0.0025 is reserved for some World Cup markets.
- Read the tick from the market each time, because Polymarket can change it while the market is live.
- The CLOB's
GET /tick-sizereturns the current value for one token, limited to 200 requests per 10 seconds. - Subscribe to the market WebSocket to receive
tick_size_changeevents instead of polling. - Round buys down and sells up onto the grid, and check the minimum order size too, or the CLOB rejects the order.
What tick sizes does Polymarket use?
| Minimum price increment | Step size | Example prices |
|---|---|---|
0.1 | 10 cents | 0.1, 0.5, 0.9 |
0.01 | 1 cent | 0.01, 0.50, 0.99 |
0.005 | Half a cent | 0.005, 0.500, 0.995 |
0.0025 | A quarter of a cent | 0.0025, 0.5000, 0.9975 |
0.001 | A tenth of a cent | 0.001, 0.500, 0.999 |
0.0001 | A hundredth of a cent | 0.0001, 0.5000, 0.9999 |
An order price must be a whole multiple of the market's active increment. Polymarket's documentation notes that the 0.0025 increment applies only to World Cup to-advance, moneyline, spread and total markets, and tells integrators to read the active value from the market rather than assume one.
How do you get a market's tick size from the API?
There are three places to read it, and they agree:
| Source | Field |
|---|---|
| Gamma API market | orderPriceMinTickSize, next to orderMinSize |
TypeScript SDK (@polymarket/client) | market.trading.minimumTickSize and minimumOrderSize |
Python SDK (polymarket-client) | market.trading.minimum_tick_size and minimum_order_size |
| CLOB API | GET /tick-size?token_id=, which returns minimum_tick_size |
This reads both the Gamma value and the CLOB value for a market, with Node 18 or newer and no keys:
const slug = 'your-market-slug';
const [market] = await (await fetch(`https://gamma-api.polymarket.com/markets?slug=${slug}`)).json();
const [yesToken] = JSON.parse(market.clobTokenIds);
const { minimum_tick_size: tick } = await (await fetch(`https://clob.polymarket.com/tick-size?token_id=${yesToken}`)).json();
console.log({ gammaTick: market.orderPriceMinTickSize, clobTick: tick, minOrderSize: market.orderMinSize });
The CLOB endpoint is the one to trust right before you sign an order, because it answers for one token at that moment. It is rate limited to 200 requests per 10 seconds, so cache the value and refresh it on a tick_size_change event rather than calling it for every order.
Why does Polymarket's tick size change?
Because the right increment depends on where a market trades. A market sitting at 99 cents has little room left on a one-cent grid, so a finer tick lets traders quote between 99 and 100 cents. Polymarket can change a market's tick size while it is live. When it does, every resting order and every price you compute has to follow the new grid.
Short crypto markets show both settings. In our checks, a 5-minute Bitcoin market trading near even odds quoted in one-cent steps, while Bitcoin markets trading near the extremes quoted in tenths of a cent.
How do you catch tick size changes?
Subscribe to the market channel of Polymarket's WebSocket. When a market's increment changes, it sends a tick_size_change event with the old and new values:
{
"topic": "market",
"type": "tick_size_change",
"payload": {
"market": "0x747dc809fb79e1b05be09c42d6179459a58de2ef3e40f02484a4e1260f741f75",
"tokenId": "107505882767731489358349912513945399560393482969656700824895970500493757150417",
"oldTickSize": "0.01",
"newTickSize": "0.001",
"timestamp": "1782753357257"
}
}
Update your cached tick for that token as soon as the event arrives, then re-price anything you were about to send. Streaming setup is covered in the Polymarket WebSocket API guide.
Why was my Polymarket order rejected for tick size?
Before matching, the CLOB checks that an order's price meets the market's minimum tick size, and rejects it if not. The error looks like this:
order 0xabc... is invalid. Price (100) breaks minimum tick size rule: 0.1
Rounding onto the grid fixes it. Round a buy down and a sell up, so the rounded price never pays more or accepts less than you intended:
function toTick(price, tick, side) {
const steps = side === 'buy' ? Math.floor(price / tick + 1e-9) : Math.ceil(price / tick - 1e-9);
const decimals = String(tick).split('.')[1]?.length ?? 0;
return Number((steps * tick).toFixed(decimals));
}
toTick(0.5372, 0.01, 'buy'); // 0.53
toTick(0.5372, 0.001, 'sell'); // 0.538
The tiny epsilon stops floating-point noise from pushing a price that is already on the grid one step away, and toFixed trims results like 0.53000000001. Also check the order against the market's minimum order size, orderMinSize in Gamma, because the CLOB rejects orders below it too.
How do you handle tick sizes across venues?
Every venue has its own price grid, and Kalshi, Polymarket and Polymarket US do not share one. The Predictefy API reads each Polymarket token's current tick size from the CLOB when it builds an order, along with its fee details and negative risk flag, and stores the increments Polymarket US publishes for each market in its catalog. That way one integration handles each venue's grid across 15+ venues.
Frequently Asked Questions
What is Polymarket's minimum tick size?
It depends on the market. Polymarket uses increments of 0.1, 0.01, 0.005, 0.0025, 0.001 and 0.0001, with 0.0025 reserved for certain World Cup markets. Read the active value from the market, because it can change while the market trades.
How do I get a market's tick size from the Polymarket API?
Call GET /tick-size?token_id= on the CLOB, which returns minimum_tick_size for one token, or read orderPriceMinTickSize from the market in the Gamma API. The official SDKs expose it as market.trading.minimumTickSize in TypeScript and minimum_tick_size in Python.
Why does Polymarket's tick size change?
A finer increment lets traders quote between prices when a market trades near 0 or 1, where a one-cent grid leaves little room. Polymarket can change a market's tick size while it is live and announces each change with a tick_size_change event on the market WebSocket.
What does "breaks minimum tick size rule" mean?
Your order's price is not a whole multiple of the market's current tick size, so the CLOB rejected it. Fetch the current tick, round buys down and sells up onto it, and submit the order again.
What is the minimum order size on Polymarket?
Each market sets its own, published as orderMinSize in the Gamma API and minimumOrderSize in the TypeScript SDK. Many markets use 5, and the CLOB rejects orders below the market's minimum.