You enter a limit price, the order form says the order failed, and nothing shows up under open orders. That is a different problem from an order that sits unfilled. An unfilled order made it into the order book and is waiting for someone on the other side. A rejected order was stopped by a price check before it got there: no balance was reserved and nothing will trade.
The usual cause is a price band that is set separately for buys and sells. If the limit price is too far from the average of recent trades, the order is refused. Binance's Spot API documentation calls this filter PERCENT_PRICE_BY_SIDE; an API order that breaks it comes back with "Filter failure: PERCENT_PRICE_BY_SIDE".
The band is centred on a recent average, not on the last price
According to the Spot API filter documentation, the valid range for an order price is based on an average of previous trade prices. How many minutes go into that average is set by avgPriceMins in the same filter. The documentation adds two exceptions: when avgPriceMins is 0 the last price is used, and when the symbol has a non-null reference price, that price is used instead.
The public symbol data for BTC/USDT, ETH/BTC and USDC/USDT, checked on 7 October 2026, shows avgPriceMins set to 5 for all three. After a sharp move, then, the price on your screen can be well ahead of the five-minute average the check uses. A limit that looks comfortably inside the band against the last price can still fall outside it against the average.
BTC/USDT: buys can go up to 1.2× the average, sells down to 0.8×
Here are the four BTC/USDT multipliers from the same check. Suppose the five-minute average is 80,000 USDT; multiply it by each figure to get the prices you can submit:
| Side | Multipliers (low – high) | Accepted limit at an 80,000 average |
|---|---|---|
| Buy | 0.5 – 1.2 | 40,000 – 96,000 USDT |
| Sell | 0.8 – 2 | 64,000 – 160,000 USDT |
The band is lopsided. A buy can rest far below the market, down to half the average, but can only be placed 20% above it. A sell is the mirror image: up to double the average, but no more than 20% below.
That asymmetry catches people who overshoot on purpose to get filled right away. A buy limit of 100,000 is 25% over the 80,000 average and above the 96,000 ceiling, so it never reaches the book. A hurried sell at 60,000 sits under the 64,000 floor and is refused the same way. To trade immediately, a limit only has to cross the best price on the other side while staying inside the band; pushing it further does not make it fill any faster.
Binance's help article "Why Wasn't My Limit Order Filled?" (updated 8 January 2026) puts it more simply: on regular pairs, limit prices must be between 50% and 200% of the market price. That is exactly the outer frame made by the BTC/USDT buy floor (0.5) and sell ceiling (2). For an actual order, the side you are on decides which part of that frame applies.
Stablecoin pairs have a much tighter band
The same help article gives 80% to 120% for stablecoin pairs. On 7 October 2026, USDC/USDT returned 0.9 – 1.1 for both buys and sells, narrower than the article suggests, plus a separate PRICE_FILTER that keeps any price between 0.8 and 1.2.
With an average of 1.0000, that means limits between 0.9000 and 1.1000. A resting bid at 0.85, placed in case of a depeg, is rejected rather than parked. The help article is a general guide; the order is checked against the pair's own figures, so when the two disagree, work from the numbers in the symbol data.
Look up the band for your pair without logging in
Both the multipliers and the average are public. No account or API key is needed; open these in a browser and read the raw response:
- Open
https://api.binance.com/api/v3/exchangeInfo?symbol=BTCUSDT, swapping in your pair without the slash. Under filters, find the entry whose filterType is PERCENT_PRICE_BY_SIDE. The two bid values apply to buys, the two ask values to sells; Up is the ceiling and Down is the floor. - Open
https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT. In the response, mins is the averaging window in minutes and price is the average over that window. - Multiply the average by your side's Up and Down values. Your limit has to land between the two results.
Two details are easy to miss. Some pairs return PERCENT_PRICE instead, with a single multiplierUp and multiplierDown shared by both sides. And the average moves every minute, so a limit sitting right at the edge may pass when you calculate it and fail when you submit.
Inside the band and still rejected? Check tick size and minimums
An order passes several checks, and this band is only one of them. PRICE_FILTER covers the price's minimum, maximum and tick size; on the day checked, BTC/USDT used a tick of 0.01, so 80,000.005 would fail. Quantity step and minimum order value are separate checks again, covered in minimum order value, step size and tick size.
A stop-limit order carries a limit price too, and the pair's own multipliers apply to it. On BTC/USDT a sell limit below 0.8× the average falls outside the band; on USDC/USDT the sell floor is 0.9×. The filter documentation cited above does not say whether this check runs when you place a stop-limit or only once the stop triggers, so do not count on a far-off limit being flagged at placement. Why a triggered stop-limit can still fail to sell is a separate question, answered in the stop triggered, so why do I still hold the asset.
After a rejection, there is no order and no reserved balance
A rejected order never entered the book. It will not appear under open orders, and your available balance has not been reduced for it. Once both look unchanged, re-enter the order with a price inside the band; there is no risk of the first one still sitting there alongside the second.
A timeout is different. If the request timed out and you do not know the result, the order may already be live, so check its status before sending another, as described in Binance order timeout: check before submitting again. And if the order was accepted and is simply not filling, go back to the limit price was reached, so why no fill.