Why an Exchange Rejects Your Order: Min Notional
An order that never reaches the book has almost always tripped a rule the venue publishes in advance: a minimum order value, a size increment, a price tick, or a market that only accepts post-only orders. This guide reads those rules off the instrument data that Binance and OKX serve publicly, maps Binance's rejection messages to the constraint they name, and shows how to size an order so it passes the first time.

Cover artwork: CoinSoso · AI-generated, not a photograph of a real venue, product or market capture.
Key takeaways
- A rejection is usually a published numeric constraint, not a platform fault.
- Every pair carries a price increment, a size increment and a minimum order value.
- Binance expresses these as symbol filters; OKX expresses the same three as tickSz, lotSz and minSz.
- The values are set per pair, so a size that is accepted on one market can be rejected on another.
- Both venues publish the exact numbers through a public endpoint, so you can check before you send.
A rejection is a published number, not a fault
When an order is refused, the message is short and the cause is rarely mysterious. Every venue publishes the constraints that an order has to satisfy, pair by pair, and it publishes them to anyone who asks. The rejection is the venue applying a number it already told you.
That matters for two reasons. The first is practical: knowing where the number lives turns a support ticket into a lookup. The second is that the same lookup tells you how much room you have, which is what determines whether an order is possible at all at your account size.
The three constraints every pair carries
Strip away the naming and almost every spot market enforces three things:
- A price increment. Your limit price must be a multiple of it. A price that is not a multiple gets rejected, not rounded.
- A size increment. Your quantity must be a multiple of it, usually subject to a minimum quantity as well.
- A minimum order value. The order has to be worth enough, measured in the quote currency, for the venue to accept it.
Binance and OKX both enforce all three. They differ in what they call them, which is the source of most of the confusion when you move between venues.
What Binance publishes for BTCUSDT
Binance exposes its constraints as named filters on each symbol. Reading exchangeInfo for the BTCUSDT pair on 2026-10-15 returned this set:
| Filter | What it constrains | Value read on 2026-10-15 |
|---|---|---|
PRICE_FILTER |
the price you may send | tick 0.01; min 0.01; max 1,000,000 |
LOT_SIZE |
quantity | step 0.00001; min 0.00001; max 9,000 |
MARKET_LOT_SIZE |
quantity on a market order | max 125.58015654 |
NOTIONAL |
the value of the order | min 5 USDT; max 9,000,000 USDT |
PERCENT_PRICE_BY_SIDE |
distance from the recent average price | bid x1.2 / x0.5; ask x2 / x0.8 |
MAX_NUM_ORDERS |
open orders you may hold | 200 |
MAX_NUM_ORDER_LISTS |
order lists you may hold | 20 |
MAX_NUM_ALGO_ORDERS |
algorithmic orders you may run | 5 |
MAX_NUM_ORDER_AMENDS |
times an order may be amended | 10 |
ICEBERG_PARTS |
slices in an iceberg order | 100 |
TRAILING_DELTA |
trailing stop distance | 10 to 2,000 |
Four of those deserve a second look, because they are the ones that surprise people.
The minimum value is enforced on market orders. The NOTIONAL filter on this pair carried applyMinToMarket as true and applyMaxToMarket as false. The field names describe the behaviour: the 5 USDT floor applies when you send a market order, the 9,000,000 USDT ceiling does not. That is why a tiny market buy can be refused on a pair where the equivalent limit order would also fail, but for a reason you did not look for.
There are two different maximum sizes. LOT_SIZE caps a limit order at 9,000 BTC; MARKET_LOT_SIZE caps a market order at 125.58015654. A market order is capped far lower than a limit order because a market order has to be filled immediately against resting liquidity, and the venue limits how much of the book one order may consume.
Your price has to stay near the market. PERCENT_PRICE_BY_SIDE multiplies a recent average price to produce a band. On this pair the bid side allowed x1.2 above and x0.5 below; the ask side allowed x2 above and x0.8 below. A limit order priced far outside that band is rejected even though it sits inside PRICE_FILTER.
Amendments are limited. A single order may be amended 10 times. If you manage a resting order by amending it repeatedly, it will at some point stop accepting changes.
The pair itself also has to be tradeable. Of the 3,729 symbols the endpoint listed on the same read, 1,380 carried a status of TRADING and 511 of those were quoted in USDT. An order on a pair that is halted, or that has not started trading, is rejected for a reason that has nothing to do with your numbers.
The error message names the filter that failed
You do not have to guess which constraint you tripped. Binance’s Spot API documentation lists the rejection text it returns, and each message names the filter, so the fix is determined by the message rather than by trial and error. The failures arrive as a generic code with a specific suffix:
| What the API returns | Which constraint failed | What to change |
|---|---|---|
-1013 INVALID_MESSAGE with Filter failure: PRICE_FILTER |
the price is not a multiple of the tick, or sits outside the filter’s min/max | snap the price to the tick, then re-check the band |
-1013 with Filter failure: LOT_SIZE |
the quantity is not a multiple of the step, or is outside min/max | round the quantity down to a step multiple |
-1013 with Filter failure: MARKET_LOT_SIZE |
the same check, applied to a market order | same fix, using the market-order bounds |
-1013 with Filter failure: MIN_NOTIONAL |
the order value is below the pair minimum | add a step until the value clears the floor |
-1013 with Filter failure: NOTIONAL |
the order value is outside the allowed range | adjust size, not price |
-1013 with Filter failure: PERCENT_PRICE_BY_SIDE |
the price is too far from the recent average | move the limit closer to the market |
-2010 NEW_ORDER_REJECTED |
the order passed the filters but was refused at placement | read the accompanying message: balance, pair state or permissions |
Two rules follow from that table. The first is that -1013 is not one error; the suffix is the error, and reading only the numeric code throws away the diagnosis. The second is that a MIN_NOTIONAL failure and a NOTIONAL failure mean different things on the same pair - one is a floor, the other a range - so the fix is not always “buy more”.
OKX reports the same class of problem through its own sCode and message pairs rather than Binance’s codes, and the message text is what identifies the failed field. Compare it with the instrument’s tickSz, lotSz and minSz rather than translating a Binance code into an OKX one; the field names differ, so the mapping is not one-to-one.
What those numbers mean in practice
Take the smallest order the pair accepts. The quantity must be a multiple of 0.00001 BTC and worth at least 5 USDT. At a price near 81,824 USDT per BTC, one step of 0.00001 BTC is about 0.82 USDT - well under the floor. So the binding constraint for a small order is not the step size at all; it is the 5 USDT minimum, which is reached at roughly 0.00006111 BTC. Rounding that up to a multiple of the step gives 0.00007 BTC.
Now take the other end. The largest market order is 125.58015654 BTC. That is a little over 10 million USDT at the same price - above the 9,000,000 USDT NOTIONAL ceiling, though on this pair the ceiling is not applied to market orders. For a limit order, the 9,000 BTC cap is far larger than the value cap, so the value cap binds first.
The lesson generalises: for a pair, exactly one constraint usually binds at each order size, and which one it is changes as the order grows.
OKX publishes the same three under different names
OKX’s Get instruments endpoint describes the same three constraints with a different vocabulary:
| OKX field | Meaning as OKX documents it |
|---|---|
tickSz |
“Tick size, e.g. 0.0001” - the price increment |
lotSz |
“Lot size … If it is SPOT / MARGIN, the value is the quantity in base currency” |
minSz |
“Minimum order size” |
maxLmtSz / maxLmtAmt |
maximum quantity, and maximum USD amount, for a single limit order |
maxMktSz / maxMktAmt |
the same caps for a single market order |
state |
the instrument’s status - live, suspend, post_only and others |
OKX also publishes a constraint Binance expresses with multipliers, but describes differently. Three fields - initPxLmtPct, floatPxLmtPct and maxPxLmtPct - define price-limit bands as percentages, documented as “the floating price-limit band during normal trading, e.g. 0.03 represents 3%” and a hard ceiling on deviation from the index price. The example values in OKX’s documentation are attached to a worked example instrument, not to a live market, so read them as a description of the field rather than a current limit on any pair you trade.
Two venue-specific details in that table are worth noting. maxMktSz on OKX is documented in USDT for spot and margin, not in the base currency, while maxLmtSz is in the base currency - a unit change that is easy to miss when you copy a number across. And state is not a boolean: post_only means the instrument is live but accepts only post-only orders, so a market order on a pair in that state is rejected even though the pair is trading.
How to size an order that passes
The sequence that avoids rejected orders is short and mechanical.
- Read the pair’s constraints first. Fetch the instrument record for the exact pair. Do not assume a value that worked on another pair.
- Compute the quantity from the increment. Divide your intended size by the step size, round down, and multiply back. Rounding down keeps you inside your risk budget; rounding up spends more than you decided to.
- Check the result against the minimum value. Multiply the rounded quantity by your intended price and compare it with the minimum order value. If it falls short, add one step and check again.
- Snap the price to the tick. Round the price to the nearest allowed multiple, then confirm it still sits inside the percentage band relative to the recent average.
- Confirm the pair is tradeable. Check the status field before you build the order, not after it is rejected.
Step 2 is where a manual calculation most often goes wrong, in both directions. A calculator that returns an unrounded quantity, or a quantity rounded to a number of decimal places rather than to a multiple, will produce an order that is rejected for a reason that looks like a venue fault but is arithmetic.
Where to read the numbers yourself
Both venues publish these values through public, unauthenticated endpoints, which is the right way to check them - exchange documentation goes stale and help-centre screenshots go staler.
- Binance:
GET https://api.binance.com/api/v3/exchangeInfo?symbol=BTCUSDTreturns the full filter set for one pair. Without the symbol parameter it returns every listed symbol, which is a large response but shows how much the values differ across markets. - OKX: the
Get instrumentsendpoint documented at the API reference returnstickSz,lotSz,minSzand themax*caps per instrument ID.
Both responses are structured data, so a script can check an order before sending it rather than after it fails. If you would rather work the other way around, the position size calculator derives a quantity from a risk budget, and the trading fee calculator shows what the fill is expected to cost - neither replaces the venue’s own filter check, and both are more useful once you know which constraint is binding.
If you are choosing between the two venues rather than debugging an order, the Binance profile, the OKX profile and the Binance vs OKX comparison cover the structural differences. For how order type changes what you pay rather than what you may send, see maker and taker orders; for how size interacts with the resting book once the order is accepted, see spread, depth and slippage.
Risk note. The values in this article are a snapshot of what two venues’ public endpoints returned on 2026-10-15, and venues change tick sizes, step sizes and minimum order values without notice. Read the live values for the pair you are about to trade rather than relying on any figure reproduced here. Nothing in this article is investment advice, and a correctly sized order that passes every filter can still lose money.
Sources
How this was researched. Written from primary documentation and the exchange or protocol's own published material, with sources listed at the end of the article.
Primary sources for the factual claims on this page. A date appears only where a human has actually read the source; where it is missing, the check is still outstanding.
- Binance Spot API - exchangeInfo (symbol filters)(read 2026-10-15)
- Binance Spot API documentation - error codes and filter failure messages(read 2026-10-20)
- OKX API v5 documentation - Get instruments(read 2026-10-15)
Frequently asked questions
My balance is large enough, so why was the order rejected?
Balance is only one of the checks. Before the order reaches the matching engine, the venue validates it against the pair's published filters: the price must sit on the allowed increment, the quantity must be a multiple of the size increment, and the order value must clear a minimum. Failing any of those rejects the order regardless of what you hold.
Do these limits apply to market orders too?
Some do. On the BTCUSDT pair we read on 2026-10-15, Binance's NOTIONAL filter carried applyMinToMarket set to true, which is the field that says the minimum order value is enforced on market orders as well. That is why a very small market buy can be rejected even though the price is chosen by the venue rather than by you.
Why does the same order size work on one pair and not another?
Because the constraints are attached to the pair, not to your account. Tick size and step size are chosen per market to suit that asset's price and precision, so a quantity that divides evenly on one pair can leave a remainder on another.
Can I just let the exchange round my numbers?
Some clients do round for you, and the rounding is not always in the direction you expect. Rounding the quantity down and the price to the nearest valid tick yourself, before the order is built, keeps the result predictable.
Which error code tells me which filter I failed?
On Binance, -1013 is the code and the suffix is the diagnosis: the documentation lists distinct messages such as Filter failure: PRICE_FILTER, LOT_SIZE, MARKET_LOT_SIZE, MIN_NOTIONAL, NOTIONAL and PERCENT_PRICE_BY_SIDE. Read the whole message, not just the number - two different or insufficient value failures share the same code but need different fixes.
Where to go next
Independent research. Each card shows the platform’s invite code, and its Create Account button is a referral link that may earn us a commission at no extra cost to you. Whether an account can be opened is decided by the platform at sign-up.
Binance

One of the largest global exchanges by traded volume, with a very broad product range.
20% Trading Fee Rebate
Use invite code con888 when signing up to enjoy trading fee benefits.
Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.
Do not install an APK from an unknown source, or one that has been modified or cannot be checked.
OKX

A large global exchange offering spot, derivatives and a self-custody wallet.
20% Trading Fee Rebate
Enter invite code con888 when signing up to check available trading fee benefits.
Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.
Do not install an APK from an unknown source, or one that has been modified or cannot be checked.