Skip to content

Learn

Exchange APIs

Binance API error -2010: NEW_ORDER_REJECTED and what msg says

Figures on this page are as of 2026-09. Fees, limits and margin tiers change — check the venue's own docs.

Binance error -2010 is NEW_ORDER_REJECTED, and its official message is also just “NEW_ORDER_REJECTED”. The code is generic by design: Binance puts the actual reason for the rejection in msg.

{ "code": -2010, "msg": "Account has insufficient balance for requested action." }

So the first rule for this error is a rule for your error handler: branch on msg, not on code. The code tells you an order was refused. The message tells you why, and the “why” decides whether retrying later could ever work.

What this error actually means

Binance’s Spot error list groups the messages that can accompany -2010 under matching-engine messages, a table shared with -2011 (cancel rejected), -1010 and -2038. That is the useful contrast with -1013, which Binance describes as a rejection before the request reached the matching engine. -1013 is about the shape of your order against the symbol’s filters; -2010 is about whether this order can be accepted for this account right now.

Either way, the order was refused. Nothing rests on the book. In the classification from error handling patterns for trading APIs, most -2010 reasons are conditional: the request is valid, but the situation does not allow it. Retrying immediately fails again; retrying after the situation changes may succeed.

One caution from Binance’s own error documentation: “Codes are universal, but messages can vary.” Match on stable substrings rather than exact full strings, and log any msg your handler does not recognise so it surfaces instead of falling into a generic branch.

The usual cause: insufficient balance

“Account has insufficient balance for requested action.” — officially, not enough funds. In practice it is the -2010 reason people meet most often.

The frustrating version is when you can see the funds. In practice, the gap between “the balance I see” and “the balance available to this order” comes from a few places:

  • Funds already committed to your own open orders. A resting order reserves what it would need to execute. A strategy that leaves orders on the book is spending the same balance twice.
  • Funds in a different account or wallet. The balance you are looking at is not the one this endpoint trades from.
  • Selling more than arrived. After a buy, the amount that actually lands can be smaller than the amount ordered, depending on how fees were charged. Sell what the balance says, not what the original order said.
  • Size computed from a stale price. A buy sized a while ago against a lower price can exceed what the quote balance now covers.

The fix is to read the available balance and the open orders at the moment of the rejection, not the balance you last cached.

Other messages, in order of likelihood

msgOfficial descriptionWhat to do
“Duplicate order sent.”The clOrdId is already in useReconcile — see below
“Order would immediately match and take.”A LIMIT_MAKER order would trade immediatelyReprice, or accept that it will be a taker order
“Order would trigger immediately.”Stop price not valid relative to the last traded priceRecompute the stop against the current last price
“Market is closed.”The symbol is not tradingCheck the symbol’s status; do not retry in a loop
“This symbol is not permitted for this account.”Account and symbol permissions differAccount-level; not a code fix
“Rest API trading is not enabled.”Server not configured for TRADE endpointsNot fixable from your request

“Duplicate order sent.” deserves the most care, because it usually appears at the worst moment. Binance documents newClientOrderId as “a unique id among open orders”, so this message means an order with your client ID is currently open. If you are seeing it on a retry after a timeout, that is information, not an obstacle: your first attempt landed and is resting. Do not generate a fresh ID to get the order through — that is how a position doubles. Query the order, then decide. The reasoning, and why the same ID would be accepted once the original fills, is in retrying a failed order is not safe and what is a client order ID.

“Order would immediately match and take.” is post-only behaving as designed: a LIMIT_MAKER order is refused rather than allowed to take liquidity. See what is a post-only order.

“Order would trigger immediately.” usually means the stop is on the wrong side of the market by the time it arrived — computed from an older price, or with the direction inverted.

“This symbol is not permitted for this account.” looks like a permissions error but it is not about your API key. A key missing a permission is -2015. This message is about the account and the symbol.

Futures: same code, different surroundings

USDⓈ-M futures also lists -2010 NEW_ORDER_REJECTED. The matching-engine message table above comes from Binance’s Spot error list; we did not find the same table on the futures error page, so do not assume futures returns the same msg strings.

Futures also reports several things as dedicated codes that a Spot developer might expect under -2010: insufficient margin is -2019, a position side that does not match the account’s mode is -4061, and an order below minimum notional is -4164. A futures handler should treat those codes as first-class rather than waiting for them under -2010.

How to confirm which one you have

  1. Log the full body. The msg is the diagnosis; the code alone is not.
  2. For balance messages, query balances and open orders immediately after the rejection, and compare the order’s cost against the available amount.
  3. For a duplicate, query the order by the client ID you sent. If it exists, you are reconciling, not retrying.
  4. For trigger and maker messages, log the last traded price you computed against, next to the price you sent.
  5. For “Market is closed.” or symbol-permission messages, stop the strategy for that symbol and alert. Neither is resolved by trying again.

FAQ

What does Binance error -2010 mean?

NEW_ORDER_REJECTED — Binance refused a new order. The code is generic, and the specific reason is in the msg field, most often “Account has insufficient balance for requested action.” Other messages cover duplicate client order IDs, post-only orders that would take, stops that would trigger immediately and symbols that are not trading.

Why does Binance say insufficient balance when I have funds?

Usually because the funds are not available to this order. Balance reserved by your own open orders, funds held in a different account or wallet, or a sell quantity larger than what actually arrived after fees all produce this message. Check available balance and open orders at the moment of the rejection.

Is it safe to retry after -2010?

Not immediately and not unchanged. -2010 is a refusal, so the same request fails again until the condition changes. After a timeout, a “Duplicate order sent.” message means your original order is open; query it before sending anything, and never swap in a new client order ID to force the retry through.

What does “Duplicate order sent.” mean on Binance?

An order with the same client order ID is currently open. Binance documents newClientOrderId as unique among open orders only, so the duplicate is refused while the original rests. If it follows a timeout, it tells you the first attempt succeeded.