Skip to content
Public API

Developer Reference

Public JSON endpoints expose the market data ByKaranteli records: the symbols board, funding, open interest, liquidations, options, ETF flows and positioning. CORS-enabled, rate-limited, cached. Browsers on this site need nothing; programs send a free account key (Authorization: Bearer) from 2026-09-10, and paid plans raise the rate and add member depth. Attribution in embedded content is required on the Free plan.

Quick facts

Rate limit
30 / min per key (Free)
60 on Terminal, 300 / 1,200 / 3,000 on Builder, Business and Scale; honor retry-after
Cache
5 min TTL
Cache-Control: public, max-age=300
CORS
Allow-Origin: *
GET + OPTIONS preflight supported
Auth
Bearer key
free with a verified account; required for programs from 2026-09-10
Formats
JSON · CSV
JSON everywhere; ?format=csv on symbols, heatmap, top-movers, correlations and every dataset (/api/v1/public/datasets)
RSS
archived daily market briefs

Quick examples

Common questions, each answered by one call. The command is the same one listed under its endpoint below; the MCP tool gives the same answer inside an assistant.

How much was liquidated today, and on which exchange?

Real liquidation events from eleven exchange feeds in one call, split by venue and side, plus a permanent daily rollup; a floor, not the sector total.

Page: /liquidationsMCP tool: get_liquidations
Request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/liquidations | jq '{recorded, market_estimate, by_exchange}'

Where do BTC liquidations sit around the price, and how much on each side?

Liquidation clusters by price level for 201 perpetuals, a six-venue model with real liquidation prints overlaid.

Page: /liqmapMCP tool: get_liqmap
Request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/liqmap/public?symbol=BTC' | jq '.real_levels.totals'

Which perps carry the most extreme funding right now, positive or negative?

Funding rate per symbol for the most traded Binance USDT-M perps, colour coded, with the open interest change beside it.

Page: /heatmapMCP tool: get_funding_heatmap
Request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/heatmap | jq '.rows[:5]'

Where are the BTC options call and put walls?

Open interest walls by strike, dealer gamma exposure, max pain per expiry and DVOL from the Deribit, Bybit, Binance, OKX and Delta Exchange option chains, summed or one venue at a time.

Page: /optionsMCP tool: get_options_snapshot
Request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" "https://bykaranteli.com/api/public/options?venue=all" | jq '.assets.BTC | {venues_included, call_wall, put_wall}'

How much flowed into or out of the US spot bitcoin ETFs on the last trading day?

US spot BTC, ETH, SOL and XRP ETF daily net flows with a per fund matrix and a check against the issuer's own figures.

Page: /etfMCP tool: get_etf_flows
Request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/etf | jq '{btc: .assets.BTC.latest_finalized, issuer: .issuer_check}'

Has an exchange paused withdrawals or deposits for an asset?

Withdrawal and deposit status per asset and network on every venue we read, since when, with each venue's withdrawal fee and minimum and a suspension log.

Page: /withdrawalsMCP tool: get_withdrawal_status
Request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/withdrawals?asset=USDT' | jq '.rows[:5]'

Plans for programs

From 2026-09-10 every call from a program (anything that is not a browser on this site) carries an account key: Authorization: Bearer bk_... A free key comes with any verified account. Paid plans buy rate, member depth and licence; people reading the site pay nothing.

PlanPriceRateMonthly quotaDepthKeysLicencex402 catalog
Free API$030 / min15,000 / monthpublic pages1personal and research, attributionper call
Terminalsee pricing60 / min150,000 / monthpublic pages1personalper call
Builder$49 / mo · $470 / yr300 / min1,000,000 / month fair usemember: LiqMap 7 timeframes and filters, 1m, 3m, 5m, 10m series, 5,000 bars2personal1,000 / month · last 90 days · up to 5,000 rows a call · raw records per call
Business$149 / mo · $1,430 / yr1,200 / min3,000,000 / month fair usemember5commercial10,000 / month · last 365 days · up to 20,000 rows a call · raw records + monthly bulk
Scale$399 / mo · $3,830 / yr3,000 / min10,000,000 / month fair usemember10commercial + derived redistributionno ceiling · whole archive · up to 20,000 rows a call · raw records + monthly bulk
Enterprisefrom $4,800 / yrcustomcustommembercustomcustom licence, SLAno ceiling · whole archive · up to 20,000 rows a call · raw records + monthly bulk

Members active on 2026-09-10 keep Builder rights for the rest of their paid period. Prepaid x402 keys and per-call USDC payment stay for anonymous agents. Enterprise: support@bykaranteli.com.

Get a free key · Choose a plan

Stream (WebSocket)

One socket instead of polling. Event channels (liquidations, whales, hl_whales, alerts, desk, candles) arrive as they happen: liquidation prints from ten venues, $1M+ whale prints, Hyperliquid whale position events, the desk's notes as they are published and your own alert firings. Snapshot channels (pressure, oi, funding, liqmap, turkey, tokenized) arrive only when the payload changes. Paid plans only: Builder gets a taste, Business opens every channel.

Endpoint
wss://bykaranteli.com/ws/v1
Authentication

Send your account key on the handshake as Authorization: Bearer bk_... or x-api-key: bk_... (the same key as the REST API). Keys in the query string are refused. Free and Terminal keys get 403 plan_required.

Quick start: connect, authenticate, subscribe

wss://bykaranteli.com/ws/v1
Authorization: Bearer bk_...
{"op":"subscribe","channel":"liquidations","symbols":["BTCUSDT"],"min_notional":50000,"id":"a1"}

Channels

ChannelTypeWhat arrivesFilters
liquidationseventExchange-reported liquidation prints from Binance, Bybit, OKX, Gate, HTX, dYdX, Aster, Lighter, Kraken Futures and GMX, normalized: venue, symbol, side, price, qty, notional, ts (Deribit publishes with a delay and is not streamed)symbols, venues, min_notional
candleseventBinance USDT-M perp one-minute candles as they form: open, high, low, close, quote volume, taker buy volume and a closed flag, at most twice a second per symbol; the SuperChart folds them into any bar periodsymbols (required)
whaleseventAggressive market prints of $1M+ from our own trade sockets on Binance, Bybit, OKX, Gate, Bitget, HTX, MEXC and Hyperliquid perps and Coinbase and Kraken spotsymbols, min_notional
hl_whaleseventHyperliquid whale position events: opened, increased, reduced, closed, flipped, with size before and after, notional, entry and liquidation pricecoins, kinds
deskeventDesk notes as they are published: slug, publish time, headline, text, news value, the board and the coins the note names, the permanent URL; same fields as GET /api/public/desknone
alertseventYour own alert recipes as they fire (same triggers as email and push): recipe id, name, symbols, fired_atnone
pressuresnapshotDerivatives pressure score per symbol; same payload as GET /api/public/pressure/{symbol}symbols (required)
oisnapshotOpen interest board; same payload as GET /api/public/oinone
fundingsnapshotCross-exchange funding and arbitrage board; same payload as GET /api/public/funding-arbnone
liqmapsnapshotLiqMap levels for a coin and timeframe; same payload as GET /api/liqmap/publiccoins (required), timeframe (default 24h)
turkeysnapshotTurkey premium board: TRY and USDT reference prices, per-venue statuses and premiums in bps; same payload as GET /api/public/turkey-premiumnone
tokenizedsnapshotTokenized stocks board: onchain and exchange wrappers of listed shares per underlying, with issuer, chain or venue, price, reference price, premium in percent, supply and as_of; same payload as GET /api/public/tokenized-stocksnone

What each plan can open

PlanConnections per accountSubscriptions per connectionChannelsSymbols per subscriptionReplay
Free API, Terminalnone
Builder13liquidations, candles3, namednone
Business550all 125015 minutes
Scale20200all 1220060 minutes
Enterprise501,000all 121,00024 hours

Protocol

  • JSON text frames, one message per frame, at most 4 KB from the client. The first frame from us is hello with your plan's limits and channels.
  • subscribe returns subscribed with a sub id; unsubscribe by that id; list shows what is open; ping answers pong.
  • Event channels send event frames with seq, the source row id. Reconnect with since = the last seq you handled and the plan's replay window is filled in before live traffic (Business and above).
  • Snapshot channels send one snapshot right after subscribe (when cached) and then only when the payload changes, with a hash you can compare. Payloads are the same as the REST route, so parsing is shared.
  • We send a WebSocket ping every 25 seconds; libraries answer automatically. No pong for 60 seconds closes the connection.
  • A deploy sends reconnect then closes with 1012. Reconnect after retry_in_ms with backoff and your since; nothing inside the replay window is lost.
  • Snapshot channels are capped per account at distinct targets (Business 100, Scale 400, Enterprise 1,000 symbols or coins across pressure, oi, funding and liqmap); above that you get snapshot_limit. A client that stops reading gets slow_consumer and close 1008. Usage is metered per key: connections, frames and connected seconds show on /dashboard/api. Snapshot reads do not count against your REST rate.

Examples

Python (websockets)
import asyncio, json, websockets  # websockets >= 14

async def main():
    async with websockets.connect(
        "wss://bykaranteli.com/ws/v1",
        additional_headers={"Authorization": "Bearer bk_..."},
    ) as ws:
        print(json.loads(await ws.recv())["type"])  # hello
        await ws.send(json.dumps({"op": "subscribe", "channel": "liquidations",
                                  "symbols": ["BTCUSDT", "ETHUSDT"], "min_notional": 50000}))
        async for raw in ws:
            msg = json.loads(raw)
            if msg["type"] == "event":
                d = msg["data"]
                print(msg["seq"], d["venue"], d["symbol"], d["side"], d["notional"])
            elif msg["type"] == "reconnect":
                break  # reconnect after retry_in_ms with since=<last seq>

asyncio.run(main())
Node (ws)
import WebSocket from "ws";

const ws = new WebSocket("wss://bykaranteli.com/ws/v1", { headers: { Authorization: "Bearer bk_..." } });
ws.on("open", () => ws.send(JSON.stringify({ op: "subscribe", channel: "hl_whales", coins: ["BTC"], kinds: ["opened", "flipped"] })));
ws.on("message", (raw) => {
  const m = JSON.parse(raw.toString());
  if (m.type === "event") console.log(m.seq, m.data);
  if (m.type === "snapshot") console.log(m.channel, m.key, m.hash);
});

Errors

CodeWhereMeaning
401 missing / invalid / revokedhandshakeNo usable key on the Authorization or x-api-key header; the body carries reason next to code (none, empty_authorization, empty_x_api_key, malformed_authorization, malformed_x_api_key or non_bearer_scheme).
403 plan_requiredhandshakeFree and Terminal keys cannot open the stream.
429 connection_limithandshakeThe account already holds its plan's connections.
429 handshake_ratehandshakeMore than 20 handshakes a minute from one address.
channel_not_in_planframeThe channel is above this plan (Builder: liquidations only).
symbols_required / too_many_symbolsframeThis channel or plan needs a named list, or the list is longer than the plan allows.
subscription_limit / snapshot_limitframeThe connection holds its plan's subscriptions, or the account holds its plan's snapshot targets.
replay_not_in_plan / replay_windowframesince needs Business or above; replay was not available.
bad_json / bad_op / bad_filter / unknown_channel / unknown_subscriptionframeThe frame did not parse or referenced something unknown.
slow_consumer (close 1008)connectionYour client stopped reading; reconnect and subscribe to less.
key_revoked / plan_expired (close 1008)connectionLive connections re-check the key and plan every 5 minutes; a revoked key or a plan without the stream is closed.
plan_changed (reconnect, close 1008)connectionThe plan behind the key changed; reconnect and the new limits apply.
reconnect (close 1012)connectionWe are restarting; come back after retry_in_ms with since.

Licence and attribution rules are the same as the REST API. Raw trades and order books are not streamed: exchanges publish those for free and our value is the cross-venue events and the model output.

Chart address keys

Every SuperChart view is a URL: the keys below select the symbol, the period, the panes, the layers and the studies, so a link opens exactly what you saw and an agent can hand a reader the chart that matches an answer (the MCP and API provenance carries it as chart_url). The share card at /api/og/chart reads the same keys.

KeyWhat it selectsExample
sSymbol, a USDT perp ticker; BTCUSDT when absents=ETHUSDT
pBar period, 1m to 1M (sixteen values, the API's SERIES_PERIODS)p=4h
panesRecorded panes under the price, comma list: oi, funding, funding_agg, cvd_perp, cvd_spot, liquidations, long_short, top_traders, rsi, premium, etf_flow, whale_net, borrowpanes=oi,funding,liquidations
taBuilt-in studies: MA, EMA, BOLL, SAR, VOL, RSI, MACD, KDJta=VOL,MA
vVenue of the open interest and funding panes (the 10-minute venue recorder)v=bybit
rVisible window, unix seconds from and to; absent means the live right edger=1759000000..1759100000
lv, lvx, lvvOptions levels on (BTC and ETH), the expiry code, the venue (all or one of deribit, bybit, binance, okx, delta)lv=1&lvx=31OCT26&lvv=deribit
evMacro event marksev=1
heat, prThe liquidation heatmap and the real prints behind and on the candles; 0 hides oneheat=1&pr=0
pmin, psidePrint floor in USD and side: l longs liquidated, s shorts liquidatedpmin=100000&pside=l
hw, rvHyperliquid whale position marks, recorded event marks (bursts and $1M prints)hw=1&rv=1
vp, log, npocVisible-range volume profile, log price scale, naked points of controlvp=1&log=1&npoc=1
awAnchored VWAP anchor, unix seconds of the candleaw=1759000000
cmpCompare pane symbols, up to two, percent change next to the chart's symbolcmp=ETHUSDT,SOLUSDT
Example
https://bykaranteli.com/chart?s=ETHUSDT&p=4h&panes=oi,funding&ta=VOL&heat=1&pr=1&lv=1&vp=1&aw=1759000000

The share card: /api/og/chart?s=ETHUSDT&p=4h&heat=1&pr=1&log=1&aw=1759000000&vp=1&lv=1 returns the view as a PNG card (candles, heatmap, prints, VWAP, profile and levels), cached for an hour.

MCP server · use this data inside AI assistants

bykaranteli-mcp is an official MCP (Model Context Protocol) server that exposes this API as 68 tools inside Claude, Cursor and any other MCP-capable assistant: market indices, funding heatmap and arbitrage, pressure scores, top movers, the symbols board, daily liquidations and cascades, ETF flows, COT positioning, options snapshot and tape, Coinbase premium, flow toxicity, slippage ladders, FOMC impact, open interest, whale tape, lead-lag, correlations, IV surface, macro liquidity, network health, new listings, venue markets, quantum exposure, the LiqMap liquidation clusters and more. Free account key (BYKARANTELI_API_KEY), Node 18+. Beyond the boards: get_series returns any recorded series by metric, symbol and period, parse_alert_text turns a sentence such as "BTC funding above 0.05%" into an alert, and the account tools list and change your own alerts and watchlist with the same key (the tools that change something are marked as writes, count on your plan and are recorded on your account). Every market answer carries a provenance block: the venues behind the number, full or sampled coverage, freshness and the proof page.

Hosted endpoint · no install (claude.ai web, mobile, hosted agents)

Paste https://mcp.bykaranteli.com as a custom connector (claude.ai: Settings > Connectors > Add custom connector). Same 68 tools, nothing to install. Under Authentication pick Sign in and leave any OAuth Client ID and Client Secret fields empty: the server supports OAuth 2.1 sign-in and claude.ai registers itself. A tool call without a key answers 401 with a WWW-Authenticate challenge that starts the sign-in. A key still works: pick "No sign-in" and add the request header x-api-key: bk_... (claude.ai custom connectors; Authorization: Bearer bk_... in other clients), or, in a client that cannot send headers (ChatGPT), use the address https://mcp.bykaranteli.com/?key=bk_... and treat it like a password. A free account carries 15,000 calls a month, API and MCP on one counter; Builder and above bring higher rates and member depth. Keys: https://bykaranteli.com/dashboard/api. New to this? The step-by-step guide: https://bykaranteli.com/guide/connect

Claude Code
claude mcp add bykaranteli -e BYKARANTELI_API_KEY=bk_... -- npx -y bykaranteli-mcp
Claude Desktop · claude_desktop_config.json
{
  "mcpServers": {
    "bykaranteli": { "command": "npx", "args": ["-y", "bykaranteli-mcp"] }
  }
}

Source and docs: github.com/bykarantelicom/bykaranteli-mcp · npmjs.com/package/bykaranteli-mcp

Pay-per-call endpoints for agents (x402)

These endpoints go deeper and price each call in USDC over the x402 protocol, so an autonomous agent can buy one answer without an account, an API key or a subscription. Payment settles onchain per request; there is nothing to sign up for on either side. A paid call reads the whole archive at the route's own row cap for $0.10. Builder keys and above run the same routes unpaid on the plan: Builder 1,000 catalog calls a month over the last 90 days at up to 5,000 rows a call, summary series only; Business 10,000 a month over the last 365 days at up to 20,000 rows, raw records included; Scale and Enterprise with no ceiling over the whole archive. The window counts from 00:00 UTC of its first day, and each included call also counts as 10 requests of the plan's monthly fair use. Raw records (individual liquidation events and the largest-print ranking, whale prints, Hyperliquid position events and hourly position records, order book snapshots, minute bars and per-venue market snapshots: liquidations-raw, liquidation-leaderboard-history, hl-whale-events, hl-positions-history, orderbook-history, spot-microstructure, venue-markets-history, whale-trades-raw) are included from Business up. A route's history_since is its first recorded row; an included call reads from the plan's window start (x-history-window-days). Past the ceiling (x402_allowance_used, HTTP 402), before the window (history_window, HTTP 403) or on a raw record route below Business (raw_tier_required, HTTP 403), the call is paid per call: send the account key as Authorization: Bearer with a prepaid key in x-api-key, or send the call without the account key and pay the 402 with a wallet. Bulk exports are on Business and above, outside the ceiling, and list the months that reach into the plan's window.

Settlement

USDC on Solana mainnet or Base mainnet · price quoted per call · network fees covered by the facilitator

/api/x402/liqmap-levels$0.100

Full multi-exchange liquidation map: modeled leverage clusters, real forceOrder levels, top magnets, funding and orderbook context.

/api/x402/options-flow$0.100

Recorded Deribit and OKX tape: daily premium-flow history, the full big-print list with strike, expiry and implied volatility, the 1h, 4h and 24h bought, sold and net premium, the expiry, strike and venue breakdowns and the latest multi-leg structures.

/api/x402/flow-vpin$0.100

VPIN order flow toxicity history: the 90 day daily track plus the last 500 volume buckets.

/api/x402/cot-history$0.100

CFTC Commitments of Traders weekly history for crypto futures, assembled and normalised.

/api/x402/liquidations-raw$0.100

Individual liquidation events from our own sockets on Binance, Bybit, OKX, Gate, HTX, dYdX, Aster, Lighter, Kraken Futures and GMX (Deribit delayed), with millisecond timestamps.

/api/x402/liquidation-leaderboard-history$0.100

Per-day ranking of the largest single liquidation prints across Binance, Bybit, OKX, Gate, HTX, dYdX, Aster, Lighter, Kraken Futures and GMX: up to 100 ranks per finalized UTC day since 2026-08-29, with symbol, venue, side (SELL = a long was liquidated), price, quantity, notional and millisecond event time, filterable by symbol and venue. The free CSV carries the top 10 per day; the free page and API rank only the last 24 hours to 30 days.

/api/x402/networks-history$0.100

Every recorded version of each asset and network row on every venue we record (20+ exchanges): deposit flag, withdrawal flag, withdrawal fee and minimum, with valid_from and valid_to, so withdrawal suspensions can be dated and their duration measured. The free endpoint serves only the current table.

/api/x402/leverage-tiers-history$0.100

Every recorded version of each perpetual's leverage ladder on every venue whose ladders we read: tier, notional floor and cap, maximum leverage and maintenance margin, with valid_from and valid_to so leverage cuts can be dated. The free endpoint serves only the current ladder.

/api/x402/oi-history$0.100

Five minute open interest history for the major perpetuals, normalised across symbols in one query.

/api/x402/tradfi-oi-history$0.100

Five minute open interest history for the top-40 Binance TradFi perpetuals (US, HK, KR and CN equities, commodities, indices) in base units and USD, recorded on our side from 2026-09-02; the free /api/public/tradfi board only carries the live value.

/api/x402/tradfi-funding-history$0.100

Settled funding rate history of every Binance TradFi perpetual on our board (stocks, indices, commodities), one row per settlement since 2026-05-31 or the contract's listing, kept current hourly; the free board only carries the last settled rate.

/api/x402/indicators-events$0.100

Every day since 2012 on which a Bitcoin cycle indicator crossed a canonical band (Pi Cycle top cross and reset, Mayer Multiple 2.4 and 0.8, Puell Multiple 4 and 0.5, 200-week MA, 2-year MA x5, golden ratio 1.6/2/3/5, profitable days 95% and 50%), with the BTC close that day and the forward 7, 30, 90, 180 and 365-day returns. From recorded daily closes (Bitstamp 2012-2017, Binance since); the free endpoint carries the levels without the event tape or forward returns.

/api/x402/rsi-history$0.100

Hourly RSI(14) rows on eight intervals for the top-400 crypto perps by volume plus every TradFi perp, the board behind /rsi.

/api/x402/hl-whale-events$0.100

Every recorded position change of the 1000 largest Hyperliquid accounts: opened, closed, increased, reduced, flipped, with size before and after, entry and liquidation price.

/api/x402/hl-positions-history$0.100

Every open position of the 1000 largest Hyperliquid accounts once an hour, recorded since 2026-09-30: address, coin, signed size, notional, entry and liquidation price, leverage and account equity, by coin, address and time.

/api/x402/positioning-history$0.100

Hourly long/short ratios, top-trader ratios and taker flow for 30 perps on Binance, Bybit, OKX, Gate, HTX, Bitget and Kraken Futures, plus Bitfinex spot margin long and short position sizes and GMX and Jupiter Perps long and short open interest, recorded on our side.

/api/x402/bulk-liquidations$15

Monthly gzip CSV files of every liquidation event we recorded (exchange, symbol, side, price, qty, quote_qty, event_time) across Binance, Bybit, OKX, Gate, HTX, dYdX, Aster, Lighter, Kraken Futures, GMX and Deribit: about 1.5 million rows per month since 2026-08-02. One paid call returns one-hour signed download links for every finalized month plus the current month to date; the per-call /api/x402/liquidations-raw route returns at most 20k rows a call.

/api/x402/bulk-derivatives$10

Monthly gzip CSV files of the derivatives tables: 5-minute Binance open interest per symbol (oi-5m), every Binance USDT-M funding settlement of the month (funding-settlements) and the 10-minute multi-venue market snapshots (venue-snapshots: price, volume, OI and funding for every venue feed we poll, exchanges and DEXs). One paid call returns one-hour signed links for every finalized month plus the current month to date.

/api/x402/bulk-flow$10

Monthly gzip CSV files of the flow tables: $1M+ aggressive prints from our own trade sockets (whale-trades), Hyperliquid top-1000 position change events (hl-whale-events), hourly long/short and taker statistics (positioning-hourly) and hourly RSI on eight intervals (rsi-hourly). One paid call returns one-hour signed links for every finalized month plus the current month to date.

/api/x402/jupiter-history$0.100

Hourly Jupiter Perps history per market (SOL, ETH, BTC) and metric: long and short open interest from the on-chain custody state (long = locked tokens x mark price since 2026-09-30; long_oi_guaranteed_usd keeps the earlier measure), pool utilization, hourly borrow rates, custody AUM, price and 24h volume, plus JLP AUM, price and APR under market JLP; recorded from 2026-09-02. The free /api/public/jupiter returns the live board and 30 days of hourly OI.

/api/x402/market-profile-history$0.100

Daily Market Profile per perpetual from our own minute bars: 30-minute TPO periods over price buckets a fixed fraction of the day's open, the point of control, the 70% value area (VAH, VAL), the initial balance (first hour UTC), the volume point of control and the per-bucket profile. One symbol per call, newest first; BTC from 2024, other symbols from their recorder's start. The free /api/public/market-profile serves 30 days without the profile column.

/api/x402/venue-share-history$0.100

Hourly recorded liquidations per counted venue (Binance, Bybit, OKX, Gate, HTX, dYdX, Aster, Lighter, Kraken Futures, GMX and Deribit): long and short USD, events, largest single print, symbols, the hour's total over the counted venues and the venue's share of it; a venue's hours start on its first counted day. Newest first, recorded since 2026-08-29. The free /api/public/venue-share serves 24h, 7d, 30d and 30 daily rows.

/api/x402/solana-perps-history$0.100

Hourly history of every Solana perp venue on the board but Jupiter (jupiter-history): Pacifica, Phoenix, GM Trade, Velocity and Bullet, per market and metric: one-sided open interest in USD (both sides on pool venues), 24h volume, hourly funding in percent of position size (empty where the venue publishes only an accumulator), mark, and Phoenix's raw funding accumulator; recorded from 2026-09-25. The free API returns the live board and seven days of one market.

/api/x402/turkey-premium-history$0.100

Minute history of the Turkey premium index (from 2026-09-17): TRY and USDT reference prices from 11 Turkish spot venues (median mid of eligible books), eligible and observed venue counts, status, the Binance global USDT price, the ECB USD/TRY fix, premium in basis points, index_bps and the Turkey Premium Index; per-venue book rows with exchange=<venue>. The free /api/public/turkey-premium returns the live board and 15-minute points for up to 30 days.

/api/x402/desk-notes-history$0.100

The desk notes archive since 2026-10-12: every note with its publish time, data time, news value, board, coins, English and X text and the zh, ru and ko translations; coin, card type and time filters.

/api/x402/insurance-fund-history$0.100

Hourly insurance fund readings per pool on Binance, Bybit, OKX, Gate, MEXC, Bitfinex, Crypto.com, Delta Exchange, dYdX and Paradex: balance, USD value and contracts covered, with venue and asset filters.

/api/x402/tokenized-stocks-history$0.100

Hourly readings per tokenized stock wrapper from xStocks, Robinhood Stock Tokens, Coinbase Tokenized Stocks, Binance bStocks, Ondo Stocks, Backpack Securities, Reality (Bitget), Superstate Opening Bell, Figure, Dinari dShares and Securitize (Exodus): price, reference, premium, liquidity and 24h volume, one wrapper per call with chain, issuer and day filters.

/api/x402/prepaid-key$10

Prepaid API key: one payment mints a bk_live key loaded with $10 of credit. Send it as the x-api-key header on any route below and each call deducts its listed price, so scripts and agents make hundreds of calls after one settlement. ?key= tops up an existing key; /api/x402/prepaid-key/balance is free.

/api/x402/orderbook-history$0.100

Five minute spot order book depth snapshots per venue (Binance, Coinbase, Kraken, Bybit, OKX, Gate, MEXC, HTX, Bitget, Bitstamp, Gemini, Bitfinex, BingX, Crypto.com, Backpack, Binance US, Poloniex, LBank, Bitrue, XT, HashKey, DigiFinex, Bullish, WEEX, Deribit, Aster, Bitvavo, Independent Reserve, BtcTurk) for ten coins: 0.1% bins within 20% of mid, 2% depth per side, book reach, in_aggregate per row, every row recorded since 2026-09-15.

/api/x402/funding-history$0.100

Settled funding rate history of every Binance USDT-M perpetual, crypto and TradFi, one row per settlement since 2026-05-31, kept current hourly: the series behind carry and basis work.

/api/x402/options-oi-history$0.100

Daily options open interest by strike and expiry on Deribit, Bybit, Binance, OKX and Delta Exchange with mark implied volatility, traded notional where published, and a venue filter.

/api/x402/options-chain-history$0.100

Hourly option chain rows per instrument on Deribit, Bybit, Binance, OKX and Delta Exchange, recorded since 2026-09-30: open interest, mark implied volatility, underlying and 24h volume, Deribit mark, bid and ask; currency, venue, expiry and time filters.

/api/x402/spot-microstructure$0.100

Minute bars with the taker buy versus total quote split, pre-joined across venues; Binance rows recorded since 2024-09-28.

/api/x402/venue-markets-history$0.100

Ten-minute venue snapshots of price, volume, open interest and funding for every perpetual, spot and TradFi perpetual feed we poll, every row recorded since 2026-08-25.

/api/x402/whale-trades-raw$0.100

Every $1M+ aggressive print from our own trade sockets with side, price, quantity and notional, every row recorded since 2026-08-13.

Machine-readable catalog: /api/x402
How a call works
# 1. Ask without payment: the endpoint answers 402 with machine-readable terms
curl -i https://bykaranteli.com/api/x402/flow-vpin

# 2. Any x402 client pays and retries automatically
npm i @x402/fetch @x402/core @x402/svm
# wrapFetchWithPayment(fetch, client) -> 200 + data, settled in USDC

Prices are per successful response: a failed request settles nothing. What you pay for is depth and history, never access: every live snapshot above stays free with an account key, within your plan's limits.

Before the examples: your key

Every example below reads your account key from the BYKARANTELI_API_KEY environment variable and sends it as Authorization: Bearer. A free key comes with any verified account: create it on your API page. Keep the key on your server or in your scripts and never put it in browser code, where anyone who opens the page can read it. The Proof API needs no account key. The pay-per-call routes under /api/x402 need none either: an agent pays each call in USDC, and a Builder key or above runs them unpaid on its plan: 1,000 catalog calls a month over the last 90 days on Builder (summary series), 10,000 over the last 365 days on Business (raw records included), no ceiling over the whole archive on Scale and above; each included call also counts as 10 requests of the monthly fair use.

export BYKARANTELI_API_KEY=bk_...
GET/api/public/symbols

Symbols board: recorded 24h ticker, funding rate, open interest change and the derivatives pressure score for every tracked Binance USDT-M perpetual.

Query parameters
NameTypeRequiredDescription
sortvolume | change | funding | oi | pressurenoBoard order. Default volume.
top1-1000noRows to return. Default 200.
formatcsvnoReturn the board as CSV instead of JSON.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/symbols?sort=change&top=20' | jq '.symbols[:5]'
Response shape (truncated)
{
  "generatedAt": "2026-09-05T09:00:00.000Z",
  "sort": "volume",
  "totalSymbols": 512,
  "symbols": [
    {
      "symbol": "BTCUSDT", "lastPrice": 109412.5, "change24hPct": 1.84,
      "quoteVolume24h": 21874112034.1, "fundingRatePct": 0.0081,
      "openInterestUsd": 12041233810.4, "oi24hPct": 2.1,
      "pressureScore": 61, "pressureDirection": "LONG",
      "pressureUpdatedAt": "2026-09-05T08:45:12.000Z"
    }
  ]
}
GET/api/public/market-profile

Market Profile of one Binance USDT-M perpetual from our own minute bars, one row per closed UTC day, newest first: poc (the price bucket with the most TPO marks), val and vah (the 70% value area), ib_low and ib_high (the first hour UTC), vpoc (the bucket with the most quote volume), open, high, low, close, tpo_total and periods. naked_pocs lists the points of control of the last 60 recorded days that no later closed day has traded through; profile_latest gives the latest day's [price, tpo, volume_usd] per bucket. 30-minute TPO periods, buckets of 0.05% of the day's open. Any key gets 30 days; up to 400 is member depth (a Terminal session or a Builder key and above). A symbol without recorded minute bars answers 404 no_profile. Every day's levels are in the market-profile-daily dataset; each day's full profile is on the paid route /api/x402/market-profile-history.

Query parameters
NameTypeRequiredDescription
symbolBTC | BTCUSDTnoPerpetual, with or without USDT. Default BTCUSDT.
days1-400noClosed UTC days, newest first. Default 30; more than 30 needs member depth.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/market-profile?symbol=BTC&days=5' | jq '{symbol, recorded_since, latest: .days[0], naked_pocs}'
GET/api/public/tradfi-gaps

Weekend and overnight gaps of the stock, index and commodity perpetuals against our own record of the US cash close: the reference is the median venue price in the last 10-minute snapshot before 16:00 New York. window=weekend (default, the last 12 weekends: sat_12, sun_12, sun_20, pre_open, open) or night (the last 20 nights after a Monday to Thursday close: utc_04, pre_open, open); open is the first snapshot after 09:30 New York. Each checkpoint carries price (the venue median), venues, spread_pct (highest minus lowest venue over the median), gap_pct, lo_pct and hi_pct against the reference. Without symbol: kpis, summary per underlying (median absolute gap at the lead point and at the open, same_direction_pct once 5 windows hold both readings, median spread) and latest, the newest window with every underlying; with symbol=TSLA: that underlying's summary and every window. Recorded since 2026-08-25; no holiday calendar. Every window and checkpoint is in the tradfi-gaps dataset; the raw 10-minute venue snapshots are on the paid route /api/x402/venue-markets-history.

Query parameters
NameTypeRequiredDescription
windowweekend | nightnoweekend (default) or night.
symbolTSLA | TSLAUSDTnoUnderlying such as TSLA, NVDA or XAU; a USDT suffix is dropped. Without it the answer is the summary and the latest window.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/tradfi-gaps?window=weekend&symbol=TSLA' | jq '.summary, .windows[0].symbols[0].points'
GET/api/public/venue-share

Share of each counted liquidation venue (Binance, Bybit, OKX, Gate, HTX, dYdX, Aster, Lighter, Kraken Futures, GMX and Deribit) in the recorded total over days=1 (default), 7 or 30: usd, long_usd, short_usd, events, share_pct, long_share_pct, since (the venue's first counted day when it falls in the window) and trend_pp (the share over the last 7 days minus the 7 before, null when the venue was not counted for the whole earlier span). daily is a day by venue share table for the last 30 UTC days (today partial); oi gives each venue's share of perp open interest in the latest hour and over 7 days. Shadow venues and venues without a public feed are not in the total. The day rows are the venue-share-daily dataset; hourly rows per venue with each hour's total are on the paid route /api/x402/venue-share-history.

Query parameters
NameTypeRequiredDescription
days1 | 7 | 30noLiquidation window in days. Default 1.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/venue-share?days=7' | jq '{total_usd, venues: [.venues[] | {exchange, share_pct, trend_pp}]}'
GET/api/public/pressure

Composite 0-100 derivatives pressure score for every tracked Binance USDT-M perpetual (OI delta 1h/4h/24h + funding rate + basis). Direction-aware regimes.

Query parameters
NameTypeRequiredDescription
limit1-200noMax rows. Default 60.
sidelong | shortnoFilter by direction bias.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/pressure?limit=20&side=long' | jq '.items[:5]'
Response shape (truncated)
{
  "generatedAt": "2026-04-23T20:47:28.616Z",
  "count": 60,
  "items": [
    {
      "symbol": "BARDUSDT",
      "score": 45, "direction": "SHORT", "regime": "SHORT_RAMP",
      "regimeLabel": "Net short bias building",
      "components": { "oi24hPct": -8.7, "oi4hPct": 1.5, "oi1hPct": 0.1, "fundingRatePct": -0.037, "basisPct": -0.19 },
      "explainer": [ "Open interest down 8.7% over 24h", "Funding rate -0.037% per interval" ]
    },
    …
  ]
}
GET/api/public/pressure/[symbol]

Per-symbol pressure snapshot with live refresh if cache stale.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/pressure/BTCUSDT
GET/api/public/funding-arb

Cross-exchange funding rate spread for top symbols across 33 exchanges (Binance, OKX, Bybit, Gate.io, HTX, BingX, Bitget, MEXC, Kraken Futures, Hyperliquid, Aster, dYdX, ApeX, Backpack, Bitfinex, Bitmart, BloFin, BTSE, Crypto.com, Delta Exchange, Deribit, DigiFinex, Extended, HashKey, KuCoin, Lighter, Paradex, Phemex, Toobit, WEEX, WhiteBIT, WOO X and XT) with net-of-cost annualized APR.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/funding-arb | jq '.rows[:5]'
GET/api/liqmap/public

Public LiqMap snapshot (24H): multi-exchange liquidation-level estimate for 201 major perpetuals (Binance, Bybit, OKX, Gate, HTX and Hyperliquid) with real liquidations overlaid. ?symbol=BTC..OP.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/liqmap/public?symbol=BTC' | jq '.real_levels.totals'
GET/api/public/heatmap

Funding snapshot for a fixed set of large Binance USDT-M perpetuals: per symbol the current funding rate, the 24h open interest change and the 24h price change; ?format=csv returns the same rows as CSV.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/heatmap | jq '.rows[:5]'
GET/api/public/top-movers

Top movers of the pressure board: the perpetuals with the largest absolute 24h open interest change (biggestOi24h), the most extreme funding rate (extremeFunding), the widest basis (widestBasis) and the highest pressure score (highestStress), each with its direction. ?format=csv returns the four lists as one CSV.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/top-movers | jq '.biggestOi24h[:5]'
GET/api/public/altseason

Altcoin Season Index: live reading, strongest and weakest large alts, recorded daily history.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/altseason | jq '.value'
GET/api/public/themes

Eight equal-weight narrative indices (AI, RWA, DePIN, meme, L1, L2, DeFi, quantum) with fixed baskets and daily points since 2025-01-01; add ?points=0 for the scoreboard only.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/themes | jq '.themes[] | {key, last, ret_30d_pct}'
GET/api/public/factors

Factor board: every recorded metric in its historical band with the median 7-day BTC move that followed versus the base rate.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/factors | jq '.rows[:5]'
GET/api/public/borrow-rates

Margin borrow rates: the latest annualised rate per venue and asset (USDT, USDC, BTC, ETH and major alts on every venue whose borrow history we can read), 30 days of hourly series for the stablecoins and majors, and the funding minus borrow carry per venue. Recorded hourly.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/borrow-rates' | jq '.latest[:5], .carry[:3]'
GET/api/public/fees

Trading fee schedules: base tier maker and taker per venue and market type (median across pairs where the venue prices per pair), read daily from each exchange's own fee endpoint, plus the fee change log.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/fees' | jq '.median_taker_perp, .rows[:5]'
GET/api/public/settlements

Expiry calendar and settlement prices: the next 60 days of dated future and option expiries across 53 venues' market lists, grouped by date, venue and underlying, plus the settlement prices recorded as dated futures deliver; recorded_venues counts the venues with a recorded price.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/settlements' | jq '.next_7d, .upcoming[:5], .recorded[:3]'
GET/api/public/venues/profile

One exchange, everything we record about it: contracts on file by type, basket open interest and average funding from the 10-minute venue recorder, leverage ladder summary, deposit and withdrawal network counts, base fee schedule, status uptime and the recent event log. ?venue=bybit; without a venue, the list of recorded venue ids. The JSON behind /venues/<venue>.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/venues/profile?venue=bybit' | jq '.instruments, .status, .events[:3]'
GET/api/public/withdrawals

Deposit and withdrawal networks on every venue we record, recorded daily as slowly changing rows: per asset and network the deposit flag, withdrawal flag, withdrawal fee and minimum, plus the log of suspensions and resumptions. Without filters: withdrawals paused right now, ranked. ?asset=USDT: every venue and network for that asset; ?venue=kucoin narrows.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/withdrawals?asset=USDT' | jq '.rows[:5]'
GET/api/public/leverage-tiers

Leverage ladders per perpetual on every venue whose ladders we read, recorded daily as slowly changing rows: tier, notional floor and cap, maximum leverage, maintenance margin rate, plus the change log of leverage cuts and raises. ?symbol=BTC narrows to one base asset, ?venue=okx to one exchange; without filters you get the cross-venue overview.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/leverage-tiers?symbol=SOL' | jq '.rows[:5]'
GET/api/public/venues/markets

Venue layer aggregates across every perpetual and spot feed we poll (listed in coverage): total perp OI, DEX share, funding range, spot dispersion, stablecoin pegs; ?symbol=BTC for one coin's rows. The venues in oi_excluded_venues (WhiteBIT, BitMart) are listed but left out of the OI totals and the DEX share.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/venues/markets | jq '.symbols[:3]'
GET/api/public/venues/lead-lag

Who moves first: one-minute return cross-correlations per venue pair and UTC day with the lead asymmetry.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/venues/lead-lag | jq '.pairs[] | {id, summary}'
GET/api/public/options/surface

IV surface by expiry and moneyness, per-expiry ATM / 25-delta put and call IV, skew and butterfly, constant-30d history; ?currency=BTC|ETH.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/options/surface?currency=BTC' | jq '{atm_30d, skew25_30d_pp}'
GET/api/public/options

Options snapshot across Deribit, Bybit, Binance, OKX and Delta Exchange: OI walls, dealer gamma exposure, zero-gamma level, term structure, and each venue's share in venues_included. DVOL is Deribit's index.

Query parameters
NameTypeRequiredDescription
venueall | deribit | bybit | binance | okx | deltanoOne venue's chain, or all (default) for open interest summed per expiry, strike and type with mark IV weighted by open interest. Anything else is a 400.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" "https://bykaranteli.com/api/public/options?venue=all" | jq '.assets.BTC | {venues_included, call_wall, put_wall}'
GET/api/public/options/chain

Hourly options chain across Deribit, Bybit, Binance, OKX and Delta Exchange, recorded since 2026-09-30: per expiry the open interest in coins and USD with its 1 hour and 24 hour change, the ATM IV and its 24 hour change and max pain; per contract the open interest and its changes, the mark IV and its 24 hour change and Deribit's mark, bid and ask in coins; and the hourly ATM IV path of one expiry over the last 24 hours. A change counts only the venues present in both hours. Any key gets the 40 contracts with the largest open interest; strikes=all returns every contract with member depth (a Terminal session or a Builder key and above).

Query parameters
NameTypeRequiredDescription
currencyBTC | ETHnoUnderlying, BTC by default. Anything else is a 400.
venueall | deribit | bybit | binance | okx | deltanoOne venue's chain, or all (default) summed per expiry, strike and type. Anything else is a 400.
expiryDDMONYYnoOne listed expiry such as 30OCT26: narrows the contracts and the ATM IV path. A malformed or unlisted expiry is a 400.
strikestop | allnotop (default) or every contract; all needs member depth.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/options/chain?currency=BTC&venue=all' | jq '{hour, spot, front_expiry, expiries: .expiries[:3], strikes: .strikes[:3]}'
GET/api/public/options-flow

Deribit and OKX options tape recorded every 15 minutes: premium, strikes, put/call, block trades, venue per print; windows (1h, 4h and 24h bought, sold and signed net premium per option type), by_expiry, by_strike, by_venue and the latest multi-leg structures with their legs and a structure label.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/options-flow | jq '.assets.BTC | {prints_24h, call_premium_bought_24h_usd, put_premium_bought_24h_usd, block_share_24h}'
GET/api/public/etf

US spot BTC, ETH, SOL and XRP ETF flows: today's provisional aggregate with the per-fund table, the last 30 finalized trading days, and the IBIT issuer check (BlackRock shares outstanding x NAV vs the tape).

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/etf | jq '{btc: .assets.BTC.latest_finalized, issuer: .issuer_check}'
GET/api/public/flow

Order-flow toxicity (VPIN) per major perp from taker-signed minute bars: the current reading, its percentile over the last 90 days with the 90th percentile threshold, the 24h average and the bucket size. The daily history is on the paid route /api/x402/flow-vpin.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/flow | jq '.symbols.BTCUSDT | {vpin, percentile_90d, avg_24h}'
GET/api/public/premium

Coinbase premium versus Binance and cash-and-carry basis, daily history back to 2017; Kimchi premium (Upbit, Bithumb, Coinone) and Turkey premium (BtcTurk) since 2026-08-21.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/premium | jq '.assets.BTC | {date, premium_pct, avg7_pct}'
GET/api/public/cot

CFTC Commitments of Traders for Bitcoin futures, weekly, backfilled to 2018.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/cot | jq '.assets.BTC | {report_date, hedge_funds_net_contracts, institutions_net_contracts}'
GET/api/public/events

Measured 5, 30 and 60-minute BTC reactions to FOMC statements (top level) and to CPI and jobs report releases (cpi, nfp), each with the next scheduled date, plus the dated macro calendar under events.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/events | jq '{fomc: .recent_reactions[:3], cpi_next: .cpi.next_release, nfp_next: .nfp.next_release}'
GET/api/public/slippage

Live execution slippage ladders by order size from real order books, recorded hourly.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/slippage | jq '.ladders[:3]'
GET/api/public/whales

Whale tape: $1M+ aggressive market prints from our own sockets with 24h aggregates and buy share.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/whales | jq '.window_24h'
GET/api/public/indicators

Bitcoin cycle indicators recomputed nightly from a first-party close record since 2012: Pi Cycle Top (with cross dates), Mayer Multiple, 200-week and 2-year MAs, golden ratio multiple, profitable days, stock-to-flow, Puell Multiple from our own node, Bitfinex margin positioning. ?days= window, ?points=0 for latest only.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/indicators?points=0' | jq '.latest, .pi_cycle_crosses'
GET/api/public/rsi

RSI heatmap: Wilder RSI(14) on eight intervals (15m to 1M) for the top-400 Binance USDT crypto perpetuals by volume plus every TradFi perp, with overbought and oversold counts per interval. ?symbol=, ?kind=crypto|tradfi and ?sort=<interval> filter and order.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/rsi?sort=4h' | jq '.summary, .rows[:5]'
GET/api/public/venues/oi-history

Multi-venue open interest history: hourly sum of perp open interest across every venue in our registry at the hour's most complete 10-minute snapshot (whitebit and bitmart excluded), the DEX share (the on-chain venues listed in dex_venues) and the current OI-weighted funding. ?days=1..90, default 30; recorded since 2026-08-21.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/venues/oi-history?days=7' | jq '.oi_weighted_funding_pct, .points[-1]'
GET/api/public/coverage

Coverage registry derived live: liquidation feeds per venue with kind (full, sampled, delayed, shadow, none), since date, 24h events and last record; 10-minute snapshot feeds per venue and market with symbol counts and last bucket; funding arbitrage legs, positioning sources, whale tape, spot minutes and the Hyperliquid whale scan with freshness.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/coverage | jq '.totals, .liquidations[:3]'
GET/api/series

Recorded time series behind the SuperChart, one shape for every metric. Parameters: metric (price, volume, cvd_perp, cvd_spot, oi, funding, funding_agg, liquidations, long_short, top_traders, rsi, premium, etf_flow, borrow, whale_net), symbol (BTCUSDT), period (15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M; 1m, 3m, 5m, 10m with member depth), limit (up to 300 bars; up to 5,000 with member depth), to (ISO). Member depth comes with a Builder key or above, or with a Terminal membership signed in on the site; a Free or Terminal key gets the default depth and 403 on 1m, 3m, 5m, 10m. Without member depth, to works inside the newest 300 bars; an older to answers 403 history_member_only, except daily and coarser price bars. Every response names its source. Add venue=<id> (bybit, okx, gate, hyperliquid and every venue in the recorder) for price, open interest and funding from that exchange; Binance stays the default.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/series?metric=oi&symbol=BTCUSDT&period=1h&limit=200' | jq '.source, .points[-3:]'
GET/api/public/orderbook

Spot order book depth for BTC, ETH, SOL, XRP, DOGE, ADA, LINK, AVAX, LTC and BNB: the books of Binance, Coinbase, Kraken, Bybit, OKX, Gate, MEXC, HTX, Bitget, Bitstamp, Gemini, Bitfinex, BingX, Crypto.com, Backpack, Binance US, Poloniex, LBank, Bitrue, XT, HashKey, DigiFinex, Bullish, WEEX, Deribit, Aster, Bitvavo, Independent Reserve and BtcTurk binned into 0.1% buckets within 20% of mid (USD notional, bids and asks arrays), the largest walls with venue split, 2% depth and book reach per venue; ?hours=1..24 adds the summed 5-minute history. Each venue row carries in_aggregate: false marks a book we record but hold out of the sums and walls because its size is not corroborated; held_out lists those venues and aggregate_venues counts the summed ones. Raw per-venue snapshots on the paid route /api/x402/orderbook-history.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/orderbook?symbol=BTC&hours=6' | jq '.walls[:5], .venues'
GET/api/public/positioning

Positioning board for the 30 most traded Binance USDT perps: each venue's own published long/short account and position ratios and taker flow on Binance, Bybit, OKX, Gate, HTX, Bitget and Kraken Futures, plus Bitfinex long and short margin position sizes on its spot margin book (margin borrowers, not perpetual accounts), GMX and Jupiter Perps long and short open interest in dollars (pool-based perpetual DEXes: a side split, not an account ratio), and CVD series (24h at 5m, 7d at 1h) for BTC, ETH and SOL. Hourly history on the paid route /api/x402/positioning-history.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/positioning?symbol=BTCUSDT' | jq '.rows[0]'
GET/api/public/desk

Desk notes, newest first: short dated observations the desk writer (an AI model) wrote from ByKaranteli's own recorded derivatives data and checked against it before publishing, each with its publish time in UTC, the card's data time, the desk's 0 to 10 news value, the board it reads from, the coins it names and a permanent URL. Default the last 24 hours; ?day=YYYY-MM-DD for one UTC day, ?since=<iso> for up to 7 days back, ?type=<card> for one card type, ?lang=zh|ru|ko for a translation (a note without one comes back in English and says so), ?limit=1..100. The archive across days and languages is on /api/x402/desk-notes-history; the English text per note is in the free dataset desk-notes; RSS at /desk/feed.xml.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/desk?limit=5' | jq '.notes[] | {published_at, type, headline, url}'
GET/api/public/turkey-premium

Turkey premium board: five TRY and USDT reference prices built every minute from Turkish spot venues (median mid of eligible books), each venue's book status, spread and depth, and the premium in bps (TRY pairs via USDT/TRY against the Binance global price; USDT/TRY against the ECB fix). ?pair=BTC-TRY&days=1..30 adds 15-minute history; free daily CSV at /api/v1/public/datasets/turkey-premium-daily.csv; minute rows on /api/x402/turkey-premium-history. The index block is the Turkey Premium Index: BTC-TRY total premium against the ECB USD/TRY fix in bps with its dollar and crypto legs, a 0-100 score (50 = world price), the regime, 24h and 7d averages and the same-sign streak; every pair carries index_bps and every venue implied_index_bps. index.reference_state says whether the USD/TRY reference is live this minute: fresh (an intraday quote younger than 30 minutes, FX market open), carried (FX market closed from Friday 22:00 to Sunday 22:00 UTC, or the live source down for less than 24 hours of open FX market; the last quote is used) or stale (older than 24 hours of open FX market); score and regime are null unless fresh, with score_paused_reason, and daily rows carry minutes_fresh, minutes_carried, minutes_stale and index_live_close (the last fresh minute's index against the live quote); the daily CSV appends minutes_fresh and index_live_close as its last two columns.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/turkey-premium?pair=BTC-TRY&days=1' | jq '{index: (.index | {value_bps, score, regime, dollar_leg_bps, crypto_leg_bps}), btc_try: (.pairs["BTC-TRY"] | {price, status, eligible})}'
GET/api/v1/proof

Proof API of the BYK Data Layer (beta): every five minutes our derived data (composite funding, aggregate open interest, 5-minute liquidations, depth, premiums, pressure score) is sealed into a Merkle root, signed and written to Solana, once a day to Base. No key needed. The index lists the newest epochs with their chain links; /genesis, /authorization-log, /epochs/{sequence}, /epochs/{sequence}/records, /proofs/{sequence|latest}/{feed}/{asset} (leaf, audit path, manifest, signature, anchors), /witness-keys/{kind}/{n}, /documents/{hash} and /catalog return the exact bytes a verifier needs. Human page with an in-browser verifier: /proof. Data responses of /api/public/pressure, /api/public/premium (the Upbit kimchi rows), /api/public/orderbook and /api/public/turkey-premium carry byk_proof: the newest sealed record of the same computation (sequence, proof_url, sealed_value) and matches_this_value, which says whether the number next to it is the sealed one. The one-file independent verifier, which reads only Solana and Base: /byk-verify.mjs.

Example request
curl -s 'https://bykaranteli.com/api/v1/proof/proofs/latest/BYK.FUNDING.COMPOSITE.B/BTC' | jq '{sequence, result, value: .decoded.value_decimal, unit: .decoded.unit, leaf_index, path: (.audit_path | length), solana: .anchors.solana[0].links.explorer}'
GET/api/public/jupiter

Jupiter Perps (Solana) board: exact long and short open interest per market (SOL, ETH, BTC) from the on-chain custody state, pool utilization and hourly borrow rates, JLP AUM and APR, 24h volume, the week's top traders by realized PnL. ?base=SOL&days=7 adds hourly OI history (max 30 days).

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/jupiter?base=SOL&days=1' | jq '.markets[0], .history.points[-1]'
GET/api/public/solana-perps

Solana Perps board: every Solana perpetual venue we read (Jupiter, Pacifica, Phoenix, GM Trade, Velocity, Bullet), refreshed every 10 minutes. venues gives one-sided open interest (oi_usd, with oi_long_usd and oi_short_usd on the pool venues), 24h volume, market count, the median hourly rate with rate_kind (Jupiter: borrow_hourly, the pool's hourly borrow fee; every other venue: funding_hourly) and as_of, plus stale: true when a failed feed shows its last good reading; totals sums them; markets lists every market of every venue largest open interest first (instrument_type, mark, 24h change, open interest in USD with both sides where published, 24h volume, hourly rate in percent of position; null when the venue does not publish a number). ?venue=jupiter|pacifica|phoenix|gmtrade|velocity|bullet filters the markets; &symbol=SOL&days=1..30 adds the hourly history of one market on every venue but Jupiter (Jupiter history stays on /api/public/jupiter). Any key gets 7 days of history; more than 7 is member depth (a Terminal session or a Builder key and above). The full hourly set is on the paid route /api/x402/solana-perps-history, the midnight rows in the solana-perps-daily dataset.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/solana-perps?venue=phoenix&symbol=SOL&days=1' | jq '.totals, .venues, .markets[0], .history.points[-1]'
GET/api/public/hyperliquid-whales

Hyperliquid whale tracker: the 1000 largest accounts by equity scanned every 5 minutes, long vs short notional per coin with the largest position on each side, every open position, and with events=1 the last 200 position changes (opened, closed, increased, reduced, flipped); address=0x... keeps one account. Paid full event history on /api/x402/hl-whale-events.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/hyperliquid-whales?coin=BTC&events=1' | jq '.by_coin, .events[:5]'
GET/api/public/hyperliquid-positions

Hyperliquid liquidation price map of one coin: the open positions of the 1000 largest accounts by equity placed at the liquidation price Hyperliquid reports for each, in bands of 0.25% of the mark. long (below the mark) and short (above) list the bands nearest first with price, notional_usd, positions and signed distance_pct; totals count every position, with without_liq_px for the cross margin positions that have no liquidation price; largest is the biggest band per side; model_comparison sets the LiqMap model's nearest cluster on each side next to the nearest tracked band (null off the LiqMap universe); coverage says how many of the 1000 accounts answered and when; history gives hourly long and short notional recorded since 2026-09-30. Per position rows on /api/x402/hl-positions-history.

Query parameters
NameTypeRequiredDescription
coinstringnoHyperliquid coin name, BTC by default; kPEPE style names are matched in any case. Anything else is a 400.
hoursintegernoHourly history, 24 by default and for every caller; up to 720 with member depth.
Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/hyperliquid-positions?coin=BTC' | jq '{coin, mark, coverage, largest, model_comparison, nearest_long: .long[:3], nearest_short: .short[:3]}'
GET/api/public/tradfi

TradFi perpetuals board: every Binance stock, index and commodity perp with funding, basis, open interest, 24h volume and liquidations, which other venues list it, and the trading-session state. ?market= and ?symbol= filter.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/tradfi?market=EQUITY' | jq '.rows[:5]'
GET/api/public/liquidations

Recorded 24h liquidations by side, symbol and venue, the coverage kind of every venue, and a coverage-adjusted market estimate with its inputs.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/liquidations | jq '{recorded, market_estimate, by_exchange}'
GET/api/public/liquidation-leaderboard

Largest single liquidation prints of the last 24h, 7d or 30d across the counted venues (rank, symbol, venue, side, price, quantity, notional, time) and a 30-day session heatmap: weekday by UTC hour cells, hour and weekday totals, Asia, Europe and US shares.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/liquidation-leaderboard?window=7d&limit=10' | jq '{window, largest: .largest[:3], sessions: .sessions.sessions}'
GET/api/public/tokenized-stocks

Tokenized stocks: onchain wrappers of xStocks, Robinhood Stock Tokens, Coinbase Tokenized Stocks, Binance bStocks, Ondo Stocks, Backpack Securities, Reality (Bitget), Superstate Opening Bell, Figure, Dinari dShares and Securitize (Exodus) per underlying (issuer, chain, price, premium to the real share, DEX liquidity and 24h volume, supply, holders, status), tokenized spot pairs on exchanges, the reference price and its session, the perp cross and board totals, refreshed every 10 minutes. Wrappers come from issuer sources only: Backed public API (xStocks), Robinhood assets API, Coinbase Tokenized Stocks API, Binance coin list plus contract fingerprint (bStocks), Ondo address CSV plus contract fingerprint, Jupiter verified token list (Backpack), Gate spot market list (gStocks, exchange only), Reality API plus identity check, Superstate API, Provenance restricted share marker (Figure), Dinari factory membership check (dShares) and Algorand asset record (Exodus share token, transfer agent Securitize). Each wrapper's price_source names the price that valued its supply dollars (reference: the share's reference price; issuer_oracle: the issuer's own price for the token; wrapper: its own pool or exchange price; null: no dollars) and totals.priced_by counts wrappers per level, unpriced included. ?underlying=TSLA, ?issuer=xstocks | robinhood | coinbase | bstocks | ondo | backpack | gstocks | reality | superstate | figure | dinari | securitize, ?chain=solana, ?top=1..200 (default 50); daily CSV tokenized-stocks-daily, hourly rows per wrapper on /api/x402/tokenized-stocks-history.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/tokenized-stocks?top=5' | jq '{supply_usd: .totals.supply_usd, premium_median_pct: .totals.premium_median_pct, rows: [.rows[] | {underlying, supply_usd, wrappers: [.wrappers[] | {issuer, chain, price, premium_pct}]}]}'
GET/api/public/insurance-funds

Exchange insurance funds on Binance, Bybit, OKX, Gate, MEXC, Bitfinex, Crypto.com, Delta Exchange, dYdX and Paradex: the latest hourly reading per venue (USD total, per asset, 24h and 7d change, the fund against the venue's perpetual open interest), every pool, and daily closes per venue. ?venue=binance | bybit | okx | gate | mexc | bitfinex | cryptocom | delta | dydx | paradex, ?days=1..366, ?pools=0 drops the pool rows; daily CSV insurance-funds-daily, hourly pool rows on /api/x402/insurance-fund-history. A venue that stops publishing is carried at its last reading for up to 48 hours and named in stale_venues, then dropped from the total and named in missing_venues; a total needs Binance, Bybit, OKX and Gate.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/insurance-funds?days=7&pools=0' | jq '{total_usd, change_24h_pct, venues: [.venues[] | {venue, total_usd, coverage_pct}]}'
GET/api/public/incidents

Auto-detected liquidation cascades with size, side, coins and price path.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/incidents | jq '.incidents[0]'
GET/api/public/oi

Open interest board for 10 major perps at 5-minute resolution: per symbol the OI in USD, the 24h change in open interest and in price, and the regime read (longs_building, shorts_building, deleverage_down, deleverage_up, quiet); last_bar_utc stamps the newest bar.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/oi | jq '.symbols[:5]'
GET/api/public/correlations

30-day rolling Pearson correlation matrix of daily returns across the top perps.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/correlations | jq '.symbols'
GET/api/public/charge

PsiCharge liquidity-state model: score, state and the published year-by-year scorecard.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/charge | jq '{score, state}'
GET/api/public/quantum

Quantum-exposed Bitcoin supply measured daily from our own node, with provenance hashes.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/quantum | jq '.latest | {exposed_btc, base_height}'
GET/api/public/macro

The macro set from official sources through FRED: policy rates, inflation and jobs, central bank balance sheets, the Treasury curve and the Fed broad dollar index, plus our global liquidity composite (formula under composite) and stablecoin supply; latest, series, groups and definitions (label, unit, cadence, source); ?days=365.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/macro?days=30' | jq '{composite: .composite.formula, liquidity: .latest.global_liquidity_busd, cpi: .latest.fred_cpi_yoy_pct, groups: [.groups[] | .key]}'
GET/api/public/network

Bitcoin network health from our own node: hashrate, difficulty, fees, mempool; ?days=365.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/network | jq '.latest'
GET/api/public/listings

New and delisted perpetual contracts across six exchanges, scanned hourly; ?days=30.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/listings | jq '.listed[:5]'
GET/api/public/context

Band-conditioned context for any recorded metric: where today sits and what followed; ?metric=coinbase_premium_pct.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" 'https://bykaranteli.com/api/public/context?metric=coinbase_premium_pct' | jq '{metric, today_value, interpretation}'
GET/api/public/smart-money/[symbol]

Smart-money read for one symbol from recorded positioning.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/smart-money/BTCUSDT | jq '.'
GET/api/v1/public/datasets/[name]

43 datasets as CSV or JSON: market history, symbol board, listings, liquidations, ETF flows (total + by fund), COT, premium, DVOL, options chain + flow, metrics, quantum, theme indices, venue markets, whale trades, stablecoin pegs, basis, slippage. Full catalog at /data. Daily CSV mirrors: github.com/bykarantelicom/crypto-datasets

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/v1/public/datasets/daily-market.csv | head -5
GET/api/v1/usage

What the calling key's account has used against its plan, the same figures the x-quota headers carry: plan (tier, label), rate.per_minute, monthly (limit, used, remaining, reset, state: ok, slow_lane, refused_until_reset or unlimited), today (calls on every key of the account), keys (active, limit) and x402 (included_calls_per_month, included_used_this_month, applies, requests_per_call, history_days with null for the whole archive, rows_per_call, raw_records_included; when applies is false, requests_per_call, history_days and rows_per_call are null and raw_records_included is false). Needs an account key: a call with none answers 401 key_required.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/v1/usage | jq '{plan, monthly, today}'
GET/api/public/indices

All market indices in one payload: Retail Euphoria Index (proprietary) + Fear & Greed (alternative.me) + CoinGecko global + DeFiLlama stablecoin flow + the Altcoin Season Index (top-50 alts vs BTC, 90d).

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/indices | jq '.euphoria.score, .fearGreed.today.valueRaw'
GET/api/public/euphoria

Retail Euphoria Index standalone. Composite of F&G + trending memes + BTC dominance + top-30 crowd positioning.

Example request
curl -s -H "Authorization: Bearer $BYKARANTELI_API_KEY" https://bykaranteli.com/api/public/euphoria | jq '{score, regime, explainer}'
GET/embed/pressure/[symbol]

Embeddable HTML widget showing current pressure score for a symbol. Use in iframe. Dark theme, no tracking.

Example request
<iframe src="https://bykaranteli.com/embed/pressure/BTCUSDT" width="340" height="200" style="border:0"></iframe>
GET/embed/liquidations

Embeddable 24h liquidations widget: long/short totals, event count, top symbols, largest print. Gallery and terms at /widgets.

Example request
<iframe src="https://bykaranteli.com/embed/liquidations" width="100%" height="300" style="border:0"></iframe>
GET/embed/orderbook/[symbol]

Embeddable spot order book depth widget for one of the ten tracked coins: 2% depth, imbalance, walls, mirrored bin strip.

Example request
<iframe src="https://bykaranteli.com/embed/orderbook/BTC" width="100%" height="380" style="border:0"></iframe>
GET/embed/positioning/[symbol]

Embeddable long/short positioning widget for one perp (Binance, Bybit, OKX ratios and taker flow).

Example request
<iframe src="https://bykaranteli.com/embed/positioning/BTC" width="100%" height="200" style="border:0"></iframe>
GET/embed/whales

Embeddable Hyperliquid whales widget: long versus short notional of the top-1000 accounts per coin.

Example request
<iframe src="https://bykaranteli.com/embed/whales" width="100%" height="330" style="border:0"></iframe>
GET/embed/rsi

Embeddable RSI(14) breadth widget: overbought/oversold counts per interval plus the extremes on ?interval.

Example request
<iframe src="https://bykaranteli.com/embed/rsi?interval=4h" width="100%" height="340" style="border:0"></iframe>

Embed example

Drop this into any HTML page: the widget needs no key, shows the latest reading on every page view and carries its attribution link inside the frame. Every widget is listed on /widgets. For your own layout, call the API from your server with your key and render the numbers there; never call it from browser code, where every visitor could read the key.

<iframe src="https://bykaranteli.com/embed/liquidations" width="100%" height="300" style="border:0;border-radius:12px;background:#0b0e14" loading="lazy" title="Liquidations 24h"></iframe>

Rate limit and quota headers

Read these on every keyed answer instead of counting calls yourself; GET /api/v1/usage returns the same figures for the whole account in one call.

HeaderWhen it comesWhat it means
x-ratelimit-limitevery keyed answer, and 429 rate_limitedRequests a minute this key may make: the plan's rate, or the Free rate while the key is in the slow lane.
x-ratelimit-remainingevery keyed answerRequests left in the current one minute window; 0 on a 429.
x-quota-limitkeyed answers on a plan with a monthly figureRequests a calendar month for the account, every key counted together.
x-quota-usedas x-quota-limitRequests the account has made this calendar month (UTC).
x-quota-resetas x-quota-limitISO time the monthly count starts again: the first instant of the next UTC month.
x-quota-stateonly past a paid plan's fair-use ceilingslow: the key answers at the Free rate (30 a minute) until the month resets; it is never stopped.
retry-afterevery 429, and 503 lookup_unavailableSeconds to wait before the next try. Honor it: retrying sooner only adds refusals.
x-bk-tierevery answer through the key gateThe plan the answer was served under (free for browsers on this site).
x-history-window-daysincluded x402 catalog answers on an account key, except liqmap-levels, options-flow and flow-vpinDays back the plan's catalog window reaches, counted from 00:00 UTC, or all for the whole archive.
x-history-row-capas x-history-window-days, not on bulk exportsMost rows one included call returns on the plan.
x-x402-allowance-limitincluded catalog answers when the plan or the account has a monthly ceilingIncluded catalog calls a calendar month for the account.
x-x402-allowance-usedas x-x402-allowance-limitIncluded catalog calls the account has made this calendar month (UTC).
x-x402-allowance-resetx402_allowance_used (HTTP 402)ISO time the catalog count starts again: the first instant of the next UTC month.

Errors

Read the HTTP status first, then the code. Answers from the key gate carry { error: '<sentence>', code: '<code>' } (401 key_required adds reason: none, empty_authorization, empty_x_api_key, malformed_authorization, malformed_x_api_key or non_bearer_scheme); answers from a route carry { ok: false, error: '<code>', message }. The x402 plan answers (x402_allowance_used, history_window, raw_tier_required, tier_required, payment_required_for_credit) carry { error, code, tier, price_usd, docs }, plus upgrade on every code but payment_required_for_credit, and mean the call can be paid per call. The member routes (/api/member/*), /api/v1/usage, /api/v1/me/watchlist and the stream handshake read the same parser: a key header that is present but carries no usable key answers 401 with the same reason values. A 402 from /api/x402/* carries credential_reason and credential_hint when a key header was present but unusable (an empty header, a non-Bearer scheme, or a prepaid key in Authorization instead of x-api-key); a malformed key value there answers 401 key_required with reason, as on every other route.

HTTPCodeWhenWhat to do
401key_requiredA program called a keyed route and sent no account key, or a key header that was empty, not a full key (the bk_... placeholder, the prefix from the key list, an unset variable) or not in the Bearer scheme; reason in the body names which.Create a free key on /dashboard/api and send it as Authorization: Bearer.
401invalid_keyThe key is unknown or was revoked, or its account is inactive.Check the key on /dashboard/api; create a new one if it was revoked.
401wrong_key_typeA prepaid bk_live key was sent to an account route.Prepaid keys pay per call on /api/x402/*; send your account key here.
403email_unverifiedThe account that owns the key has not verified its email.Verify the email, then retry with the same key.
429rate_limitedThe key went over its requests a minute.Wait retry-after seconds; spread the calls or move up a plan.
429monthly_quota_exceededA Free or Terminal account used its monthly requests.Wait for x-quota-reset, or move up a plan.
429fair_use_slow_laneA paid account past its fair-use ceiling went over the Free rate.Wait retry-after seconds; the full rate returns when the month resets.
429rate_limited (reason hammer_brake)The address took 1,000 answers of 429 on /api/* in ten minutes, or 10,000 in a day with at least one in the last ten minutes: it kept calling after the quota or rate answers. The origin pauses it for an hour.Stop at the first 429 and wait retry-after seconds (3600 here); the pause lifts on its own.
503lookup_unavailableThe key check failed on our side.Retry after retry-after seconds; the call was not counted.
400unknown_venue, unknown_currency, unknown_metric, invalid_symbolA query parameter is outside the accepted values.Fix the parameter against the route's entry on this page.
404not_availableThe route has no reading for that symbol, or the symbol is retired.Check the symbol; a retired one names its successor in the answer.
503unavailable, temporarily_unavailableThe data behind the route could not be read just now.Retry in a minute.
402(x402 payment terms)A /api/x402/* route was called with no payment and no account key.Pay with an x402 client, send a prepaid bk_live key in x-api-key, or use a Builder key or above.
402(x402 payment terms) with credential_reasonA key header was present but carried nothing usable (empty, a non-Bearer scheme, or a prepaid key in Authorization instead of x-api-key); the 402 names it in credential_reason and credential_hint. A header whose value is not a key at all answers 401 key_required with reason instead.Send the account key as Authorization: Bearer bk_... and a prepaid key in x-api-key, or pay the 402 with a wallet.
402x402_allowance_usedAn account key went past its plan's monthly catalog ceiling (or a figure ByKaranteli set for the account); the body carries limit, used and reset.Pay per call: send the account key as Authorization: Bearer with a prepaid key in x-api-key, or send the call without it and pay with a wallet; or move up a plan.
402payment_required_for_creditAn account key called /api/x402/prepaid-key.Prepaid credit is bought: pay with a wallet or an existing prepaid key.
403tier_requiredThe key's plan does not include the x402 catalog (Free, Terminal) or bulk exports (below Business).Pay per call (a prepaid key in x-api-key with the account key in Authorization: Bearer, or a wallet without the account key), or move up a plan.
403history_windowAn account key asked for rows before its plan's history window (a from, to or days earlier than x-history-window-days); the body carries history_days and window_start.Ask from window_start on, pay per call for the whole archive (a prepaid key in x-api-key with the account key in Authorization: Bearer, or a wallet without the account key), or move up a plan.
403raw_tier_requiredA key on a plan below Business called a raw record route (liquidations-raw, liquidation-leaderboard-history, hl-whale-events, hl-positions-history, orderbook-history, spot-microstructure, venue-markets-history, whale-trades-raw).Pay per call (a prepaid key in x-api-key with the account key in Authorization: Bearer, or a wallet without the account key), or move to Business.

API changes are marked api and Breaking in the changelog.

Fair use

  • Rate limit is 30 requests per minute per key on the Free API plan (60 on Terminal, 300, 1,200 and 3,000 on Builder, Business and Scale), plus 15,000 requests per calendar month on free keys and 150,000 on Terminal keys (429 monthly_quota_exceeded past it from 2026-09-25). Builder, Business and Scale carry fair-use ceilings of 1,000,000, 3,000,000 and 10,000,000 a month: past them a paid key is never stopped and answers at the Free rate (30 a minute) until the month resets. Every keyed response on a plan with a monthly figure carries x-quota-limit, x-quota-used and x-quota-reset; x-quota-state: slow marks an answer from the slow lane. An included x402 catalog call counts as 10 requests here, next to the plan's catalog ceiling (1,000 a month on Builder, 10,000 on Business, none on Scale and above). Browsers on the site are limited per IP. Above the limit you get 429 with retry-after.
  • Data is read-only. No PII or trading actions exposed.
  • Attribution: a visible link back to bykaranteli.com or the source page (e.g. /symbols) is appreciated when embedding.
  • Personal and research use with attribution is free. Commercial use of the data we compute needs the Business plan; derived redistribution needs Scale; raw records and other third-party data are for your own use on every plan. Rebranding our numbers as your own in-house backtest is never allowed.
  • Scraping internal routes (/dashboard/*, /api/admin/*, /api/member/*) is blocked and monitored. Stick to /api/public/*.

Not investment advice. The numbers returned are recorded market data and derived indicators, not a recommendation to trade. Market data describes the past and does not predict future prices.