Tradable Symbols
Use this guide when you want to list symbols that are currently tradable on Binance Spot, or validate that a downloader config only contains symbols Binance currently reports as tradable. You can also filter for margin pairs and borrowable margin assets.
The command uses Binance Spot GET /api/v3/exchangeInfo. A symbol is treated as
tradable when Binance returns status: TRADING.
Margin filters also use:
GET /sapi/v1/margin/allPairsfor cross margin pairs.GET /sapi/v1/margin/isolated/allPairsfor isolated margin pairs.GET /sapi/v1/margin/allAssetsfor borrowable margin assets.
Quick Start
- Install dependencies with
uv sync --dev. - List currently tradable symbols for a quote asset.
- Validate downloader configs before starting large downloads.
- Apply margin or borrowability filters only when those constraints matter.
Requirements
- Python environment managed by
uv. - Network access to
https://api.binance.com. - No Binance API key is needed for Spot tradability or basic cross-margin filtering.
- A Binance API key is needed for isolated-margin and borrowability filters. The
command only sends the key as
X-MBX-APIKEYfor market metadata endpoints; it does not need your secret key. - Project dependencies installed:
uv sync --dev
List All Tradable Spot Symbols
Run:
uv run python examples/check_tradable_symbols.py
Output format:
BTCUSDT,BTC,USDT,TRADING
ETHUSDT,ETH,USDT,TRADING
Each row is:
symbol,base_asset,quote_asset,status
List Tradable Symbols By Quote Asset
Most downloader configs use one quote asset, for example USDT. To list only currently tradable USDT pairs:
uv run python examples/check_tradable_symbols.py --quote USDT
Other examples:
uv run python examples/check_tradable_symbols.py --quote BTC
uv run python examples/check_tradable_symbols.py --quote FDUSD
The quote filter is case-insensitive.
Require Market Order Support
If your workflow needs market orders, add --require-market-order:
uv run python examples/check_tradable_symbols.py --quote USDT --require-market-order
This keeps only symbols where Binance includes MARKET in the symbol’s allowed
order types.
Filter Margin-Tradable Symbols
Use --margin when you only want symbols available for margin trading.
Cross margin:
uv run python examples/check_tradable_symbols.py --quote USDT --margin cross
This works without BINANCE_API_KEY. In no-key mode, the command uses Spot
exchangeInfo fields:
isMarginTradingAllowed == true
or:
"MARGIN" in permissions
Isolated margin:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin isolated
Either cross or isolated margin:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any
--margin cross works without an API key by checking Spot exchangeInfo
metadata. If you also pass an API key, the command additionally checks Binance’s
cross-margin pair endpoint. --margin isolated checks the isolated-margin pair
endpoint because Spot exchangeInfo does not fully describe isolated-margin
availability.
Binance currently requires an API key header for the margin metadata endpoints. You can pass it either way:
uv run python examples/check_tradable_symbols.py --quote USDT --margin any --api-key your_key
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any
Summary:
No API key needed:
--quote USDT
--quote USDT --margin cross
API key needed:
--margin isolated
--margin any
--require-borrowable base|quote|both|any
Require Borrowable Assets
Margin availability means the pair can be traded on margin. Borrowability answers a different question: can the needed asset currently be borrowed?
For a short setup, you usually care whether the base asset is borrowable. For
example, shorting BTCUSDT requires borrowing BTC:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any --require-borrowable base
For a margin buy setup, you usually care whether the quote asset is borrowable.
Buying BTCUSDT with borrowed quote requires borrowing USDT:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any --require-borrowable quote
You can also require both assets, or either asset:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any --require-borrowable both
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any --require-borrowable any
If you pass --require-borrowable without a value, it defaults to base:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --quote USDT --margin any --require-borrowable
Limit Output While Exploring
Use --limit when you only want to inspect a few rows:
uv run python examples/check_tradable_symbols.py --quote USDT --limit 20
--limit only affects printed list output. It does not change Binance’s
definition of tradability.
Validate A Downloader Config
Before downloading data, validate the symbols in a YAML config:
uv run python examples/check_tradable_symbols.py --file configs/spot-1d.yaml
Validate that configured symbols are currently margin tradable and have borrowable base assets:
BINANCE_API_KEY=your_key uv run python examples/check_tradable_symbols.py --file configs/spot-1d.yaml --margin any --require-borrowable base
Example success output:
tradable: 5
OK BTCUSDT BTC/USDT
OK ETHUSDT ETH/USDT
OK ARBUSDT ARB/USDT
OK OPUSDT OP/USDT
OK SOLUSDT SOL/USDT
If every configured symbol is currently tradable, the command exits with status
code 0.
If a symbol is missing or no longer in TRADING status, the command prints the
problem and exits with status code 1. The command also exits with status code
1 when a symbol is tradable on Spot but filtered out by the requested margin or
borrowability rules:
tradable: 1
OK BTCUSDT BTC/USDT
filtered out: 1
FILTERED SOLUSDT SOL/USDT
not trading: 1
NOT_TRADING OLDUSDT status=BREAK
missing: 1
MISSING MADEUPUSDT
Use this before running:
uv run python examples/run_download.py --file configs/spot-1d.yaml --freq daily
Put Symbols Into A Config
After choosing symbols, add them to your downloader config:
asset: spot
data_type: klines
interval: 1d
symbols:
- BTCUSDT
- ETHUSDT
- SOLUSDT
start_date: 2024-01-01
end_date: 2026-04-06
destination_dir: ./data
Then validate the config:
uv run python examples/check_tradable_symbols.py --file configs/spot-1d.yaml
Important Distinction
This command checks the live Binance Spot exchange. It answers:
Is this symbol currently tradable on Binance Spot?
With margin flags, it can also answer:
Is this symbol currently listed as a cross/isolated margin pair?
Is the base or quote asset currently listed as borrowable?
It does not answer:
Does Binance historical data exist for every date I want?
Will a borrow request for my exact account, size, region, and risk state succeed?
Historical files on data.binance.vision can include symbols that are no longer
tradable today. A symbol can also be currently tradable while still having a
shorter listing history than your requested start_date.
For that reason, a normal workflow is:
- List or validate currently tradable symbols with
examples/check_tradable_symbols.py. - Run the downloader.
- Let the downloader report missing historical ZIP files, usually as
404errors, when the requested date range predates a symbol listing or Binance does not publish that file.
Troubleshooting
- Network failure: confirm that
https://api.binance.comis reachable. - Margin or borrowability command says an API key is required: set
BINANCE_API_KEYor pass--api-key. A secret key is not needed for this command. - Empty output with
--quote: the quote asset may not have currently tradable spot pairs, or it may be misspelled. - Config validation exits
1: remove missing or non-trading symbols from the config, or relax the margin/borrowability flags if the filtered symbols are acceptable for your workflow. - Historical download still gets
404: tradability is current exchange status, not proof that every historical file exists. - Borrow check passes but an order/borrow still fails: Binance can apply account-specific, region-specific, risk, balance, and size constraints that are not proven by the public asset list.