Polymarket order types: GTC, GTD, FOK, FAK, post-only, and why the fee should pick one

Polymarket has four order types and one flag. We pulled the order settings of all 17,905 markets that traded in the last 24 hours: every one has a minimum size of 5, the tick follows the price, a quarter of them hold marketable orders for a second, and in the 200 busiest books priced 10–90¢ the taker fee is bigger than half the spread 73% of the time. What each type does, the rules that get orders rejected, and which type each kind of bot should use.

By the POLBOTS editorPublished Nov 1, 202611 min read
On this page8 sections

The short answer

Polymarket's order book takes four order types: two that rest and two that don't. One flag, post-only, keeps a resting order from ever taking. We pulled the order settings of every open market on November 1, 2026 to see the rules a bot's orders run into. For the API around them, the CLOB, Gamma and the SDKs, start with the Polymarket API explained.

  • Two types cover nearly every bot. A resting post-only GTC or GTD to make, a FOK or FAK with a worst price to take.
  • Minimum size is 5 everywhere. All 217,635 open markets that report a minimum say 5.
  • The tick follows the price. 93% of markets with a best bid under 4¢ trade in 0.001 steps, against 18% of those priced in between. A bot that caches the tick gets rejected when it changes.
  • A quarter of busy markets make you wait. 4,242 sports markets hold every marketable order for 1 second before matching.
  • In the busiest books the fee costs more than the spread. In the 200 busiest books priced 10–90¢, the spread is one cent and the taker fee is bigger than half of it 73% of the time. Taking or resting matters more there than how tight the book is.

The four types and the flag

TypeRests on the book?What happensPolymarket calls it
GTC, good till cancelledYesRests until it fills or you cancel itLimit
GTD, good till dateYes, until the expiryRests until it fills or expiresLimit
FOK, fill or killNoFills the whole size now, or nothingMarket
FAK, fill and killNoFills what it can now, cancels the restMarket
Post-only (flag on GTC or GTD)Only restsRejected if it would match on arrival—

The docs describe market orders as "simply limit orders with a price set to execute immediately". A FOK or FAK still carries a price. For a buy it is the most you will pay, and the order walks the book up to it and no further. That worst price is your slippage limit, so set it on purpose. The SDKs' market-order helpers take a dollar amount for buys and a number of shares for sells. Taker fees are added on top of a market buy, so a $100 buy costs more than $100. Use maxSpend if you need to cap the total.

If you leave the type out, the SDKs send FAK. Polymarket doesn't document any other type: no IOC by that name (FAK is the same thing), no stop orders and no trailing orders. A bot that wants a stop has to watch the price and send the order itself, which is one of the pieces our build guide walks through.

GTC

The default resting order. It stays on the book through anything short of a fill, a cancel, the market closing, or your heartbeat lapsing (more on that below). A partially filled GTC keeps its remainder on the book. When the market resolves, the remainder is cancelled.

GTD

A GTC with an expiry, and two rules that catch people:

  • It expires one minute before the time you set. Polymarket calls this a "security threshold".
  • The time you set must be at least 3 minutes out. So the shortest a GTD can actually live is about two minutes.

To make a GTD live N seconds, set the expiry to now + 60 + N, with N at least 120. GTD is the safe way to quote around a known event, such as a game start, a data release or a market's close. The quote removes itself even if your bot has died.

FOK

All or nothing, right now. If the book can't fill the whole size at your price or better, nothing fills. The order is rejected with "order couldn't be fully filled. FOK orders are fully filled or killed." Use it when a partial fill is worse than no fill. The classic case is one leg of an arbitrage, where half a position is unhedged risk.

FAK

Takes what is there at your price or better and cancels the rest. If nothing matches, it is rejected with "no orders found to match with FAK order". Use it when some fill beats none: following news, exiting a position, or copying a trade where 80% of the size is fine.

Post-only

Set postOnly: true on a GTC or GTD. If the order would match the moment it arrives, the exchange rejects it rather than letting it take: "invalid post-only order: order crosses book". On Polymarket that is the difference between earning and paying:

  • Makers pay no fee. When a resting order fills, the maker also earns a maker rebate: a share of the taker's fee, 20% in crypto, 15% in sports and 25% in most other categories.
  • Takers pay shares × rate × p × (1 − p), where p is the price. The fee peaks at 50¢. 100 crypto shares at 50¢ pay $1.75 (rate 0.07), 100 sports shares $1.25 (rate 0.05).

Without post-only, a quote that lands while the price is moving can cross the book and turn your market maker into a taker. It then pays the fee instead of earning the rebate.

The rules that get orders rejected

We pulled every open market's settings to see what an order actually has to fit.

Tick size: it follows the price

A price must be a multiple of the market's current tick, or it is rejected with "Price (…) breaks minimum tick size rule". The docs list six possible ticks. In practice two do all the work:

TickOpen marketsTraded in 24hShare of 24h volume
0.01178,230 (81.9%)9,509 (53.1%)44.0%
0.00139,404 (18.1%)8,396 (46.9%)56.0%

The tick follows the price:

Best bidTraded marketsOn 0.001On 0.01
Under 4¢5,02092.5%7.5%
4¢ to 96¢10,62817.7%82.3%
Over 96¢418100%0%

This fits a market getting a finer tick as its price nears 0 or 1, though Polymarket doesn't document the threshold. For a bot, the point is that the tick can change while a market is open. A bot that reads the tick once at startup works until a price drifts to the edge. After that, every order it sends is rejected. Subscribe to the tick_size_change event on the market WebSocket and re-round. The SDKs' order methods look the tick up for you (our Python walkthrough shows where); raw requests and hand-rounded prices are where this bites.

Minimum size: 5, with an unclear unit

Every one of the 217,635 open markets that reports a minimum reports 5 (31 report none). The error is "Size (…) lower than the minimum: 5". The docs disagree about what the 5 counts. The market-data page calls it "minimum USDC notional", while the order page says the minimum "number of shares". Read it from the market, and if your bot trades cheap outcomes, test a small order before you rely on either reading. At 2¢, 5 shares is 10 cents and $5 is 250 shares.

The minimum matters most to copy-trading bots, which scale down other people's trades. Whalidate, for example, skips any copy under $5 so that every position stays large enough to sell.

Matching delays: one second on a quarter of busy markets

When you place an order, the response has a status:

StatusMeaning
liveResting on the book
matchedMatched immediately
delayedMarketable, but the market holds it before matching
unmatchedWas delayed, found nothing to match when the delay ended, placement still succeeded

A delayed order shows zero filled and no trade ids. It can't be cancelled while it waits, and if checks fail when the delay ends, it is rejected. The docs describe two delays but give the length of only one. We measured both:

DelayTraded marketsShare of 24h volumeWhere
None13,663 (76.3%)86.1%—
1 second (seconds_delay)4,242 (23.7%)13.9%Sports: moneylines (1,182), totals (890), spreads (585), exact score, team totals, both teams to score
250 ms taker delay300 (1.7%)0.2%Mostly stock-price markets, such as "Will AAPL reach $400 in November?"

Every delayed sports market in our pull used exactly one second. That second is there so a bot watching the game feed can't pick off stale quotes the moment something happens. For a sports bot it changes three things. Taking costs a second of price risk. A FOK that would have filled can come back unmatched. And a resting quote is safer than it looks, because takers can't reach it instantly either. Our sports guide covers the rest.

Which order type each kind of bot should use

BotOrder typeWhy
Market makerGTC or GTD, post-onlyNever pays the fee, earns the rebate. GTD for quotes that must disappear before an event
ArbitrageFOK on every legA half-filled leg is an open position, not an arbitrage
Sniper / news botFAK with a worst priceTakes what is there before the price moves; the worst price caps slippage
Copy tradingFOK or FAK with a price capFOK keeps the copy's size; FAK keeps the copy's timing
ScalperPost-only entries, FAK exitsEarn the spread getting in, pay it only when getting out has to be now

The bots in our catalog that publish their order logic follow this pattern. PolyTraderBot enters arbitrage with fill-or-kill orders, shrinks and retries, then falls back to fill-and-kill. Pulse Market sends FOK or FAK market orders and has a limit mode with an open or dated expiry. poly-maker is an open-source market maker built on resting quotes.

Taker or maker: in the busy books, the fee decides

If a bot can either cross the spread now or rest and wait, the cost of crossing is half the spread plus the taker fee. Across books with both sides quoted, priced 10–90¢:

BooksMedian half-spreadMedian taker fee at the midFee bigger than half-spread
All two-sided, 10–90¢ (9,381)1.50¢0.87¢31.5%
200 busiest by 24h volume, 10–90¢0.50¢0.77¢73.0%

In the thin books the spread is the main cost, and a taker's problem is the spread. In the busy books the spread is already one tick: 1¢ wide, 0.5¢ from the mid. There the fee is the bigger cost, and only post-only avoids it. One-tick books are where the volume is: 23% of two-sided books are one tick wide, and they carry 66% of the day's volume. 37% of books are 10 ticks wide or more, and they carry 4.5%.

So in a busy politics market at 50¢, crossing costs 0.5¢ of spread plus a 1¢ fee. Resting earns the 0.5¢ and about a quarter of someone else's fee on top. Every share that could have rested and didn't costs a busy-market bot about two cents. Over a few hundred thousand shares a month, that is the whole edge for most strategies. The fee guide works through the totals, and the taker rebate tiers cut the fee by up to half at high volume.

The flip side is that resting orders get filled when someone else wants to trade, which is often when the price is about to move against you. That cost doesn't appear in any fee table. Our market-making guide is about little else.

Cancels, batches and the dead man's switch

  • Batches. POST /orders takes 1 to 15 signed orders. Each is accepted or rejected on its own.
  • Cancels. One order (DELETE /order), up to 3,000 by id (DELETE /orders), every order in a market or one outcome (DELETE /cancel-market-orders), or everything (DELETE /cancel-all). Cancels are still accepted when the exchange is in cancel-only mode. Cancelling a partially filled order removes only the unfilled rest.
  • Heartbeats. Post to /v1/heartbeats every 5 seconds. After 10 seconds without one, Polymarket cancels every open order on that API key, across all markets and processes. Once you send the first heartbeat, there is no way to turn it off. Polymarket calls the 10 seconds "the expiry threshold, not a guaranteed cancellation time", and a WebSocket ping does not count as a heartbeat. For a bot with resting orders, this is the cheapest insurance there is: if the bot crashes, its quotes go with it. Running a bot 24/7 covers the rest of that list.
  • Rate limits. Polymarket has moved order and cancel limits to per-signer token buckets: a standard account gets 40 orders and 80 cancels a second, with bursts of 60 and 120, and the limits rise with volume. The new limiter ran in warning mode from July 24, 2026. As of November 1 the docs still say Polymarket will announce when it is enforced, so treat the numbers as the limits you will be held to.

What the docs don't say

  • When the tick changes. Only that it can, and that orders on the old tick are rejected. The price bands above are what we observed.
  • How long the sports delay is. We measured one second on every delayed market.
  • What the minimum size counts. Shares on one page, USDC on another.
  • Self-trade prevention. Nothing is documented for the prediction-market book. If your bot quotes both sides from one account, assume it can trade with itself and filter for it.

Method

  • Markets. Every market on Polymarket's Gamma API that was active, open and accepting orders on November 1, 2026 (07:38 UTC): 217,635. Tick size, minimum size, neg-risk flag, fee schedule and best bid and ask come from Gamma.
  • Delays. For the 17,905 markets with any volume in the previous 24 hours, seconds_delay from the CLOB's /markets endpoint and the 250 ms taker-delay flag from /clob-markets, as the docs describe.
  • Spread and cost. Books with both a bid and an ask (16,066 of the traded markets). The spread in ticks is (ask − bid) ÷ tick. The fee is the market's taker rate × mid × (1 − mid), per share, before any rebate tier.
  • Rules. Polymarket's docs on placing orders, managing orders, the order lifecycle, market details, fees, error codes and trading rate limits, read on November 1, 2026. Polymarket can change any of it.
  • Script. scripts/order-rules.mjs in our repository does the pull, and --summary prints every table above. It is plain Node with no keys.

Frequently asked questions

What order types does Polymarket support?
Four. GTC (good till cancelled) and GTD (good till date) are limit orders that rest on the book. FOK (fill or kill) fills the whole order at once or not at all, and FAK (fill and kill) fills what it can at once and cancels the rest; those two are what Polymarket calls market orders. On top of GTC or GTD you can set post-only, which rejects the order instead of letting it take. The SDKs send FAK if you don't name a type.
What is the minimum order size on Polymarket?
5, on every one of the 217,635 open markets we pulled on November 1, 2026 that report one. The docs disagree on the unit: one page calls it shares, another USDC notional. An order under the minimum is rejected with a message that names the minimum, so read it from the market and size above it.
What tick sizes does Polymarket use?
The docs list 0.1, 0.01, 0.005, 0.0025, 0.001 and 0.0001, and a price has to be a multiple of the market's current tick. In practice two cover everything: 0.01 on 53% of the markets that traded in the last day and 0.001 on 47%. The tick follows the price. 93% of markets with a best bid under 4¢ use 0.001, as do all of those above 96¢, against 18% of markets in between. Polymarket sends a tick_size_change event on the market stream when it changes.
Why does my Polymarket order say delayed?
The market holds marketable orders before matching them. On 4,242 of the 17,905 markets that traded in the day to November 1, 2026, all of them sports markets such as moneylines, totals and spreads, the delay was 1 second. On 300 others, mostly stock-price markets, there is a 250 ms taker delay. A delayed order can't be cancelled while it waits, and it is matched or rejected when the delay ends.
Does a post-only order pay fees on Polymarket?
No. A post-only order can only rest, and resting orders never pay fees on Polymarket; only takers do. When it gets filled, the maker also earns a share of the taker's fee as a maker rebate: 20% in crypto, 15% in sports, 25% in most other categories. If a post-only order would match the moment it arrives, it is rejected with 'invalid post-only order: order crosses book'.