All orders on Polymarket are expressed as limit orders. Market orders are supported by submitting a limit order with a marketable price — your order executes immediately at the best available price on the book.The underlying order primitive is structured, hashed, and signed using the EIP-712 standard, then executed onchain via the Exchange contract. Preparing orders manually is involved, so we recommend using the open-source TypeScript or Python SDK clients, which handle signing and submission for you.
If you prefer to use the REST API directly, you’ll need to manage order
signing yourself. See Authentication for details on
constructing the required headers.
Active until a specified expiration time (UTC seconds timestamp), unless filled or cancelled first
Auto-expire orders before known events
FOK (Fill-Or-Kill)
Must be filled immediately and entirely, or the whole order is cancelled
All-or-nothing execution
FAK (Fill-And-Kill)
Fills as many shares as available immediately, then cancels any unfilled remainder
Partial immediate execution
FOK and FAK are market order types — they execute against resting liquidity immediately.
BUY: specify the dollar amount you want to spend
SELL: specify the number of shares you want to sell
GTC and GTD are limit order types — they rest on the book at your specified price.
GTD expiration: There is a security threshold of one minute. If you need
the order to expire in 90 seconds, the correct expiration value is now + 1 minute + 30 seconds.
Multi-outcome events (e.g., “Who will win the election?” with 3+ candidates) use a different exchange contract called the Neg Risk CTF Exchange. When placing orders on these markets, you must pass negRisk: true in the order options.
Orders are continually monitored to make sure they remain valid. This includes tracking:
Underlying balances
Allowances
Onchain order cancellations
Any maker caught intentionally abusing these checks will be blacklisted.
There are also limits on order placement per market. You can only place orders that sum to less than or equal to your available balance for each market. For example, if you have 500 USDC.e in your funding wallet, you can place one order to buy 1000 YES at $0.50 — but any additional buy orders in that market will be rejected since your entire balance is reserved for the first order.The max size you can place for an order is:maxOrderSize=underlyingAssetBalance−∑(orderSize−orderFillAmount)
All query endpoints require L2 authentication. Builder-authenticated clients can also query orders attributed to their builder account using the same methods.
The heartbeat endpoint maintains session liveness for order safety. If a valid heartbeat is not received within 10 seconds (with up to a 5-second buffer), all of your open orders will be cancelled.
On each request, include the most recent heartbeat_id you received. For your first request, use an empty string.
If you send an invalid or expired heartbeat_id, the server responds with a 400 Bad Request and provides the correct heartbeat_id in the response. Update your client and retry.
Polymarket’s Exchange contract has been audited by Chainsecurity (View Audit).The operator’s privileges are limited to order matching and ensuring correct ordering. Operators cannot set prices or execute unauthorized trades. Users can cancel orders onchain independently if trust issues arise.