Help developers use the python-binance library for trading on Binance. Use when code imports binance, references Client/AsyncClient, or asks about Binance API trading, market data, websockets, or account management.
Unofficial Python SDK for the Binance cryptocurrency exchange. 797+ methods covering Spot, Margin, Futures, Options, Portfolio Margin, and WebSocket APIs.
from binance import Client, AsyncClient
# Sync client
client = Client(api_key, api_secret)
# Async client
client = await AsyncClient.create(api_key, api_secret)
# Testnet
client = Client(api_key, api_secret, testnet=True)
# Demo/paper trading
client = Client(api_key, api_secret, demo=True)
# RSA key auth
client = Client(api_key, private_key=open("key.pem").read())
# Other TLD (Binance US, Japan, etc.)
client = Client(api_key, api_secret, tld="us")
response["key"].**params kwargs — most methods accept extra Binance API parameters as keyword arguments.Client and AsyncClient have identical method names. Use await for async.binance.enums or use string values directly ("BUY", "LIMIT", etc.).This is the most important pattern — it lets you infer method names:
| Prefix | Domain | Example |
|---|---|---|
get_* / create_* / cancel_* | Spot | get_order_book(), create_order() |
futures_* | USD-M Futures | futures_create_order() |
futures_coin_* | Coin-M Futures | futures_coin_create_order() |
margin_* | Margin | margin_borrow_repay() |
options_* | Vanilla Options | options_place_order() |
papi_* | Portfolio Margin | papi_create_um_order() |
ws_* | WebSocket CRUD | ws_create_order() |
order_* | Order helpers | order_limit_buy() |
stream_* | User data stream | stream_get_listen_key() |
from binance.enums import *
SIDE_BUY, SIDE_SELL = "BUY", "SELL"
ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET = "LIMIT", "MARKET"
ORDER_TYPE_STOP_LOSS_LIMIT = "STOP_LOSS_LIMIT"
TIME_IN_FORCE_GTC = "GTC" # Good till cancelled
TIME_IN_FORCE_IOC = "IOC" # Immediate or cancel
KLINE_INTERVAL_1MINUTE = "1m"
KLINE_INTERVAL_1HOUR = "1h"
KLINE_INTERVAL_1DAY = "1d"
FUTURE_ORDER_TYPE_MARKET = "MARKET"
FUTURE_ORDER_TYPE_LIMIT = "LIMIT"
ticker = client.get_symbol_ticker(symbol="BTCUSDT")
print(ticker["price"]) # "50000.00000000"
account = client.get_account()
balances = [b for b in account["balances"] if float(b["free"]) > 0]
from binance.enums import *
order = client.create_order(
symbol="BTCUSDT",
side=SIDE_BUY,
type=ORDER_TYPE_MARKET,
quoteOrderQty=100 # spend 100 USDT
)
order = client.create_order(
symbol="BTCUSDT",
side=SIDE_SELL,
type=ORDER_TYPE_LIMIT,
timeInForce=TIME_IN_FORCE_GTC,
quantity=0.001,
price="60000"
)
order = client.get_order(symbol="BTCUSDT", orderId=12345)
print(order["status"]) # "FILLED", "NEW", "CANCELED"
result = client.cancel_order(symbol="BTCUSDT", orderId=12345)
klines = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_1HOUR, "1 day ago UTC")
# Each kline: [open_time, open, high, low, close, volume, close_time, ...]
depth = client.get_order_book(symbol="BTCUSDT")
print(depth["bids"][:5]) # [[price, qty], ...]
order = client.futures_create_order(
symbol="BTCUSDT", side="BUY", type="MARKET", quantity=0.001
)
positions = client.futures_position_information(symbol="BTCUSDT")
from binance import ThreadedWebsocketManager
twm = ThreadedWebsocketManager(api_key=api_key, api_secret=api_secret)
twm.start()
def handle_message(msg):
print(msg)
twm.start_kline_socket(callback=handle_message, symbol="BTCUSDT")
twm.join()
from binance import AsyncClient, BinanceSocketManager
async def main():
client = await AsyncClient.create()
bsm = BinanceSocketManager(client)
async with bsm.trade_socket("BTCUSDT") as ts:
for _ in range(10):
msg = await ts.recv()
print(msg)
await client.close_connection()
from binance.exceptions import BinanceAPIException