> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sesameterminal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Order rules

# Order rules

This page is for lookup. It lists what each order status means, what the app does when
Polymarket does not answer, how sports markets treat your orders, what each reject
message means, and the exact rules the server checks. To place, move, cancel or exit, see
[Trading](trading.md). Terms are explained in the [glossary](glossary.md).

## Order statuses

The **Status** column in **Orders** is blank for an open order that has not filled. The
bottom dock’s **Orders** tab writes `Open` instead, and adds the filled shares to
`Partial`.

| Status in Orders | Status in the dock | Meaning |
| - | - | - |
| (blank) | `Open` | On the book, nothing filled |
| `Partial` | `Partial 20/50` | Part filled. The rest is still open. In **Orders**, **Filled (sh)** shows how much, such as `20`, with `20/50 sh` in the tooltip |
| `Delayed 3s` | `Delayed 3s` | Held in an [in-play delay](#in-play-delay). It cannot be moved, and a cancel waits until the delay ends |
| `Cancelling in 3s` | `Delayed 3s` | You cancelled during a delay. The cancel goes out when the delay ends |
| `Cancelling` | `Open` or `Partial` | A cancel is on its way |
| `Unmatched` | | The order did not match during its in-play delay |

On the ladder, your orders show as chips in the **Bid** and **Ask** columns:

| Chip | Meaning |
| - | - |
| Solid, with the size | Open. A bar under the size shows how much filled |
| A ring and `3s` | In an in-play delay |
| Dashed border | On its way, or in a move |
| `?` with a dashed border | No answer yet. See [Orders being checked](#orders-being-checked) |
| `!` with a red border | Rejected. The toast says why |
| A tick | Filled |
| Struck through and grey | A cancel is on its way |
| Grey | Order updates are paused, because the account feed is disconnected |

**Fills** show how Polymarket settles each fill on chain: `Matched`, then `Mined`, then
`Confirmed`. `Retrying` means that the settlement is tried again. `Failed` means that the
fill did not go through, and no shares changed hands.

## Orders being checked

Sometimes Polymarket does not answer in time, and the app cannot know if the order reached
the book. The app never sends the order again. It asks Polymarket what happened.

While the app checks:

* The chip shows `?` with a dashed border.
* A toast reads `Checking order · no response`. After 30 seconds it reads
  `Checking order · no response after 30s`, with the order and
  `looked up every 60s, never re-sent` under it.
* The status indicator in the top bar reads `Checking 1`.

The check ends with one of these toasts:

| Toast | Meaning |
| - | - |
| `Order placed` | The order is on the book |
| `Order filled` | The order filled in full |
| `Partly filled · 297/3,448 sh` | Part of the order filled: filled shares over the order’s size |
| `Order not placed · never reached the venue` | Polymarket never received it. Nothing rests |
| `Rejected · …` | Polymarket refused it. See [Reject messages](#reject-messages) |

WARNING: Do not click the same price again while the app checks an order. A new click is
a new order, so you can get two orders.

## Sports markets

### In-play delay

On many live sports markets, Polymarket holds an order that would fill at once for a few
seconds before it matches it. You see the delay before you click: `3s delay` under the
game clock on the board (only while the game is live), and on the ladder’s status line.
The market’s details list it as **In-play delay**.

| During the delay | What happens |
| - | - |
| The order | Reads `Delayed 3s` in **Orders**, counting down. On the ladder, its chip shows a ring and `3s` |
| Move | Not possible. The `−` and `+` buttons are greyed with `In delay window`. The `[` and `]` keys show `Move failed · order is in a sports delay window` |
| Cancel | The cancel waits and goes out when the delay ends. This includes **Cancel all**. The order reads `Cancelling in 3s`, then `Cancelling` |
| The cancel toast | Counts the cancels that wait apart from the others: `Cancelled 5 orders · 2 in delay window` |

When the delay ends, the order can fill before the cancel arrives.

### Game start

Polymarket cancels the resting orders of many sports markets when the game starts. The
market’s details show this as **At game start**: `Resting orders are cancelled`. The app
warns you before the start and offers to place the orders again after it.

| When | Where | What you see |
| - | - | - |
| Before the start, while you have resting orders in the game | Board, desktop, under the game clock | A `Wipe` chip. Hover it for `Starts in 8:04 · resting orders cancel at start` |
| The same | Board, phone, beside the game clock | `Orders cancel at start` |
| The same | Ladder status line | `Starts in 8:04 · resting orders cancel at start` |
| At most 30 seconds after the start | Notification | `Orders cancelled at start`, such as `3 orders · Lakers v Celtics` |
| For 5 minutes after the notification | Board, desktop, under the game clock | **Re-post 3** |
| The same | Board, phone, in the game’s header row | **Re-post 3** |
| The same | Ladder status line | `3 orders cancelled at start`, **Re-post** and an X (**Dismiss**) |

The warnings before the start are muted until the last 10 minutes. Then they change to the
warning colour.

**What is listed.** Only the orders that Polymarket cancelled at the start, and only the
part of each that did not fill. The list does not include an order that filled, that you
cancelled, that expired or that stayed open. The notification goes when every order that
was open at the start ends, or 30 seconds after the start. If no order was open at
the start, it goes after the full 30 seconds.

**Re-post** places each listed order again: the same outcome, side and price, for the part
that did not fill. It needs **Armed**. Each order goes through every check again. Thus an
order that is now outside the price band is rejected with its own toast. A rejected
re-post is not offered again. The X removes the offer and places nothing. After 5 minutes,
the offer goes.

Re-post and **Dismiss** apply to all your devices and tabs. When you re-post or dismiss an
order on one device, no other device offers it again. If you press **Re-post** two times,
or on two devices at the same time, each order is placed one time only.

### Start times

Every view shows the start of a game in the same way. Hover it for the exact local time.

| Time to the start | Shown as |
| - | - |
| The last 10 minutes | `in 1:41`, which counts down each second |
| Less than 24 hours | `in 12m`, `in 3h` (hours round down) |
| 24 hours or more | `3 Oct 14:47` |

### Game clock and market names

A live game shows its period and clock, such as `Q3 4:12`, the same in every view. The
period is written for the sport:

| Sport | Period |
| - | - |
| Basketball, American football | `Q1` to `Q4` |
| Ice hockey | `P1` to `P3` |
| Football (soccer) | `1H`, `2H`, and a clock such as `67'` |
| Baseball | `Inn 7` |
| Tennis, volleyball | `Set 2` |
| Esports | `Map 3` |

Other periods, such as `HT`, `OT` or `End 8th`, show as Polymarket sends them. A game that
is over shows `Final`.

Titles that the app writes, in notifications and alerts, name a game with `v`:
`Lakers v Celtics`. Market and event titles are Polymarket’s own. In the market view, the
app writes market types in full, such as `First half moneyline` or `Q1 spread`.

## Reject messages

A rejected order shows a red toast. The first line names what failed. The second line
names the order, such as `Boston Celtics · Buy 3¢ · $1,000.00`. On the ladder, the
order’s chip shows `!`. The **Rejected** tab in **Orders** lists the rejects of this
session, with the reason and its source: `risk` (the app’s checks) or `venue`
(Polymarket).

The app never sends a rejected order again. When Polymarket names a wait, the message
ends with it, such as `rate limited (429), retry after 2s`. Wait at least that long before
you click again.

### How the toast starts

| Toast starts with | What it means |
| - | - |
| `Rejected ·` | The app’s checks or Polymarket refused the order. Nothing rests on the book |
| `Not sent ·` | On the ladder, the app stopped the click before it sent anything, such as `Not sent · Below minimum size (5 sh; this is 2.5 sh)`: the stake buys too few shares at that price. On the board, the price button shows the same reason in its tooltip and a click does nothing |
| `Not placed ·` | The app’s server did not take the request, such as `Not placed · venue unavailable` or `Not placed · live data not loaded yet`. Nothing was sent to Polymarket |
| `Exit not sent ·` | The exit was held back. See `resting sell not cancelled` below |
| `Order not placed ·` | A [checked order](#orders-being-checked) never reached Polymarket |
| `Move failed ·` | The old order was not cancelled, so no new order was placed |
| `Hedge not sent ·` | You pressed `H` while **Hedge** was greyed. The reason follows |

### From the app’s checks

Nothing reached Polymarket. The server checks in the order of this table and shows the
first check that fails. When a limit is passed, the message shows the limit and your
figure. When the figures are not known, it shows the shorter text in brackets.

| You see | What it means | What to do |
| - | - | - |
| `trading off (LIVE_TRADING not set)` | Trading is off on the server, or the app has not loaded your account yet | If it stays, tell the person who runs the server. The setting is in [Configuration](../configuration.md#to-connect-your-polymarket-account) |
| `geoblocked` | Polymarket blocks the server’s location, or the location check is not done yet | Nothing in the app changes this |
| `venue credentials unavailable` | The account has no credentials, or they do not work | See `Account error` in [Getting started](getting-started.md#read-the-status-indicators) |
| `Session Key expired` | The key that lets the app trade is expired | Ask the person who set up your account to renew it |
| `clock differs from the venue` | The server’s clock differs from Polymarket’s by more than 2 seconds, or it is not measured yet | Tell the person who runs the server |
| `Safe` | The switch is on **Safe** | Arm, then click again |
| `trading paused after activity outside this app` | The app saw account activity that it did not place | Check the activity, then arm with your password. See the [FAQ](faq.md#trading-switched-to-safe-after-activity-outside-this-app) |
| `invalid order` | The request was not correct | Reload the page |
| `market closed` | The market takes no orders | |
| `price outside 0–1` | The price is not above 0¢ and below 100¢ | |
| `price not on the tick grid` | The price is between two ticks | Use a price on the ladder |
| `below minimum size (5 sh)` (`below the market minimum size`) | The order is smaller than the market allows. An exit or a hedge also has this minimum | Use a larger stake |
| `positions unavailable` | The app could not read your positions. It cannot check a sell, exit or hedge against what you hold, or a buy against your position limit | Wait a moment, then try again |
| `no position to sell` | A sell, exit or hedge for more shares than you hold, or with nothing to hedge | |
| `no fresh book` | The book is stale, so the price cannot be checked. An exit also gets this when there are no bids, and a Join when there are no asks | Wait until prices are live again |
| `price outside band (±10 ticks of 42¢)` (`price outside the band around the touch`) | The price is too far from the best bid or ask. For an exit or Join, the figure is your exit slippage | Click closer to the best prices, or widen the band in [Settings](settings.md#change-a-risk-limit) |
| `max order $25,000.00 (order $30,000.00)` (`over the max order notional`) | The order is larger than your max order notional | Lower the stake, or raise the limit |
| `max position $100,000.00 (position $120,000.00)` (`over the max position notional`) | A buy would take your position in this market over the limit | |
| `max daily $1,000,000.00 (today $1,020,000.00)` (`over the max daily notional`) | Today’s orders (UTC) would pass the daily limit | |
| `max open orders 100` (`at the max open orders`) | You already have the most open orders allowed | Cancel some orders |
| `max orders per minute 60` (`over the max orders per minute`) | Too many orders in the last 60 seconds | Wait a moment |
| `duplicate of a recent order` | The same outcome, side, price and size was placed moments ago | Check **Orders** before you click again |

Hedge and exit checks:

| You see | What it means | What to do |
| - | - | - |
| `hedge needs a two-outcome market` | Hedge works only in markets with two outcomes | |
| `earlier hedge still open` | A hedge in this market is on its way, in a check, or on the book | Wait for it to fill, or cancel it |
| `already hedged` | Both outcomes already pay the same, with the orders that are open or on their way | |
| `no asks on the other outcome` | Nobody sells the outcome that a hedge would buy | Wait, or exit instead |
| `hedge price 27¢ above 26¢ shown` (`hedge price above the price shown`) | The asks moved after the preview, so the hedge would cost more than it showed. Nothing was bought | Check the new preview, then hedge again |
| `Exit not sent · resting sell not cancelled` | Exit cancels your resting sells in that outcome first. Polymarket did not confirm one cancel, so the app held the exit back: that sell could still sell the same shares | Check **Orders**, then exit again |

### From Polymarket

The order was sent, and Polymarket refused it.

| You see | What it means | What to do |
| - | - | - |
| `refused by the venue` | Polymarket refused it for a reason not listed here | |
| `not enough cash or allowance` | Not enough cash for a buy, or not enough shares for a sell | Deposit on polymarket.com, or check the position |
| `venue in post-only mode` | Polymarket takes only orders that rest, for example after a restart | Wait, or use a price that does not fill at once |
| `venue in cancel-only mode (503)` | Polymarket takes cancels only | Wait |
| `trading disabled on the venue` | Trading is off on Polymarket | Wait |
| `venue restarting (425)` | Polymarket restarts its matching engine | Wait the time shown |
| `rate limited (429)` | Too many requests to Polymarket | Wait the time shown |
| `post-only order would cross the book` | A Join would fill at once, because the ask moved | Join again at the new ask, or use Exit |
| `never reached the venue` | A [checked order](#orders-being-checked) was never received by Polymarket. Nothing rests | Place it again if you still want it |

Polymarket can also refuse with `market closed`, `price not on the tick grid`,
`below the market minimum size`, `price outside 0–1`, `geoblocked`,
`venue credentials unavailable` or `invalid order`. They mean the same as in the app’s
checks.

### Other refusals

| You see | Where | What it means |
| - | - | - |
| `Not armed · trading cannot be armed now` | Toast after you click **Armed** | Something blocks arming. The switch tooltip says what |
| `Not saved · password required to raise a limit` | Under a field in **Settings** | Raising a limit needs your password |
| `Not saved · above the ceiling set on the server` | Under a field in **Settings** | A limit cannot go above its ceiling |

## The exact order rules

The server checks every order against these rules, whatever the screen shows. The values
of the limits are yours to change in [Settings](settings.md#change-a-risk-limit), up to a
ceiling set on the server.

### Before any order

| Rule | How it works |
| - | - |
| Trading on | The person who runs the server turned trading on |
| Location | Polymarket allows trading from the server’s location. The check runs at start and again about every 10 minutes |
| Account | The account’s credentials work, and the Session Key is not expired |
| Clock | The server’s clock is within 2 seconds of Polymarket’s |
| Switch | The switch is **Armed**, and no activity outside the app paused trading |
| Account loaded | The app has read your open orders since it started |

### Each order

| Rule | How it works |
| - | - |
| Size of a buy | Your stake divided by the price, rounded down to 0.01 sh. A buy never spends more than the stake |
| Size of a sell | Your stake’s worth of shares at that price, or your whole position if that is smaller. A sell is never turned into a buy of the other outcome |
| Shares held | A sell, exit or hedge needs your positions read. A sell for more shares than you hold is refused |
| Market | The market is open and takes orders |
| Price | Above 0¢, below 100¢, and on the market’s tick grid |
| Minimum size | At least the market’s minimum size. This applies to exits and hedges too |
| Fresh book | The outcome’s prices are live, so the price can be checked |
| Price band | A price may be no lower than the best bid minus the band, and no higher than the best ask plus the band (10 ticks by default, at most 50). With one side of the book empty, the other side sets both bounds. Example: bid 40¢, ask 42¢, band 10 ticks of 1¢: from 30¢ to 52¢ |
| Exit slippage | Exit and Join are not held to the price band. Instead, their price may not be lower than the best bid minus the exit slippage (5 ticks by default, at most 50) |
| Max order notional | Price × size of this one order |
| Max position notional | Buys only. What you paid for your positions in this market, plus your open buys there, plus this order |
| Max daily notional | Everything placed since 00:00 UTC, plus this order |
| Max open orders | Your open orders and the orders on their way, plus this one. A move does not count the order it replaces |
| Max orders per minute | Orders placed in the last 60 seconds, plus this one. A move counts as two: the cancel and the new order |
| Duplicate window | The same outcome, side, price and size placed within this time is refused (1.5 s by default, at most 10 s) |

Exit and Join only make a position smaller. Thus the max order, max position, max daily
and max open orders limits do not apply to them, and they do not count toward the daily
total. The orders per minute limit and the duplicate window apply to them.

A hedge is a buy. Every rule above applies to it.

Cancels are never blocked by any of these rules.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.