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 whereapi.binance.comis blocked. If a request toapi.binance.comreturns451/403for geo reasons, swap the host todata-api.binance.visionand 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.interval—1s,1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M.limit— number of candles. Default500, max1000. Ask forlimit=2and you get the last two candles;limit=1000gets 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:
| Index | Field |
|---|---|
| 0 | Open time (ms) |
| 1 | Open |
| 2 | High |
| 3 | Low |
| 4 | Close |
| 5 | Volume (base asset) |
| 6 | Close time (ms) |
| 7 | Quote asset volume |
| 8 | Number of trades |
| 9 | Taker buy base volume |
| 10 | Taker buy quote volume |
| 11 | Ignore |
[
[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:
limit | Request weight |
|---|---|
| 5 – 100 | 5 |
| 500 | 25 |
| 1000 | 50 |
| 5000 | 250 |
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 ticker —
GET /api/v3/ticker/24hr?symbol=BTCUSDT— price change, high/low, volume over the rolling day. - Latest price —
GET /api/v3/ticker/price?symbol=BTCUSDT— just the current price. Omitsymbolfor every pair at once. - Recent trades —
GET /api/v3/trades?symbol=BTCUSDT&limit=1000— last trades (max 1000). - Exchange info —
GET /api/v3/exchangeInfo— every symbol, its filters, tick size and lot size. Call this once to know what’s tradable. - Server time —
GET /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=1000klines 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.visionfor 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
App Store Data API Alternative: ASO Metadata Beyond iTunes
Apple's iTunes Search and Lookup API is rate-limited and thin. Here's an App Store data API alternative that returns full reviews, rankings, and keyword signals for ASO.
Binance Market Data Without API Keys: Spot Prices and Funding in 2026
How to pull Binance spot prices, order books and funding data without API keys — using the public REST surface, its weight limits and region blocks explained.
CoinGecko API Alternative: Exchange Data Without Rate-Limit Pain
A CoinGecko API alternative for exchange and market data — why the free Demo tier's ~30 calls/min and Pro-gated fields force you to the public pages instead.