API de données de marché crypto
Les prix et volumes crypto en temps réel, dans une seule API : bougies OHLCV d’une minute à une semaine, variation de prix, transactions individuelles, bougies de transactions et gros ordres. Toutes les places sont déjà fusionnées et normalisées : inutile de brancher chaque exchange et de réconcilier leurs formats vous-même.
De la bougie au tick : ce que le marché a imprimé, avant toute interprétation. Volumes, transactions et ticks sont agrégés sur toutes les places.
#Données de marché crypto pour agents IA et LLM
Demandez à un agent IA branché sur BytNode « Comment BTC a-t-il bougé sur 24 heures ? », « Y a-t-il eu de gros ordres sur ETH ce matin ? » ou « Montre-moi les bougies horaires de SOL cette semaine » : il répond avec cette famille, par l’outil MCP get_pair_data, sans URL à construire.
{
"name": "get_pair_data",
"arguments": {
"symbol": "BTCUSDT",
"fields": ["klines", "price_change"],
"timeframe": "1h",
"limit": 24
}
}- Pour le LLM : une bougie est datée par le début de sa fenêtre (
time, UTC) — la bougie horaire de 14:00 couvre 14:00 à 15:00 —, et les lignes arrivent de la plus récente à la plus ancienne. - Pour les développeurs : vous construisez votre propre agent IA ? Exposez
/v1/klines/historycomme outil (tool calling) et le modèle va chercher les bougies seul, ou chargez les outils MCP et passez-vous d’adaptateur. - Où ça tourne : Claude, ChatGPT, Cursor et tout client MCP, y compris les frameworks d’agents qui parlent MCP, comme LangChain ou n8n.
Branchez votre agent IA avec le guide du serveur MCP, ou apprenez-lui BytNode avec les Agent Skills open source.
#Bougies OHLCV
Les 18 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket the row covers: a 1h bucket at 14:00 covers 14:00:00 to 14:59:59.999. |
open | quote currency (USDT for BTCUSDT) | Opening price of the candle. |
high | quote currency (USDT for BTCUSDT) | Highest price of the candle. |
low | quote currency (USDT for BTCUSDT) | Lowest price of the candle. |
close | quote currency (USDT for BTCUSDT) | Closing price of the candle (last price for the open candle). |
volume | base asset quantity (BTC for BTCUSDT) | Traded volume over the row, base asset units (BTC for BTCUSDT, NOT dollars), aggregated across venues, over the market(s) the route covers: spot + perpetual futures on `/v1/klines` and `/v1/trades-kline`, the path's market alone on a `/spot` or `/futures` route (a name without a market suffix covers every market of its route; `volume_spot` / `volume_futures` restrict). `null` when a market is not available (never a partial sum). |
buy_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) buy volume, base asset units, aggregated across venues. |
sell_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) sell volume, base asset units, aggregated across venues. |
is_volume_estimated | `true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available). | |
volume_spot | base asset quantity (BTC for BTCUSDT) | Volume traded on the SPOT market, summed across venues, base asset units. `null` while not available yet (never a partial sum). |
buy_volume_spot | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) buy volume on the SPOT market, across venues. |
sell_volume_spot | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) sell volume on the SPOT market, across venues. |
is_volume_spot_estimated | `true` when the spot quantities of this candle were ESTIMATED from USD amounts and the candle's typical price (high + low + close) / 3 (data written before quantities were recorded; mean error 0.04 % in 1m, 0.37 % in 1d); `false` = measured. `null` when the volume itself is `null` (not available). | |
volume_futures | base asset quantity (BTC for BTCUSDT) | Volume traded on PERPETUAL FUTURES, summed across venues, in base asset units. `null` when not available yet (never a partial sum). |
buy_volume_futures | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) buy volume on PERPETUAL FUTURES, across venues. |
sell_volume_futures | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) sell volume on PERPETUAL FUTURES, across venues. |
is_volume_futures_estimated | `true` when `volume_futures` was ESTIMATED from USD amounts and the candle's typical price; `false` = measured. `null` when the volume itself is `null` (not available). | |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
Deux routes : /v1/klines rend la dernière bougie CLOSE (un objet ; ?live=1 pour la bougie en cours, is_closed: false), /v1/klines/history les bougies, de la plus récente à la plus ancienne (les paramètres ci-dessous). La taille de la bougie va dans timeframe, obligatoire : 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w. Absent ou hors liste : 422.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
symbol | string | obligatoire | L’actif. |
timeframe | string | obligatoire | Taille de bougie : 1m, 5m, 15m, 30m, 1h, 4h, 1d ou 1w. |
limit | integer | 100 | Nombre de bougies, de 1 à 1000. |
since_ms / until_ms | integer | — | Fenêtre datée, en millisecondes, appliquée avant limit. |
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
"https://api.bytnode.com/v1/klines/history?symbol=BTCUSDT&timeframe=1h&limit=100"| Champ | Type | Description |
|---|---|---|
time | string | Début de la bougie, ISO 8601. |
open, high, low, close | float | Les quatre prix. |
volume | float | Volume de TOUS les marchés : spot plus futures perpétuels, toutes plateformes additionnées, en unités de l’actif de base (un nom sans suffixe de marché couvre tous les marchés). null si l’une des parts est inconnue ; sur un stablecoin, le volume spot. |
buy_volume / sell_volume | float | Volume acheté et vendu au marché, tous marchés (spot + futures), en unités de l’actif de base. null si l’une des parts est inconnue. |
is_volume_estimated | boolean | Vrai quand le volume agrégé de la bougie a été reconstitué (historique ancien), faux quand il est mesuré. |
volume_spot | float | Volume du marché spot, toutes plateformes additionnées, en unités de l'actif de base : buy_volume_spot + sell_volume_spot. null tant qu'il n'est pas définitif, ou s'il est inconnu. |
buy_volume_spot | float | Volume exécuté en achat au marché sur le marché spot, toutes plateformes, en unités de l'actif de base. |
sell_volume_spot | float | Volume exécuté en vente au marché sur le marché spot, toutes plateformes, en unités de l'actif de base. |
is_volume_spot_estimated | boolean | Vrai quand le volume agrégé de la bougie a été reconstitué (historique ancien), faux quand il est mesuré. |
volume_futures | float | Volume des futures perpétuels de la bougie, sommé sur les places, en unités de l’actif de base (null s’il est inconnu ; null sur un stablecoin, qui n’a pas de marché futures). |
buy_volume_futures / sell_volume_futures | float | Volume acheté et vendu au marché sur les futures perpétuels, toutes plateformes, en unités de l’actif de base. |
is_closed | boolean | Seules les bougies closes sont servies (jamais celle en cours). true dès que les volumes de la bougie sont définitifs, quelques secondes après sa clôture ; d’ici là ils peuvent valoir null. |
#Variation de prix
Les 11 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Instant of the latest trade of the reference spot market (`price` is that trade's price, the close of `/v1/klines?live=1`); if it has not traded since the latest closed one-minute candle, the end of that candle (`price` = its close). Exception: USDTUSDC, which no spot candle source lists, gives the instant of its latest trade, `price` being the volume-weighted price of its last 90 seconds. |
price | quote currency (USDT for BTCUSDT) | Price. |
changes_pct | Price change over each window, keyed by window (`1m` … `1w`), in percent. | |
changes_pct.1m | percent | Price change over the last 1m, in percent. |
changes_pct.5m | percent | Price change over the last 5m, in percent. |
changes_pct.15m | percent | Price change over the last 15m, in percent. |
changes_pct.30m | percent | Price change over the last 30m, in percent. |
changes_pct.1h | percent | Price change over the last 1h, in percent. |
changes_pct.4h | percent | Price change over the last 4h, in percent. |
changes_pct.1d | percent | Price change over the last 1d, in percent. |
changes_pct.1w | percent | Price change over the last 1w, in percent. |
La variation en pourcentage sur les huit unités de temps, calculée à la demande par rapport au prix d’il y a une minute, cinq minutes, une heure, une semaine. Une unité de temps dont l’historique manque vaut null, jamais une erreur.
{
"status": "ok",
"server_time": "2026-10-10T08:51:08.454Z",
"data_type": "price_change",
"symbol": "BTCUSDT",
"data": {
"time": "2026-10-10T08:50:00.000Z",
"price": 82818.72,
"changes_pct": {
"1m": 0.0201927489674, "5m": 0.0452759586592, "15m": -0.0102140384352,
"30m": -0.0437873393277, "1h": 0.0500741326695, "4h": 0.18183489701,
"1d": 0.240522875817, "1w": -2.15235074281
}
}
}C’est l’une des rares routes servies pour les stablecoins : elle se replie alors sur les ticks spot.
#Transactions agrégées par seconde
Les 10 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the second the row covers. |
volume | base asset quantity (BTC for BTCUSDT) | Traded volume over the row, base asset units (BTC for BTCUSDT, NOT dollars), aggregated across venues, over the market(s) the route covers: spot + perpetual futures on `/v1/klines` and `/v1/trades-kline`, the path's market alone on a `/spot` or `/futures` route (a name without a market suffix covers every market of its route; `volume_spot` / `volume_futures` restrict). `null` when a market is not available (never a partial sum). |
trade_count | count | Number of trades. `null` when the number is not known: history imported from an outside source carries the buy and sell volumes, not the trade count. |
buy_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) buy volume, base asset units, aggregated across venues. |
sell_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) sell volume, base asset units, aggregated across venues. |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. | |
net_volume | base asset quantity (BTC for BTCUSDT) | buy_volume - sell_volume over the row, base asset units. Positive = net buying. |
avg_trade_size | base asset quantity (BTC for BTCUSDT) | Average trade size, base asset units (NOT dollars: multiply by the price for a notional). |
trade_rate | trades per second | Average number of trades per second over the bucket. `null` when `trade_count` is. |
is_volume_estimated | `true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available). |
Une ligne par seconde, additionnée sur toutes les places. Le paramètre limit compte donc des secondes, pas des transactions.
| Champ | Type | Description |
|---|---|---|
time | string | La seconde concernée. |
volume | float | Volume total, additionné sur les places. |
trade_count | integer | Nombre de transactions, additionné sur les places. |
buy_volume | float | Volume acheté au marché. |
sell_volume | float | Volume vendu au marché. |
La même répartition achat/vente par minute ou par bucket, pour les futures perpétuels, est le buy_volume / sell_volume de /v1/cvd/futures/history.
#Transactions individuelles et gros ordres
Les 6 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Execution instant of the trade, as stated by the venue (milliseconds). |
id | Opaque, stable identifier of the trade (16 hex characters): the same trade always has the same `id`, so it can be used to deduplicate or resume. It reveals nothing about the venue. | |
side | Trades: `buy` or `sell` (aggressor side). Liquidations: `long` or `short` (the position liquidated). | |
price | quote currency (USDT for BTCUSDT) | Price. |
quantity | base asset quantity (BTC for BTCUSDT) | Quantity traded or liquidated, in base asset units. |
value_usd | USD | Notional value: price × quantity, in the pair's quote currency (USDT for BTCUSDT), taken as USD. |
Les 6 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Execution instant of the trade, as stated by the venue (milliseconds). |
id | Opaque, stable identifier of the trade (16 hex characters): the same trade always has the same `id`, so it can be used to deduplicate or resume. It reveals nothing about the venue. | |
side | Trades: `buy` or `sell` (aggressor side). Liquidations: `long` or `short` (the position liquidated). | |
price | quote currency (USDT for BTCUSDT) | Price. |
quantity | base asset quantity (BTC for BTCUSDT) | Quantity traded or liquidated, in base asset units. |
value_usd | USD | Notional value: price × quantity, in the pair's quote currency (USDT for BTCUSDT), taken as USD. |
Les transactions individuelles (exécutions), une par ligne, toutes places confondues et sans étiquette de source — les mêmes, avec le même id, que les canaux WebSocket trades.spot et trades.futures. limit va de 1 à 10 000. Sans autre paramètre, vous obtenez les dernières transactions. Pour lire une plage de temps, ajoutez since_ms, until_ms et/ou order (asc ou desc) : une page couvre au plus 15 minutes, et la réponse porte next, l’URL de la page suivante, prête à appeler (null quand la plage est lue). En suivant next, chaque transaction est rendue une fois et une seule, dans l’ordre. Il en va de même pour /v1/trades/large, et pour /v1/trades-kline/futures/seconds par pages de limit secondes.
| Champ | Type | Description |
|---|---|---|
time | string | Horodatage de la transaction. |
side | string | buy ou sell : le côté du preneur de liquidité. |
price | float | Prix d’exécution. |
quantity | float | Taille, en unités de l’actif de base. |
value_usd | float | Valeur en dollars (prix × quantité). |
Les 6 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Execution instant of the trade, as stated by the venue (milliseconds). |
id | Opaque, stable identifier of the trade (16 hex characters): the same trade always has the same `id`, so it can be used to deduplicate or resume. It reveals nothing about the venue. | |
side | Trades: `buy` or `sell` (aggressor side). Liquidations: `long` or `short` (the position liquidated). | |
price | quote currency (USDT for BTCUSDT) | Price. |
quantity | base asset quantity (BTC for BTCUSDT) | Quantity traded or liquidated, in base asset units. |
value_usd | USD | Notional value: price × quantity, in the pair's quote currency (USDT for BTCUSDT), taken as USD. |
Le même flux futures, filtré par taille : la lecture du tape, pour repérer les ordres qui comptent.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
symbol | string | obligatoire | L’actif. |
min_usd | float | 100000 | Montant minimum en dollars. Plancher à 1000. |
limit | integer | 100 | Nombre d’événements, de 1 à 10 000. |
# The last fifty orders above $250,000
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
"https://api.bytnode.com/v1/trades/large?symbol=BTCUSDT&min_usd=250000&limit=50"#Bougies de transactions (trades kline)
Les 11 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket the row covers: a 1h bucket at 14:00 covers 14:00:00 to 14:59:59.999. |
trade_count | count | Number of trades. `null` when the number is not known: history imported from an outside source carries the buy and sell volumes, not the trade count. |
avg_trade_size | base asset quantity (BTC for BTCUSDT) | Average trade size, base asset units (NOT dollars: multiply by the price for a notional). |
volume | base asset quantity (BTC for BTCUSDT) | Traded volume over the row, base asset units (BTC for BTCUSDT, NOT dollars), aggregated across venues, over the market(s) the route covers: spot + perpetual futures on `/v1/klines` and `/v1/trades-kline`, the path's market alone on a `/spot` or `/futures` route (a name without a market suffix covers every market of its route; `volume_spot` / `volume_futures` restrict). `null` when a market is not available (never a partial sum). |
buy_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) buy volume, base asset units, aggregated across venues. |
sell_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) sell volume, base asset units, aggregated across venues. |
net_volume | base asset quantity (BTC for BTCUSDT) | buy_volume - sell_volume over the row, base asset units. Positive = net buying. |
buy_sell_coverage_ratio | fraction (0.585 = 58.5 %) | Share of the volume (in USD) whose buy/sell split is known. 1 = every trade is split. Below 1 on part of the history, where some sources did not report the aggressor side: `buy_volume` and `sell_volume` then cover that share only, so `buy_volume + sell_volume` < `volume`; `buy_ratio` and the CVD describe the covered share. `null` when the bucket has no volume. |
trade_rate | trades per second | Average number of trades per second over the bucket. `null` when `trade_count` is. |
is_volume_estimated | `true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available). | |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
Les 11 champs de cette route (d’après le contrat)
time | ISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z) | Start of the bucket the row covers: a 1h bucket at 14:00 covers 14:00:00 to 14:59:59.999. |
trade_count | count | Number of trades. `null` when the number is not known: history imported from an outside source carries the buy and sell volumes, not the trade count. |
avg_trade_size | base asset quantity (BTC for BTCUSDT) | Average trade size, base asset units (NOT dollars: multiply by the price for a notional). |
volume | base asset quantity (BTC for BTCUSDT) | Traded volume over the row, base asset units (BTC for BTCUSDT, NOT dollars), aggregated across venues, over the market(s) the route covers: spot + perpetual futures on `/v1/klines` and `/v1/trades-kline`, the path's market alone on a `/spot` or `/futures` route (a name without a market suffix covers every market of its route; `volume_spot` / `volume_futures` restrict). `null` when a market is not available (never a partial sum). |
buy_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) buy volume, base asset units, aggregated across venues. |
sell_volume | base asset quantity (BTC for BTCUSDT) | Aggressive (taker) sell volume, base asset units, aggregated across venues. |
net_volume | base asset quantity (BTC for BTCUSDT) | buy_volume - sell_volume over the row, base asset units. Positive = net buying. |
buy_sell_coverage_ratio | fraction (0.585 = 58.5 %) | Share of the volume (in USD) whose buy/sell split is known. 1 = every trade is split. Below 1 on part of the history, where some sources did not report the aggressor side: `buy_volume` and `sell_volume` then cover that share only, so `buy_volume + sell_volume` < `volume`; `buy_ratio` and the CVD describe the covered share. `null` when the bucket has no volume. |
trade_rate | trades per second | Average number of trades per second over the bucket. `null` when `trade_count` is. |
is_volume_estimated | `true` when some base-asset quantities of this row were ESTIMATED from USD amounts (history where a source reported amounts but not quantities): a buy or sell amount is converted at that source's own average price when its total quantity is known, otherwise at the candle's typical price (high + low + close) / 3. Every quantity a source measured is kept as is. `false` = all measured. `null` when the volume itself is `null` (not available). | |
is_closed | `true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades. |
Des bougies construites sur les transactions plutôt que sur le prix — une « trades kline » : combien d’ordres sont passés, dans quel sens et pour quel montant, toujours agrégés sur toutes les places. Les transactions individuelles elles-mêmes sont /v1/trades/spot et /v1/trades/futures.
Chaque route a son historique : /v1/trades-kline/history, /v1/trades-kline/spot/history, /v1/trades-kline/futures/history.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
symbol | string | obligatoire | L’actif. |
timeframe | string | obligatoire | 1m, 5m, 15m, 30m, 1h, 4h, 1d. Absent ou invalide : 422. |
live | boolean | false | Sur les routes de dernière valeur uniquement : expose la bougie en formation. |
limit | integer | 100 | Sur les routes /history, de 1 à 1000. Seules les bougies closes y sont servies. |
since_ms / until_ms | integer | — | Sur les routes /history : fenêtre datée, en millisecondes, appliquée avant limit. |
# The 5-minute trade candle in progress
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
"https://api.bytnode.com/v1/trades-kline?symbol=BTCUSDT&timeframe=5m&live=1"| Champ | Type | Description |
|---|---|---|
time | string | L’instant de la ligne (il remplace la clé d’origine, comme bucket) : un client générique lit une seule clé. |
trade_count | integer | Nombre de transactions sur la fenêtre. |
avg_trade_size | float | null | Taille moyenne d’une transaction, en unités de l’actif de base (BTC pour BTCUSDT), pas en dollars : multipliez par le prix pour obtenir un notionnel. |
volume | float | Volume total, en unités de l’actif de base (BTC pour BTCUSDT) — pas en dollars. |
buy_volume / sell_volume | float | Volume acheteur et vendeur, en unités de l’actif de base. |
net_volume | float | Volume acheteur moins volume vendeur, en unités de l’actif de base. Positif = achat net. |
trade_rate | float | Transactions par seconde : le nombre divisé par la durée de l’unité de temps, y compris sur une bougie en formation, pour que la définition reste la même. |
is_volume_estimated | boolean | Vrai quand le volume agrégé de la bougie a été reconstitué (historique ancien), faux quand il est mesuré. |
is_closed | boolean | Faux uniquement sur une bougie en formation. |
Sur un stablecoin
/v1/trades-kline et /v1/trades-kline/spot restent alimentées, puisqu’un stablecoin a un marché spot. /v1/trades-kline/futures renvoie data: null avec unavailable: "not_applicable" : un stablecoin n’a pas de marché futures.