Why Was My Polymarket Perps Order Rejected When My Balance Looks Fine?
Your account shows $800 in equity, your position needs $300 in margin — and the exchange rejects your new order anyway. Nothing is broken. Polymarket Perps checks pre-trade margin against the worst-case position size: your existing position plus ALL resting orders on each side, not just what you hold now. The fix is usually cancelling one side of a stale order pair.
How the worst-case margin check works
The engine computes the largest position you could end up with if every resting order filled against you:
WorstCaseSize = max(|Position + OpenBuys|, |Position − OpenSells|)
If your equity is below the initial-margin requirement for that worst case, the order is rejected — even though your current equity looks comfortable. This is a defensive design: it prevents you from stacking resting orders that would individually pass but collectively over-leverage the account the moment two of them fill.
Worked example
Suppose you hold a 3-contract long and have two resting buy orders for 2 contracts each:
- Current position: +3 → margin checked against 3 contracts
- Worst case: max(|3 + 4|, |3 − 0|) = 7 contracts
- If initial margin is $80 per contract, you need $560 of equity behind the worst case — not the $240 your live position implies.
With $500 equity, your next order is rejected despite the position itself being well-collateralized.
Why the engine does this
Without worst-case checking, four resting orders that each look affordable could all fill in a fast market and blow past your margin simultaneously. The worst-case rule guarantees that no combination of fills can leave the account under-collateralized at fill time. It’s the same philosophy behind portfolio-level margin elsewhere: the risk is the sum, not the parts.
How to fix a rejection
- List your resting orders — both sides. The most common culprit is a forgotten buy left from an earlier plan, sitting opposite a new order.
- Cancel the stale side. WorstCaseSize drops immediately and the new order passes.
- Reduce order size if both sides are intentional — the max() formula shrinks with the smaller legs.
- Add equity if the worst case is genuinely your plan (e.g. scaling into a position with laddered buys) — see margin modes for how cross margin changes the calculation.
Note the related trap: self-trade prevention runs in CancelMaker mode by default, so if your own resting order would fill your own taker order, the maker is cancelled and the taker continues — you can’t “fill yourself” to dodge the worst-case check either. See order types and time-in-force for how GTC, IOC, and FOK interact with resting orders.
FAQ
Why was my Polymarket Perps order rejected with sufficient balance?
The pre-trade margin check uses the worst-case position size — your
position plus all resting orders on each side (max(|Position + OpenBuys|, |Position − OpenSells|)) — not your current position alone. Cancel stale
resting orders or add equity to pass.
How do I see my worst-case margin requirement? Compute it from your open orders: take the larger of (position + all open buys) and (position − all open sells) in absolute value, multiply by the instrument’s initial-margin tier for that size. If your equity is below that number, orders get rejected.
Does cancelling a resting order help immediately? Yes — the worst-case calculation runs at order placement, so removing any resting order shrinks the max() and a previously rejected order can pass on retry.
Can I place orders on both sides of the same perp? Yes, but both sides count toward the worst case, so the margin requirement reflects whichever side could fill you into the larger position. You’re effectively posting margin for both scenarios.
Educational content, not financial advice. Not affiliated with Polymarket. Last updated October 2026.