Repository navigation
Releases: bytnode/bytnode-SDK
Release list
v3.0.1 — contract 3.0.1
[3.0.1] — 2026-10-28
Generated from contract 3.0.1. The first release since 2.0.6: it also carries contract 3.0.0,
a MAJOR version.
- Breaking (contract 3.0.0): the four intraday macro series from Dukascopy (
EURUSD,
USDJPY,WTIUSD,DXY_ICE) are no longer served bymacro.intraday; asking for one now
returns a 422 naming the daily series to use instead.PAXGUSDTremains.StatusFeedsItem.feed
losesmacro_intraday_1m,macro_intraday_5m,macro_intraday_15m,macro_intraday_1hand
macro_intraday_4h. - 104 served pairs instead of 77: 102 USDT-margined perpetual markets plus the two stablecoin
pairs.KnownSymbolnow lists all 104 (GET /v1/symbolsremains the source of truth). - The 27 new pairs start on 2026-10-27: open interest and basis
1m–30mfrom 18:03 UTC;
documented on the history methods.
v2.0.6 — contract 2.0.6
[2.0.6] — 2026-10-22
Generated from contract 2.0.6. No change to the generated methods or models.
- The API now also accepts the key as
Authorization: Bearer <key>(the SDKs keep sending
X-API-KEY, which wins when both are present). The contract declares both forms. - MCP connectors that sign in with OAuth (claude.ai, ChatGPT, Claude Code) need no key:
they connect tohttps://api.bytnode.com/mcpand approve access on bytnode.com.
v2.0.5 — contract 2.0.5
[2.0.5] � 2026-10-19
Generated from contract 2.0.5.
- New sentiment routes from CoinMarketCap:
fear_greed.cmc(CMC Fear & Greed, a different
index fromfear_greed),altcoin_season, and theindices.cmc20/indices.cmc100
market indices with their constituents (asset,name,weight_pct), each with a daily
history. - New snapshot fields
fear_greed_cmc,altcoin_season,cmc20andcmc100.
[2.0.4] � 2026-10-19
Generated from contract 2.0.4.
- 77 served pairs instead of 22: 75 USDT-margined perpetual markets plus the two stablecoin
pairs.KnownSymbolnow lists all 77 (GET /v1/symbolsremains the source of truth). - The 55 new pairs have no imported open-interest or basis history:
1m�30mstart on
2026-10-19 09:31 UTC.
Install
pip install https://github.com/bytnode/bytnode-SDK/releases/download/v2.0.5/bytnode-2.0.5-py3-none-any.whl
npm install https://github.com/bytnode/bytnode-SDK/releases/download/v2.0.5/bytnode-2.0.5.tgzv2.0.3
Generated from contract 2.0.3.
- CVD and buy/sell-ratio history no longer return zeros on older buckets: they carry the real
buy and sell volumes of the bucket's own candle (the same astrades_kline), with
cvd_seriesset toNone/nullwhere finer candles do not cover the bucket. - New
buy_sell_coverage_ratioonCvd,BuySellRatioandTradesKline: the share of the
volume whose buy/sell split is known (below 1 on part of the history). CvdHistoryItemis now the same type asCvd; the old name remains as an alias.
Install: see README (GitHub release assets; not on PyPI/npm).
v2.0.2
Generated from contract 2.0.2.
client.status()(/v1/status) now covers every data family: options, on-chain (BTC, ETH),
macro, ETF, tokenomics and sentiment feeds join the market feeds.StatusFeedsItem.feedis the
closed list of the 83 public feed names;familyuses the names of/v1/limits(trades, no
longerticks).age_sandis_staleare typed optional (None/nullwhen a feed could not be checked), as
the API always answered./v1/oi/history,/v1/oi/change/history,/v1/basis/history: eachtimeframestarts where the
readings are at least that fine (1hfrom 2026-04-04,4hfrom 2025-10-07,1m–30mfrom
2026-05-28), sostepis always the real spacing; documented on the methods.
Install: see README (GitHub release assets; not on PyPI/npm).
v2.0.1 — contract 2.0.1
Generated from contract 2.0.1.
client.ws.token()(POST /v1/ws/token): a short-lived WebSocket token (60 seconds, one connection) to open the stream without handing your API key to a web page.- TypeScript stream: the API key never goes into a URL any more. New
tokenoption — a function returning a fresh token, typically from your backend — called before every connection and reconnection; the key is then not sent at all. Without thewspackage (browser, Deno, Bun) and withouttoken, the stream asksPOST /v1/ws/tokenfor a token instead of putting the key in?api_key=. Withws(Node), the key stays in theX-API-KEYheader. - The API now refuses plain
http://(403https_required) instead of redirecting: the SDKs always usehttps://, nothing to change on your side.
Install:
pip install https://github.com/bytnode/bytnode-SDK/releases/download/v2.0.1/bytnode-2.0.1-py3-none-any.whl
npm install https://github.com/bytnode/bytnode-SDK/releases/download/v2.0.1/bytnode-2.0.1.tgzv2.0.0 — contract 2.0.0
The reference version of the SDKs, generated from contract 2.0.0 (the reference version of
the API). Both packages share one version number with the contract's major.
- Typed clients for the 131 routes, the WebSocket stream (
frame/batchmodes, gap detection,
reconnection) and typed errors, in Python and TypeScript. is_volume_estimatedand its variants are optional:None/nullwhen their volume is.- Channel helpers:
trades,orderbook,liquidations.
v0.5.1 — contract 4.3.1
[0.5.1] — 2026-10-15
Generated from contract 4.3.1 (was 4.3.0). Nothing breaks.
Added
client.klines(symbol, timeframe, live=True)in Python,client.klines({ symbol, timeframe, live: true })in TypeScript: the candle in progress,is_closed: false, its OHLC from the
same reference market and its volumes provisional until it closes.
Changed
- Docstrings and JSDoc follow the contract texts: a 1m candle is closed about 5 s after its end
(it was about 21 s), a 1m order book about 2 s after.
v0.5.0 — contract 4.3.0
[0.5.0] — 2026-10-15
Generated from contract 4.3.0 (was 4.0.0). Nothing breaks: the contract only had MINOR
revisions since 0.4.0. With 0.4.0, every client warned at start-up that the API runs a newer
contract; 0.5.0 matches it.
Added
client.klines.history(symbol, "1w"): the weekly timeframe, already accepted by the API, is
now in the type (KlineTimeframe).
Changed
- Docstrings and JSDoc follow the contract texts (CVD volumes read from
/v1/trades-kline,
period_end_at,window_start_at, theseriesparameter of the macro intraday routes).
v0.4.0 — contract 4.0.0
[0.4.0] — 2026-10-14
Generated from contract 4.0.0. The contract had two MAJOR revisions since 0.3.0 (3.0.0 on
2026-10-13, 4.0.0 on 2026-10-14): 0.3.0 no longer matches the API — upgrade.
Changed (breaking, following the contract)
- Every method is named after the path of its route (contract 3.0.0):
client.oi.change
(wasoi.delta),client.options.put_call_ratio,client.buy_sell_ratio,
client.liquidations.big_small_ratio,client.eth.price_btc, Bitcoin on-chain under
client.btc.*(mvrv,nvt,active_addresses,revenue_per_difficulty),
client.capabilities(symbol). client.klines(symbol, timeframe)returns the latest CLOSED candle (one model); the list is
client.klines.history(...)andclient.klines.history.iter(...). Same for
client.options.iv.klines.client.buy_sell_ratio,client.trades.avg_sizeandclient.liquidations.big_small_ratio
requiretimeframeand return the latest closed bucket (contract 4.0.0); their snapshot fields
take a timeframe mapping (buy_sell_ratio={"5m": 12}).- Snapshot: a multi-timeframe field (
klines_1h,cvd_1h...) is typed as a LIST, never
Model | list[Model]; a field without a timeframe is the object of its route (Trueor1). client.indicators(..., limit=N)(wasresults=);valuesis a list of dated rows,
IndicatorRow(time, value)or the named outputs, most recent first;to_pandas()builds its
columns from them.globalis a Python keyword:client.global_()(wasclient.global_market()); the TypeScript
property isclient.global.- WebSocket:
ch.orderbook(symbol, market=...)(the channel isorderbook.*;ch.bookstays as
an alias), messages of kindorderbookcarryavg_mid_price. - Field names follow the contract:
*_atinstants,*_sdurations,*_countcounts,
stepin the envelope of a list,is_partialon the snapshot.
Added
- A warning when the API serves a newer MAJOR contract, or a newer MINOR one, than the SDK was
generated from (contract_drift).