Skip to content

Klondike Market Data API

Real-time crypto market data consolidated across about forty centralized venues (Binance, OKX, Bybit, Coinbase, Kraken, Bitstamp, Hyperliquid...):

  • Trades of every venue for a symbol, each with its venue and aggressor side.
  • Merged order books: the books of every venue merged into one, every level with the venue it comes from, and the best bid and ask of each venue.
  • Market overview: for the pairs Klondike follows permanently, what a market order of 100 k$, 1 M$ or 10 M$ really costs on the merged book and on the best single venue (taker fees included), the depth within ±10 bps, the crosses between venues net of fees, the basis of perpetuals, the venues setting the best price, stablecoin pegs, implied FX rates and triangles.

Snapshots over REST, streams over WebSocket in JSON or Cap'n Proto, with client libraries for Python, JavaScript, Go and Rust.

Quick start

  1. Sign in on the portal and create an API key (see Authentication).
  2. Call the API with the key in the X-API-Key header:
export KLONDIKE_API_KEY=kl_...
curl -H "X-API-Key: $KLONDIKE_API_KEY" \
  "https://api.klondike-crypto.com/v1/orderbook?symbol=BTC/USDT&depth=5"
{"symbol": "BTC/USDT", "ts": 1793706479000,
 "venues": [{"venue": "binance", "ts": 1793706478950, "bid": 104250.0, "bidQty": 1.2, "ask": 104250.1, "askQty": 0.8}, ...],
 "bids": [{"price": 104250.0, "qty": 1.2, "venue": "binance"}, ...],
 "asks": [{"price": 104250.1, "qty": 0.8, "venue": "binance"}, ...]}
  1. Or use a library:
from klondike import Client

client = Client("kl_...")
book = client.orderbook("BTC/USDT", depth=5)
print(book.bids[0].venue, book.bids[0].price)
import { KlondikeClient } from "@klondike-trading/klondike";

const client = new KlondikeClient({ apiKey: "kl_..." });
const book = await client.orderbook("BTC/USDT", { depth: 5 });
console.log(book.bids[0].venue, book.bids[0].price);
c := klondike.New("kl_...")
book, err := c.Orderbook(ctx, "BTC/USDT", &klondike.OrderbookOptions{Depth: 5})
fmt.Println(book.Bids[0].Venue, book.Bids[0].Price)
use klondike::{Client, OrderbookOptions};

let client = Client::new("kl_...");
let opts = OrderbookOptions { depth: Some(5), ..Default::default() };
let book = client.orderbook("BTC/USDT", opts).await?;
println!("{} {}", book.bids[0].venue, book.bids[0].price);

Conventions

Symbols unified CCXT symbols: BTC/USDT (spot), BTC/USDT:USDT (linear perpetual), BTC/USD:BTC (inverse perpetual)
Venues CCXT exchange ids: binance (spot), binanceusdm (USDⓈ-M futures), krakenfutures, kucoinfutures...
Timestamps milliseconds since the Unix epoch, UTC; the exchange time when the venue gives one
Prices in the quote currency of the symbol
Quantities in the base currency; in USD for inverse perpetuals, as on the venues
Costs in basis points (bps) of the consolidated mid

The data is what the venues publish, normalized, not filtered: a book can be stale or crossed. The overview flags the data quality of each pair (status, reasons) and tells a cross between venues from a stale book.