L logiover
developer-tools · Jul 3, 2026 · Updated Jul 3, 2026 · 5 min read

Binance Public API Endpoints: Klines, Depth & Funding Rate (No Key)

A reference for Binance's public market-data endpoints — klines/candlesticks, order-book depth, and futures funding rate — with exact URLs, parameters, rate-limit weights, and the data-api.binance.vision mirror. No API key required.

Binance’s market-data endpoints are public — no API key, no signature, no account. You can pull candlesticks, the full order book, recent trades and futures funding rates with a plain GET. The confusion is in the details: which base URL, which exact path, what the limit caps are, how the weight-based rate limit works, and what to do when api.binance.com is geo-blocked in your region. This is a practical reference for the endpoints people actually paste into a browser.

The three base URLs

  • https://api.binance.com — spot market data (and account endpoints, which do need a key; market data doesn’t).
  • https://fapi.binance.com — USD-M futures (this is where funding rate lives).
  • https://data-api.binance.vision — a public market-data mirror. Same spot endpoints, no account features, and reachable from places where api.binance.com is blocked. If a request to api.binance.com returns 451/403 for geo reasons, swap the host to data-api.binance.vision and the same path works.

All market-data endpoints below are unauthenticated. You only need a key for placing orders or reading your account — never for prices.

Klines (candlesticks)

GET https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1h&limit=100

Parameters:

  • symbol — the trading pair, uppercase, no slash: BTCUSDT, ETHUSDT.
  • interval1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M.
  • limit — number of candles. Default 500, max 1000. Ask for limit=2 and you get the last two candles; limit=1000 gets the maximum in one call.
  • startTime / endTime — optional epoch milliseconds to page through history.

The response is an array of arrays — no field names, position matters:

IndexField
0Open time (ms)
1Open
2High
3Low
4Close
5Volume (base asset)
6Close time (ms)
7Quote asset volume
8Number of trades
9Taker buy base volume
10Taker buy quote volume
11Ignore
[
  [1719900000000, "63500.00", "63780.10", "63410.00", "63690.50",
   "812.40", 1719903599999, "51700000.00", 41230, "410.20", "26100000.00", "0"]
]

For futures klines, the shape is identical, just a different host and path: GET https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=1h&limit=2.

Depth (order book)

GET https://api.binance.com/api/v3/depth?symbol=BTCUSDT&limit=5000

limit is not free-form here — it must be one of 5, 10, 20, 50, 100, 500, 1000, 5000, and the request weight scales with it:

limitRequest weight
5 – 1005
50025
100050
5000250

So limit=5000 costs 250 of your per-minute weight budget in a single call — pull the full book sparingly. The response is bids and asks as [price, quantity] string pairs, best price first:

{
  "lastUpdateId": 6581234567,
  "bids": [ ["63690.50", "1.24"], ["63690.40", "0.08"] ],
  "asks": [ ["63690.60", "0.51"], ["63690.70", "2.10"] ]
}

Futures funding rate

Two different things people conflate — historical vs. current.

Funding rate history (the settled rates every 8 hours):

GET https://fapi.binance.com/fapi/v1/fundingRate?symbol=BTCUSDT&limit=100

Note the camelCase path: /fapi/v1/fundingRate (not fundingrate). limit defaults to 100, max 1000; startTime/endTime page through history. Each row:

{ "symbol": "BTCUSDT", "fundingTime": 1719878400000, "fundingRate": "0.00010000", "markPrice": "63700.00" }

Current / predicted funding rate and next funding time come from the premium index:

GET https://fapi.binance.com/fapi/v1/premiumIndex?symbol=BTCUSDT
{ "symbol": "BTCUSDT", "markPrice": "63700.00", "indexPrice": "63695.10",
  "lastFundingRate": "0.00010000", "nextFundingTime": 1719907200000 }

Other useful public endpoints

  • 24h tickerGET /api/v3/ticker/24hr?symbol=BTCUSDT — price change, high/low, volume over the rolling day.
  • Latest priceGET /api/v3/ticker/price?symbol=BTCUSDT — just the current price. Omit symbol for every pair at once.
  • Recent tradesGET /api/v3/trades?symbol=BTCUSDT&limit=1000 — last trades (max 1000).
  • Exchange infoGET /api/v3/exchangeInfo — every symbol, its filters, tick size and lot size. Call this once to know what’s tradable.
  • Server timeGET /api/v3/time — for clock-skew checks.

Rate limits, in plain terms

Binance uses a weight system, not a simple request count. Spot allows roughly 1,200 weight per minute per IP; most simple calls cost 1–2 weight, depth?limit=5000 costs 250, and an all-symbols ticker costs a lot. The response headers (X-MBX-USED-WEIGHT-1M) tell you how much you’ve spent. Blow the budget and you get a 429; keep ignoring it and you earn a temporary IP ban (418). Practical rules:

  • Cache exchangeInfo; don’t re-request it every loop.
  • Prefer a single limit=1000 klines call over a hundred small ones.
  • Watch the used-weight header and back off before you hit the ceiling.
  • Geo-blocked? Move to data-api.binance.vision for market data.

Run the Binance Spot Market Scraper — klines, depth, trades and tickers for any symbol set, weight-aware and paginated, exported as clean rows. No API key; it manages the rate-limit budget and the mirror fallback for you.

When to use the API directly vs. a managed scraper

For a one-off — a single symbol’s last 1,000 candles, one order-book snapshot — hit the endpoint directly; it’s a curl away and free. The managed path earns its place when you need breadth or schedule: hundreds of symbols pulled on a cron, history backfilled across startTime/endTime windows, weight budgeting so you never eat a ban, the geo mirror fallback, and flat rows written straight to a dataset instead of arrays-of-arrays you have to decode. That’s the difference between a snippet and a pipeline.

{
  "symbol": "BTCUSDT",
  "interval": "1h",
  "open_time": "2026-07-03T00:00:00Z",
  "open": 63500.0, "high": 63780.1, "low": 63410.0, "close": 63690.5,
  "volume": 812.4, "quote_volume": 51700000.0, "trades": 41230,
  "scraped_at": "2026-07-03T01:00:05Z"
}

For the narrative version — why the public endpoints exist and how to build on them without keys — see How to Scrape Binance Spot Market Data and Binance Market Data Without API Keys.

FAQ

Does the Binance klines/depth API need an API key? No. All market-data endpoints (klines, depth, trades, tickers, funding rate) are public. Keys are only for account and trading endpoints.

What’s the max limit for klines and depth? Klines: 1000 candles per call. Depth: limit must be one of 5/10/20/50/100/500/1000/5000, and higher limits cost more rate-limit weight.

Why is api.binance.com blocked for me? Regional restrictions. Use the https://data-api.binance.vision mirror for the same public market-data paths.

Where is the funding rate endpoint? Futures, not spot: https://fapi.binance.com/fapi/v1/fundingRate for history, /fapi/v1/premiumIndex for the current rate and next funding time.

Related guides