360 Secure SkillHub
360 安全技能中心

Binance API

该 Skill 是 Binance 公开市场数据的使用参考,提供现货与期货的 REST/WebSocket 端点、K线分页、批量历史数据与限流说明。它无需 API Key,适合查询价格、K线、订单簿、成交、资金费率和未平仓量,但不覆盖账户与交易接口。

nanookai
nanookai
热度 23.55
最近更新 2026-07-06 15:47:54
分类:数据依赖:第三方 API应用场景:市场分析 / 财务 / API 集成 / 研究

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add binance-api
Metadata
name
binance-api
description
Fetch live and historical cryptocurrency market data (prices, klines/candlesticks, order books, trades, 24h stats, futures funding rates, open interest) with the free Binance public REST API (no API key). Use for any crypto price lookup, BTC/ETH/altcoin quote, candlestick or OHLCV data, trading volume, order book, perpetual/futures data, or crypto market analysis task, even if Binance isn't mentioned.

Binance Public Market Data API

Binance exposes its Spot market data through a free public REST API — no API key, no signup. Every endpoint in this skill has security type NONE (public); only account/trading endpoints need keys, and those are out of scope here.

Base URL: https://data-api.binance.vision — a market-data-only mirror of https://api.binance.com. Prefer it for public data: same paths, same responses, and it isolates you from the main exchange's stricter traffic policing. (api.binance.com and api1–api4.binance.com also work if it's unavailable.)

Symbols are concatenated pairs in uppercase with no separator: BTCUSDT, ETHBTC, BNBUSDT. When a user says "the price of Bitcoin", they almost always mean BTCUSDT (quote in USDT ≈ USD).

Quick reference

All are GET requests. Weight = rate-limit cost (budget: 6,000/min per IP).

Task Request Weight
Latest price, one symbol /api/v3/ticker/price?symbol=BTCUSDT 2
Latest price, several symbols /api/v3/ticker/price?symbols=["BTCUSDT","ETHUSDT"] 4
Best bid/ask /api/v3/ticker/bookTicker?symbol=BTCUSDT 2
24h stats (change %, high/low, volume) /api/v3/ticker/24hr?symbol=BTCUSDT 2
Candlesticks / OHLCV /api/v3/klines?symbol=BTCUSDT&interval=1d&limit=100 2
Order book depth /api/v3/depth?symbol=BTCUSDT&limit=100 5–250
Recent trades /api/v3/trades?symbol=BTCUSDT&limit=100 25
Aggregated trades (cheaper) /api/v3/aggTrades?symbol=BTCUSDT 4
5-min average price /api/v3/avgPrice?symbol=BTCUSDT 2
Rolling-window stats (custom window) /api/v3/ticker?symbol=BTCUSDT&windowSize=4h 4/symbol
Trading-day stats /api/v3/ticker/tradingDay?symbol=BTCUSDT 4/symbol
List all symbols / trading rules /api/v3/exchangeInfo?symbol=BTCUSDT 20
Server time / connectivity /api/v3/time, /api/v3/ping 1

Kline interval values (case-sensitive): 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M (1m = minute, 1M = month).

Response conventions

  • Prices and quantities are JSON strings, not numbers ("63450.01000000") — parse with float()/Number(), or Decimal when precision matters.
  • Timestamps are Unix milliseconds (divide by 1000 for seconds).
  • Errors return {"code": -1121, "msg": "Invalid symbol."} with an HTTP 4xx.
// GET /api/v3/ticker/price?symbol=BTCUSDT
{"symbol": "BTCUSDT", "price": "63450.01000000"}

Klines (candlesticks) — the workhorse

Each kline is a positional array; map it to named fields immediately:

import requests

def get_klines(symbol: str, interval: str = "1d", limit: int = 100, **params):
    r = requests.get(
        "https://data-api.binance.vision/api/v3/klines",
        params={"symbol": symbol, "interval": interval, "limit": limit, **params},
        timeout=10,
    )
    r.raise_for_status()
    return [
        {
            "open_time": k[0],            # ms; kline's unique ID
            "open": float(k[1]),
            "high": float(k[2]),
            "low": float(k[3]),
            "close": float(k[4]),
            "volume": float(k[5]),        # in base asset (BTC for BTCUSDT)
            "close_time": k[6],
            "quote_volume": float(k[7]),  # in quote asset (USDT for BTCUSDT)
            "trades": k[8],
        }
        for k in r.json()
    ]

Max 1,000 klines per request. For longer history, page forward with startTime:

def get_klines_range(symbol, interval, start_ms, end_ms):
    out = []
    while start_ms < end_ms:
        batch = get_klines(symbol, interval, limit=1000,
                           startTime=start_ms, endTime=end_ms)
        if not batch:
            break
        out.extend(batch)
        start_ms = batch[-1]["close_time"] + 1
    return out

The last kline in a response is usually the still-open, unfinished candle (its close_time is in the future) — drop it for completed-bar analysis.

Futures (derivatives) market data

Binance's futures markets have their own free, key-less market data APIs: USDⓈ-M perpetuals/futures at https://fapi.binance.com (/fapi/v1/*, symbols like BTCUSDT) and COIN-M at https://dapi.binance.com (BTCUSD_PERP). Beyond the spot-style endpoints (klines, depth, tickers), they add derivatives-only data:

Task Request
Mark price + current funding rate /fapi/v1/premiumIndex?symbol=BTCUSDT
Funding rate history /fapi/v1/fundingRate?symbol=BTCUSDT
Open interest (current) /fapi/v1/openInterest?symbol=BTCUSDT
Open interest history, long/short ratios /futures/data/openInterestHist?symbol=BTCUSDT&period=1h

When a user asks about funding rates, open interest, liquidation-relevant mark prices, long/short sentiment, or "the perp", read references/futures.md — futures have a smaller rate budget (2,400 weight/min) and several format traps (COIN-M returns arrays for single symbols; inverse-contract volume units).

Rate limits

  • Budget: 6,000 request weight per minute per IP (not per key). Each response includes header X-MBX-USED-WEIGHT-1M with your current usage.
  • HTTP 429 = over the limit; stop and wait the Retry-After header's seconds. Ignoring 429s escalates to HTTP 418 — an IP ban of 2 minutes up to 3 days.
  • Normal usage never gets close: 6,000/min allows ~3,000 price checks. Only tight polling loops or all-symbols scans need care.

Practical tips

  • Always pass symbol or symbols to the ticker endpoints. Omitting it returns every symbol on the exchange (~3,000 entries, weight 80 for ticker/24hr). If you truly need a market-wide scan, one all-symbols call is still better than many single calls.
  • Add type=MINI to ticker/24hr, ticker/tradingDay, or ticker to get just OHLC + volume without the bid/ask noise.
  • symbols takes a JSON array in the query string — quote it in the shell: curl -g 'https://data-api.binance.vision/api/v3/ticker/price?symbols=["BTCUSDT","ETHUSDT"]'
  • Not sure a symbol exists? /api/v3/exchangeInfo?symbol=... errors with -1121 if it doesn't; without parameters it lists every tradable pair.
  • One exception to the base URL: /api/v3/historicalTrades (old trade lookup) is missing from data-api.binance.vision (404) — call it on api.binance.com, still key-free.
  • Binance is geo-restricted in a few jurisdictions (e.g. the US, where binance.us is a separate exchange/API). An HTTP 451 or connection block means regional restriction, not a bug in the request.
  • For bulk history (years of klines/trades), don't loop over the REST API — Binance publishes free ZIP/CSV archives of complete history at https://data.binance.vision. Read references/bulk-data.md for the URL patterns and two CSV format traps (spot files: no header, microsecond timestamps).
  • For real-time data (dashboards, bots, watching prices continuously), use the key-free WebSocket streams instead of polling REST — read references/websocket-streams.md. For occasional checks, REST is simpler.
  • Account balances, placing orders, and trade history require a signed request with an API key (security types USER_DATA/TRADE) — not covered by this skill. If asked, point the user to the official docs: https://github.com/binance/binance-spot-api-docs

For complete references with all parameters, weights, and verified request/response examples, read:

  • references/endpoints.md — spot REST endpoints
  • references/futures.md — USDⓈ-M and COIN-M futures REST (funding, open interest)
  • references/websocket-streams.md — real-time WebSocket streams
  • references/bulk-data.md — full-history ZIP/CSV archive for backtesting