Skip to content

Learn

Exchange APIs

Binance API error -1121: Invalid symbol, and finding the mismatch

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

Binance error -1121 is BAD_SYMBOL: “Invalid symbol.” It is the example Binance itself uses to show what an error response looks like:

{ "code": -1121, "msg": "Invalid symbol." }

It means the symbol string you sent is not one that the API you called recognises. Those last words carry most of the diagnosis. Binance Spot and USDⓈ-M futures are separate products with separate hosts and separate symbol lists, and each test environment has its own list too. A symbol can be real, tradable, and still invalid on the host you sent it to.

What this error actually means

-1121 is a lookup failure on a string. It is worth separating from two messages that sound similar but mean something different:

What you seeWhat it means
-1121 “Invalid symbol.”The API does not recognise the symbol at all
“This symbol is not permitted for this account.”The symbol exists; your account may not trade it
“Market is closed.”The symbol exists; it is not trading right now

The second and third are matching-engine messages that come back under order rejection codes such as -2010, not under -1121. So if you have -1121, stop looking at account settings and trading status. The string, or the place you sent it, is wrong.

It is also a permanent error in the sense used in error handling patterns for trading APIs: sending the same request again produces the same answer. Do not retry it.

The usual cause: the string is not Binance’s form of the symbol

In practice, most -1121 errors are formatting. Binance’s symbols are the names listed in exchangeInfo, and the request has to match one exactly. The common ways to miss:

  • A separator. A slash or hyphen between base and quote, carried over from another venue, a charting tool, or a library that normalises symbols across exchanges. Libraries of that kind typically display one form and send another; if you build raw requests yourself, use Binance’s form, not the display form.
  • Case. The symbol in a different case from the listed name.
  • The wrong quote asset. The pair you mean may be listed against a different quote currency from the one you typed.
  • Stray characters. Whitespace or a newline from a config file or user input.

Nothing about these is hard to fix. The difficulty is noticing, because BTC/USDT and BTCUSDT read as the same thing to a person.

Other causes, in order of likelihood

1. The right symbol on the wrong product. Spot and USDⓈ-M futures are different APIs on different hosts:

ProductProduction RESTSymbol list
Spothttps://api.binance.comGET /api/v3/exchangeInfo
USDⓈ-M futureshttps://fapi.binance.comGET /fapi/v1/exchangeInfo

A perpetual contract you trade on futures is not automatically a Spot pair, and a Spot pair is not automatically a futures contract. Code that shares one symbol list between the two clients will eventually send one to the other.

2. The right symbol in the wrong environment. Spot Testnet (https://testnet.binance.vision/api), Spot Demo Mode (https://demo-api.binance.com/api) and the futures testnet (https://demo-fapi.binance.com) each have their own symbol lists. A symbol that works in production is not guaranteed to exist in a test environment, or the reverse. Check the list of the environment you are actually calling; see Binance testnet API keys for how the Spot environments differ.

3. A symbol that no longer exists. A delisted or renamed symbol that your cached list, config file or database still carries.

4. A symbol generated rather than looked up. A string built by concatenating a base and a quote asset in code, or proposed by a language model, is a guess about what the venue lists. Guesses fail. If a model is producing symbols in your setup, validate them against the list before anything reaches an order — see how LLM tool calls go wrong on orders.

How to confirm which one you have

One call settles it: fetch exchangeInfo from the same base URL that returned the error, and search it for the exact string you sent.

GET https://api.binance.com/api/v3/exchangeInfo      # Spot
GET https://fapi.binance.com/fapi/v1/exchangeInfo    # USDⓈ-M futures

Then:

ResultMeaning
Exact string foundThe symbol is valid here. Check that the failing request really went to this host — two clients with different base URLs are a common cause
Found only with a different separator, case or quoteFormatting
Found only on the other product’s listWrong API
Not found on this environment but found in productionEnvironment
Not found anywhereDelisted, renamed, or never existed

exchangeInfo carries a request weight like every other endpoint, and Binance meters weight per IP — so fetch it once, cache it, and validate against the cache rather than calling it before every order. See Binance API rate limits.

Prevention

Validate symbols at startup. Load the symbol list for each product and environment you use, check every configured symbol against it, and refuse to start if any are missing. That turns a runtime -1121 into a startup message naming the bad symbol.

Keep one mapping layer. If your system uses its own symbol names, convert to Binance’s form in exactly one place, per product. Scattered conversions drift apart.

Log the host with the error. A -1121 log line that includes the base URL answers the product and environment questions without further work.

FAQ

What does “Invalid symbol” mean on the Binance API?

It is error -1121, BAD_SYMBOL: the API you called does not recognise the symbol string you sent. The usual causes are formatting — a separator, case, or quote asset that does not match Binance’s listed name — or sending a valid symbol to the wrong product or environment.

Why does a symbol work on Binance futures but not on spot?

Because they are separate APIs with separate symbol lists. Spot symbols are listed by GET /api/v3/exchangeInfo on api.binance.com; USDⓈ-M futures symbols by GET /fapi/v1/exchangeInfo on fapi.binance.com. A contract listed on one is not automatically listed on the other.

Is -1121 the same as “This symbol is not permitted for this account”?

No. -1121 means the symbol is not recognised at all. “This symbol is not permitted for this account.” is a matching-engine message returned with order rejections, meaning the symbol exists but your account’s permissions and the symbol’s differ. The first is a string problem; the second is an account problem.

Should I retry a request that returned -1121?

No. The symbol string will be just as unrecognised on the next attempt. Correct the symbol or the host it is sent to, and validate configured symbols against the relevant exchangeInfo list at startup so the error cannot reach a live order path.