Orders
Every order type, and when it's the right one
Most of an exchange’s order ticket is decoration. Four of the boxes on this one decide whether you pay the maker rate or the taker rate, whether your stop fires on the number you were watching, and whether your order is accepted at all.
Short answer
Polymarket Perps has two order types — limit and market — each carrying one of three time-in-force values: GTC rests on the book, IOC fills what it can and cancels the rest, FOK fills everything or nothing. Two flags modify them: post-only, a GTC order that is rejected rather than repriced if it would cross the book, and reduce-only, which cannot increase or flip a position.
Take-profit and stop-loss orders attach to an entry or to an open position, and they trigger on mark price rather than the last trade. Self-trade prevention is always on and cannot be switched off.
Three behaviours are not obvious from the names: the rejection semantics of post-only, which price the brackets actually watch, and the pre-trade margin check that sizes your account at its worst case rather than its current one. That last one is behind most “insufficient margin” rejections that look wrong.
Every Polymarket Perps order type, in one table
Everything Polymarket documents on the order side, grouped by what it is.source
| Order | Kind | What it does | When it is the right one |
|---|---|---|---|
| Limit | Type | Trades at your price or better, and rests on the book if it cannot. | The trade needs an explicit price. |
| Market | Type | Takes whatever liquidity is resting, immediately. | Getting filled matters more than the price you get. |
| GTC | Time in force | Good-til-canceled: rests on the book until it fills or you cancel it. | You are willing to wait at your price. |
| IOC | Time in force | Immediate-or-cancel: fills what it can right now, cancels the rest. | You want a partial fill rather than a resting order. |
| FOK | Time in force | Fill-or-kill: the whole quantity fills immediately or nothing does. | A partial fill would be worse than no fill. |
| Post-only | Flag | A GTC order that is rejected if it would cross the book and take liquidity. | You want the maker rate and will not pay taker by accident. |
| Reduce-only | Flag | Cannot increase exposure — only close or shrink a position. | Closing, and you refuse to accidentally flip to the other side. |
A market order is a limit order with the price argument removed and your consent to whatever the book is charging. On a thin market that consent is expensive. A limit order with an IOC time-in-force takes liquidity immediately, exactly like a market order, but stops at a price you named.
GTC vs IOC vs FOK: what happens to the unfilled part
Time-in-force answers one question: what happens to the part of your order that cannot fill right now. There are three answers.source
- GTC — the remainder rests on the book until it fills or you cancel it. The only time-in-force that leaves an order sitting there, and the only one that can earn you the maker rate.
- IOC — fill what is available this instant, cancel the rest. Nothing rests, so a partial fill is a real outcome. This is what the exchange itself uses when it liquidates you.source
- FOK — the entire quantity fills immediately or the order is killed. Use it when a half-filled position is worse than no position: a hedge leg, an arbitrage leg.
GTC is the only route to the maker side of the schedule, and at the bottom tier the gap between the two is 0.0275% of notional per fill — small in isolation, and the entire margin of a strategy that trades often.source The fee page has the full ladder and a calculator.
Post-only and reduce-only
Post-only: rejected, not repriced
Post-only is a GTC order with one extra rule attached: if it would cross the book and take liquidity, it is rejected. Not slid to the back of the queue, not shaved by a tick, not filled as a taker with an apology. Rejected.source
A repricing exchange leaves you guessing about which side of the fee schedule you landed on; a rejecting one gives you a guarantee. If a post-only order exists, it is a maker order. If it does not exist, you were never charged the taker rate for finding out.
Post-only is the only way to be certain you paid the maker rate rather than discovering it afterwards on a fill report.
Reduce-only: the flag that cannot flip you
Reduce-only orders cannot increase exposure. They close or shrink a position and nothing else, and an order that would increase exposure, flip the position through zero, or exceed the size still left to close is rejected.source
You are long 100, you fat-finger a sell of 200 to close, and without the flag you are now short 100 in a market you had decided you were finished with. With reduce-only set, the same mistake closes your 100 and stops. Every close you place should carry it.
Take-profit and stop-loss, and the price they watch
You can attach up to one take-profit and one stop-loss to an entry order, and separately hold at most one take-profit and one stop-loss against an existing position per instrument. Triggers attached to an entry stay dormant until that entry fills in full — if the entry is cancelled, rejected or only partially filled, the triggers go with it.source
Triggers watch the mark price, not the last traded price. Mark is the median of three independently built candidates rather than the most recent print, so it is hard to shove.source
| Position | Take-profit fires when | Stop-loss fires when |
|---|---|---|
| Long | Mark rises to the trigger | Mark falls to the trigger |
| Short | Mark falls to the trigger | Mark rises to the trigger |
Two consequences fall out of triggering on mark. A single thin print through your stop level does not necessarily fire it, because one trade moves the median far less than it moves the chart. And a stop can fire when the visible last price never reached your number, because mark is built partly from external feeds that do not care what the local book is doing. The mechanism behind mark is here.
When a trigger does fire, it submits a closing order, and the close type is where brackets and positions differ. A market close is available for bracket orders and positions — it executes immediately against whatever liquidity is there. A limit close is available for bracket orders only, and it places a limit order that can sit unfilled. A limit stop-loss that never fills is not a stop-loss; it is a preference.source
Self-trade prevention you cannot switch off
If an incoming order of yours would match a resting order of yours, Polymarket does not let the trade happen. That much is standard. What is not standard is that there is no choice about how it is resolved.source
The defence is boring: cancel before you cross. If you have quotes resting and you need to take liquidity in the same instrument, pull your side first rather than discovering which of your orders the matching engine decided to delete.
Why a Polymarket Perps order gets rejected when your balance looks fine
Before any order is accepted, Polymarket works out what your position would be and checks you can afford the initial margin. It does not size that check on the position you have. It sizes it on the worst case: every resting order on the heavier side treated as though it filled.source
WorstCaseSize = max(|Position + OpenBuys|, |Position − OpenSells|)Your resting buys and your resting sells cannot all fill — they point in opposite directions. The check does not care. It takes the heavier side and margins you as if it did.
A worked example
Take NVIDIA, a 10x market, marking at $200. You are long 100 units, and you have two orders resting: a bid for 50 more down at a level you like, and a limit sell for 80 up at your target.
| What you are looking at | Size | Notional | Initial margin at 10x |
|---|---|---|---|
| Position as it stands | 100 | $20,000 | $2,000 |
| Worst case the check uses | 150 | $30,000 | $3,000 |
WorstCaseSize = max(|100 + 50|, |100 − 80|)
= max(150, 20)
= 150 units
Notional = 150 × $200 = $30,000
IM required = $30,000 / 10 = $3,000Now you have $2,400 of equity. Against the position you can see, that is comfortable — it needs $2,000 and you have $400 spare. Against the number the exchange is actually using it is $600 short, and your next order is rejected for insufficient margin while your balance sits there looking perfectly healthy.
The fix is almost always the same: cancel the resting buy. Worst-case size drops to 100 units, required initial margin drops to $2,000, and the order goes through. Nothing about your position changed — only the orders the check was pricing in.
Per-market limits, and the deadman switch
Every instrument publishes its own order limits, and all 39 listed markets currently carry the same shape of them.source
- 200 open orders per instrument. Every one of them is a candidate for the worst-case margin calculation.
- $10 minimum notional per order, identical across the whole catalogue. Below that the order is not accepted at all.
- Separate ceilings for market and limit orders. $1M or $500K on a single market order, and $5M or $2.5M on a single limit order — the higher figure in each pair applies to the 20x markets.
On every listed market the limit ceiling is exactly 5× the market-order ceiling. The exchange will let you work 5 times as much size at a price you named as it will let you fire into the book blind. The per-market table has every ceiling and leverage cap.
Auto-cancel, for anybody running code
There is a deadman switch. You arm it with a future deadline and the exchange cancels every open order on the account when that deadline passes; to stay protected, your process re-arms it on an interval shorter than the deadline. It fires once and then clears its own schedule, re-arming requires a deadline at least five seconds out, and there is a cap on how many times it can trigger per UTC day.source
It is the opposite of a heartbeat: if your bot dies, it stops re-arming, the deadline expires, and your quotes are pulled without you. Silence is the signal. Nobody trading by hand needs this; nobody running a market maker should be without it.
If you are still deciding which of these boxes to tick on an actual first order, the walkthrough covers the whole sequence, and the overview page has the rest of the mechanics.
Questions people ask
What order types does Polymarket Perps support?
Two order types — limit and market — combined with one of three time-in-force values: GTC, IOC or FOK. On top of that sit two flags, post-only and reduce-only, and conditional take-profit and stop-loss exits that can be attached to an entry order or to an existing position.
What is the difference between GTC, IOC and FOK on Polymarket?
GTC rests on the book until it fills or you cancel it. IOC fills whatever it can immediately and cancels the rest, so it never rests. FOK fills the entire quantity immediately or nothing at all. GTC is the only one that leaves an order on the book, which is also the only way to earn the maker fee rate.
Does Polymarket Perps have post-only orders?
Yes. Post-only is a GTC order that is rejected outright if it would cross the book and take liquidity. It is not repriced and it is not converted to a taker fill — it simply does not exist. That rejection is what makes it the only way to guarantee you pay the maker rate rather than the taker rate.
Do Polymarket stop-losses trigger on mark price or last traded price?
Mark price. Take-profit and stop-loss triggers watch the mark price, not the last trade printed on the chart. Mark is the median of three independently built candidates, so a single thin print through your stop level does not necessarily fire it, and a stop can fire when the visible last price never reached it.
Why was my Polymarket Perps order rejected when I had enough balance?
The pre-trade margin check does not size your position as it stands. It sizes it at the worst case: max(|Position + OpenBuys|, |Position − OpenSells|), treating every resting order on the heavier side as though it filled. Resting buys you have forgotten about inflate the notional the check has to margin, and the usual fix is to cancel them.
Can you turn off self-trade prevention on Polymarket Perps?
No. Self-trade prevention is always on, runs in CancelMaker mode, and is not an API setting you can change. If your incoming taker order would match your own resting order, the resting maker order is cancelled and the taker keeps matching against everyone else on the book.
How many open orders can you have on a Polymarket Perps market?
200 per instrument, according to the max_order_count field the instruments endpoint publishes for every listed market. Each market also enforces a $10 minimum order notional and separate maximum notionals for market orders and limit orders.