Données de marché

API de données on-chain

Les métriques on-chain de Bitcoin et d’Ethereum dans une seule API : MVRV, NVT, adresses actives, état du réseau et du mempool, offre d’ETH, gas, staking, DeFi et ratios. Plus besoin de brancher séparément un fournisseur d’analyse on-chain, un nœud Ethereum et un explorateur de blocs : une clé, un format, toutes les données.

Ce que dit la chaîne, indépendamment du carnet d’ordres : l’état du réseau Bitcoin, sa valorisation rapportée à l’usage, et les huit familles Ethereum. Toutes ces routes portent sur tout le marché : elles n’acceptent pas de ?symbol=.

#Données on-chain pour agents IA et LLM

« Le MVRV de Bitcoin est-il en zone d’euphorie ? », « Combien d’ETH est staké ? », « Ethereum est-il déflationniste cette semaine ? » : un agent IA lit les réseaux Bitcoin et Ethereum par l’outil MCP get_onchain_data, sans nœud ni explorateur de blocs.

MCP tools/call
Valorisation de Bitcoin, staking et offre d’Ethereum en un appel MCP.
{
  "name": "get_onchain_data",
  "arguments": {
    "fields": ["btc_mvrv", "eth_staking", "eth_deflation"]
  }
}
  • Pour le LLM : les métriques on-chain décrivent un réseau entier et ne prennent pas de paire ; un MVRV au-dessus de 3,5 a historiquement signifié l’euphorie, sous 1 un marché sous son coût moyen — une lecture, pas un signal.
  • Pour les développeurs : chaque métrique est une route (/v1/btc/mvrv, /v1/btc/mempool…), donc un outil pour votre propre agent IA quand vous le construisez en tool calling.
  • 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.

#Cadence et portée

Ces familles ne se rafraîchissent pas au rythme du marché, et les interroger chaque minute ne sert à rien.

  • Le réseau Bitcoin : le mempool et les frais bougent chaque minute, l’état du réseau toutes les cinq minutes, le minage toutes les dix.
  • La valorisation on-chain de Bitcoin : un point par jour, daté par time à minuit UTC.
  • Ethereum : quelques minutes pour l’offre, le gas et la DeFi ; une heure pour le staking. L’historique est quotidien.

Chaque route a son historique sous /history, avec une limit. Aucune n’accepte de symbole : passer ?symbol=BTCUSDT est refusé plutôt qu’ignoré, pour éviter qu’un chiffre de tout le marché soit attribué à un seul actif.

#Le réseau Bitcoin

GET/v1/btc/networkdata_type · btc_networkRéférence complète
Les 14 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
difficultydifficulty unitsNetwork mining difficulty (on a difficulty-adjustment row, the difficulty after it).
block_heightblock heightHeight of a block: the latest block on `/v1/btc/network`; the reward sample in `latest_reward`; the block where a difficulty adjustment took effect on `/v1/btc/mining/history?dataset=difficulty`.
progress_pctpercent (58.5 = 58.5 %)Progress through the current 2016-block difficulty period.
difficulty_change_pctpercent (58.5 = 58.5 %)Expected difficulty change at the next adjustment (`/v1/btc/mining/history?dataset=difficulty`: the change applied at that adjustment).
block_timeAverage block time over 24 h (`avg_24h_s`), its deviation from the 600 s target, and a `label`.
block_time.avg_24h_ssecondsAverage block time over 24 hours.
block_time.deviation_ssecondsavg_24h_s - 600.
block_time.label24 h block time versus the 600 s target: `slow` (> +30 s), `fast` (< -30 s) or `on_target`.
next_adjustmentNext difficulty adjustment: progress, expected change, date, remaining blocks and time.
next_adjustment.estimated_retarget_atISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Estimated instant of the next adjustment.
next_adjustment.remaining_block_countcountBlocks left before the adjustment.
next_adjustment.next_retarget_block_heightblock heightHeight of the block of the next adjustment.
next_adjustment.remaining_ssecondsEstimated time left before the adjustment, seconds.
ChampTypeDescription
block_heightintegerHauteur du dernier bloc.
difficultyfloatDifficulté actuelle.
progress_pctfloatAvancement dans la période d’ajustement en cours, en pourcentage.
difficulty_change_pctfloatVariation projetée au prochain ajustement, en pourcentage.
block_timeobjectLe temps moyen entre blocs et son écart à la cible de dix minutes.
GET/v1/btc/mempooldata_type · btc_mempoolRéférence complète
Les 10 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
tx_countcountUnconfirmed transactions in the mempool.
vsizevirtual bytesTotal virtual size of the mempool.
total_fee_satssatoshisTotal fees waiting in the mempool.
fee_histogram`[fee_rate, vsize]` pairs: how much virtual size (virtual bytes) waits at each fee rate (sat/vB).
trendMempool size change over 1 h, 4 h and 24 h, and its `label` (`filling`, `draining`, `stable`).
trend.vsize_change_1hvirtual bytesMempool size change over 1 hour.
trend.vsize_change_4hvirtual bytesMempool size change over 4 hours.
trend.vsize_change_24hvirtual bytesMempool size change over 24 hours.
trend.label`filling` (vsize grew over 1 h), `draining` (shrank) or `stable`.
ChampTypeDescription
tx_countintegerTransactions en attente.
vsizeintegerPoids total en attente.
total_fee_satsintegerFrais cumulés des transactions en attente, en satoshis.
fee_histogramarrayLa répartition des frais proposés, par palier.
trendobjectUn signal de remplissage : filling, draining ou stable.
GET/v1/btc/feesdata_type · btc_feesRéférence complète
Les 14 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
fastest_fee_sat_vbsatoshis per virtual byte (sat/vB)Fee rate for the next block.
half_hour_fee_sat_vbsatoshis per virtual byte (sat/vB)Fee rate for confirmation within ~30 minutes.
hour_fee_sat_vbsatoshis per virtual byte (sat/vB)Fee rate for confirmation within ~1 hour.
economy_fee_sat_vbsatoshis per virtual byte (sat/vB)Fee rate for a low-priority confirmation.
minimum_fee_sat_vbsatoshis per virtual byte (sat/vB)Minimum relay fee rate.
fastest_fee_precise_sat_vbsatoshis per virtual byte (sat/vB)`fastest_fee_sat_vb`, unrounded.
half_hour_fee_precise_sat_vbsatoshis per virtual byte (sat/vB)`half_hour_fee_sat_vb`, unrounded.
hour_fee_precise_sat_vbsatoshis per virtual byte (sat/vB)`hour_fee_sat_vb`, unrounded.
economy_fee_precise_sat_vbsatoshis per virtual byte (sat/vB)`economy_fee_sat_vb`, unrounded.
minimum_fee_precise_sat_vbsatoshis per virtual byte (sat/vB)`minimum_fee_sat_vb`, unrounded.
fee_pressure`fastest_economy_ratio` = fastest / economy fee rate, and its `label`: `normal` (<= 2), `elevated` (> 2), `congested` (> 5).
fee_pressure.fastest_economy_ratiofastest / economyFastest fee rate divided by the economy fee rate (a quotient).
fee_pressure.labelFee pressure: `normal` (ratio <= 2), `elevated` (> 2) or `congested` (> 5).
ChampTypeDescription
fastest_fee_sat_vb / half_hour_fee_sat_vb / hour_fee_sat_vb / economy_fee_sat_vb / minimum_fee_sat_vbintegerFrais recommandés par niveau de priorité, en satoshis par octet virtuel, arrondis à l’entier.
fastest_fee_precise_sat_vb / half_hour_fee_precise_sat_vb / hour_fee_precise_sat_vb / economy_fee_precise_sat_vb / minimum_fee_precise_sat_vbfloatLes mêmes, en valeurs fractionnaires : utile pour un service qui construit des transactions.
fee_pressureobjectUne lecture qualitative de la congestion.

/v1/btc/fees/history rend par défaut une ligne par lecture de la source (une par minute) ; ?timeframe=1h, 4h ou 1d garde la dernière lecture de chaque bucket clos, datée au début du bucket.

GET/v1/btc/miningdata_type · btc_miningRéférence complète
Les 19 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
concentrationMining pool concentration over the last period.
concentration.total_block_countcountBlocks in the period.
concentration.top1_share_pctpercent (58.5 = 58.5 %)Share of blocks mined by the largest pool.
concentration.top3_share_pctpercent (58.5 = 58.5 %)Share of blocks mined by the three largest pools.
concentration.pool_countcountNumber of pools that mined at least one block.
concentration.labelCentralisation risk from the top-3 pool share: `healthy` (<= 40 %), `moderate` (> 40 %), `high_risk` (> 50 %).
latest_rewardAverage block reward (subsidy + fees) of the latest blocks, in satoshis and USD.
latest_reward.timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
latest_reward.block_heightblock heightHeight of a block: the latest block on `/v1/btc/network`; the reward sample in `latest_reward`; the block where a difficulty adjustment took effect on `/v1/btc/mining/history?dataset=difficulty`.
latest_reward.avg_reward_satssatoshisAverage block reward.
latest_reward.avg_reward_usdUSDAverage block reward in USD.
latest_reward.btc_price_usdUSDBTC price in USD at the time of the row: the current price on `/v1/eth/price-btc`, the price at the block of the reward in `latest_reward` of `/v1/btc/mining` (used for `avg_reward_usd`).
poolsPools ranked by blocks mined: `name`, `slug`, `block_count`, `rank`, `share_pct`.
pools.nameHuman-readable name.
pools.slugStable identifier.
pools.block_countcountBlocks mined over the period.
pools.rankrank (1 = first)Rank.
pools.share_pctpercent (58.5 = 58.5 %)Share of blocks.

Concentration des pools, récompenses de bloc et difficulté. L’historique accepte un paramètre dataset pour choisir entre concentration, rewards, difficulty et fee_rates.

ChampTypeDescription
concentrationobjecttop1_share_pct et top3_share_pct : la part des blocs minés par le premier pool et par les trois premiers, en pourcentage. Chaque pool de la liste porte son propre share_pct.
latest_rewardobjectLa dernière récompense de bloc observée, en sats et en USD, avec le cours du BTC à ce bloc (btc_price_usd, block_height, et l’heure du bloc dans time) — pas le cours actuel.

#Valorisation on-chain de Bitcoin

Quatre métriques qui rapportent le prix à l’usage réel de la chaîne. Chacune expose une label : un repère de lecture, jamais un signal d’exécution.

GET/v1/btc/mvrvdata_type · btc_mvrvRéférence complète
Les 4 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)The day the value refers to, at midnight UTC.
mvrvdimensionless ratioMarket value / realised value.
label`undervalued` (<= 1), `fair` (> 1), `elevated` (> 2.5), `overvalued` (> 3.5).
change_30d_pctpercent (58.5 = 58.5 %)Relative change of the value over 30 days, percent.
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
  "https://api.bytnode.com/v1/btc/mvrv"

Le MVRV compare la capitalisation à la valeur à laquelle les pièces ont bougé pour la dernière fois. Au-dessus de 3,5, l’histoire parle d’euphorie ; en dessous de 1, le marché se traite sous son coût d’acquisition moyen.

GET/v1/btc/nvtdata_type · btc_nvtRéférence complète
Les 4 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)The day the value refers to, at midnight UTC.
nvtdimensionless ratioMarket cap / on-chain transaction volume of the day (NVT ratio), change returned to the sender excluded.
nvt_signaldimensionless ratioNVT Signal: market cap of the day / 90-day average of the on-chain transaction volume in USD. `null` with less than 90 days of data.
labelZone of the NVT Signal against its own last 730 days (share of those days when it was lower): `undervalued` (below 25 %), `fair` (from 25 %), `overvalued` (from 75 %), `bubble` (from 95 %). `null` with less than 365 days of NVT Signal.

Le NVT rapporte la capitalisation au volume des transactions on-chain : un ratio cours/chiffre d’affaires appliqué à un réseau. Il est dérivé à la demande, et servi avec nvt_signal, sa version lissée sur quatre-vingt-dix jours, moins bruitée.

GET/v1/btc/active-addressesdata_type · btc_active_addressesRéférence complète
Les 6 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)The day the value refers to, at midnight UTC.
active_addressescountAddresses active on the day.
active_addresses_sma_7dcount7-day simple moving average of active_addresses.
active_addresses_sma_30dcount30-day simple moving average of active_addresses.
sma_7d_vs_30d_pctpercent (58.5 = 58.5 %)(7-day simple moving average - 30-day simple moving average) / 30-day average, percent.
label7-day vs 30-day average: `accelerating` (> +5 %), `decelerating` (< -5 %) or `stable`.

Le nombre d’adresses actives, avec ses moyennes à sept et trente jours et le momentum qui les compare. C’est la mesure la plus directe de l’usage.

GET/v1/btc/revenue-per-difficultydata_type · btc_revenue_per_difficultyRéférence complète
Les 4 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)The day the value refers to, at midnight UTC.
revenue_per_difficulty_usdUSD per unit of difficultyMiners' daily revenue (USD) divided by the network difficulty of the day: revenue per unit of work. Read it against its 30-day average.
revenue_per_difficulty_sma_30d_usdUSD per unit of difficulty30-day simple moving average of revenue_per_difficulty_usd.
label`healthy` (at or above its 30-day average), `stress` (below it), `capitulation` (below 70 % of it — historically near BTC bottoms).

Le rapport entre les revenus des mineurs et la difficulté. Quand il s’effondre, les mineurs les moins efficaces vendent leurs réserves, créant une pression vendeuse qui n’apparaît pas dans le carnet d’ordres.

#On-chain Ethereum

Huit familles, toutes sur tout le marché, toutes avec un historique quotidien.

GET/v1/eth/supplydata_type · eth_supplyRéférence complète
Les 9 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
execution_issuance_cumulativeETHCumulative execution-layer issuance (genesis + proof-of-work rewards before the Merge), as published by Etherscan. NOT the supply: `total_supply` = this + `consensus_rewards_cumulative` - `burnt_fees_cumulative` (was `eth_supply`).
consensus_rewards_cumulativeETHCumulative consensus-layer issuance (staking rewards) since the Beacon Chain launch. NOT the ETH staked: see `total_staked` on `/v1/eth/staking`.
burnt_fees_cumulativeETHETH burnt since EIP-1559 (cumulative).
withdrawn_cumulativeETHETH withdrawn from staking (cumulative).
total_supplycoinsTotal coins issued (circulating + locked), net of burns.
burn_24hETHETH burnt over the last 24 h.
net_issuance_24hETHNew ETH issued minus ETH burnt over 24 h. Negative = deflationary.
label`deflationary` (24 h net issuance < 0), `inflationary` (> 0) or `neutral`.
ChampTypeDescription
execution_issuance_cumulativefloatETH émis sur la couche d’exécution depuis la genèse (allocation de genèse comprise), en ETH — pas l’offre en circulation. L’offre vaut total_supply = execution_issuance_cumulative + consensus_rewards_cumulative − burnt_fees_cumulative.
consensus_rewards_cumulativefloatÉmission cumulée de la couche de consensus. Ce n’est pas la quantité stakée : celle-ci est servie par /v1/eth/staking, sous total_staked.
burnt_fees_cumulativefloatTotal brûlé depuis l’origine.
withdrawn_cumulativefloatETH retirés du staking, en cumul.
total_supplyfloatOffre totale d’ETH : execution_issuance_cumulative + consensus_rewards_cumulative − burnt_fees_cumulative.
burn_24hfloatBrûlé sur les dernières 24 h.
net_issuance_24hfloatÉmission moins brûlage. Négative, l’offre se contracte.
labelstringUne lecture qualitative de l’émission nette.
GET/v1/eth/gasdata_type · eth_gasRéférence complète
Les 4 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
base_fee_gweigweiEIP-1559 base fee (burnt).
gas_used_ratiofraction (0.585 = 58.5 %)Block gas used / gas target over recent blocks.
labelCongestion: `low` (gas_used_ratio < 0.5), `normal`, or `high` (> 0.8).
GET/v1/eth/gas-momentumdata_type · eth_gas_momentumRéférence complète
Les 7 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
base_fee_gweigweiEIP-1559 base fee (burnt).
gas_used_ratiofraction (0.585 = 58.5 %)Block gas used / gas target over recent blocks.
gas_sma_7d_gweigwei7-day simple moving average of the base fee.
gas_sma_30d_gweigwei30-day simple moving average of the base fee.
sma_7d_vs_30d_pctpercent (58.5 = 58.5 %)(7-day simple moving average - 30-day simple moving average) / 30-day average, percent.
label`high_demand` (gas_used_ratio > 0.8 and sma_7d_vs_30d_pct > 0), `low_demand` (< 0.5 and sma_7d_vs_30d_pct < 0), otherwise `normal`.

Le prix du gas, sa congestion, puis son momentum : la valeur actuelle comparée à ses moyennes à sept et trente jours, avec le régime qui en découle. Le gas est la mesure la plus réactive de la demande de blocs sur Ethereum.

GET/v1/eth/stakingdata_type · eth_stakingRéférence complète
Les 5 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
staking_ratiofraction (0.585 = 58.5 %)Share of the ETH supply staked.
total_stakedETHETH staked (beacon chain).
total_supplycoinsTotal coins issued (circulating + locked), net of burns.
apr_pctpercent (58.5 = 58.5 %)Annualised rate in percent.
ChampTypeDescription
staking_ratiofloatPart de l’offre immobilisée, en fraction : 0.28 signifie 28 %.
total_staked / total_supplyfloatL’ETH réellement staké (la somme des soldes des validateurs) et l’offre totale, les deux termes du ratio.
apr_pctfloat | nullRendement annuel du staking, en pourcentage : 3.1 signifie 3,1 % par an. Calculé de la même façon sur la valeur courante et dans l’historique.
GET/v1/eth/deflationdata_type · eth_deflationRéférence complète
Les 5 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
burn_24hETHETH burnt over the last 24 h.
net_issuance_24hETHNew ETH issued minus ETH burnt over 24 h. Negative = deflationary.
net_issuance_annualized_pctpercent (58.5 = 58.5 %)Net issuance annualised, as a percent of supply. Negative = the supply shrinks.
label`deflationary` (24 h net issuance < 0) or `inflationary`.

Le brûlage face à l’émission, annualisés, avec la zone qui en résulte. C’est la lecture monétaire d’Ethereum : à forte activité, le réseau détruit plus qu’il n’émet.

GET/v1/eth/defidata_type · eth_defiRéférence complète
Les 8 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
tvl_usdUSDTotal value locked in Ethereum DeFi.
dex_volume_24h_usdUSDDEX volume over 24 h.
dex_volume_7d_usdUSDDEX volume over 7 days.
eth_market_cap_usdUSDETH market capitalisation.
defi_health_ratiofraction (0.585 = 58.5 %)tvl_usd / eth_market_cap_usd.
defi_health_change_30d_pctpercent (58.5 = 58.5 %)Relative change of `defi_health_ratio` (TVL / ETH market cap) over 30 days, percent.
label30-day trend of `defi_health_ratio` (TVL / ETH market cap): `growing`, `declining` or `stable`.
ChampTypeDescription
tvl_usdfloatValeur totale immobilisée dans la DeFi Ethereum.
dex_volume_24h_usd / dex_volume_7d_usdfloatVolume échangé sur les places décentralisées.
eth_market_cap_usdfloatCapitalisation de l’ETH.
defi_health_ratiofloatLe rapport entre l’activité DeFi et la capitalisation.
defi_health_change_30d_pctfloatLa tendance sur trente jours de la TVL, en pourcentage.
GET/v1/eth/squeezedata_type · eth_squeezeRéférence complète
Les 5 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
staking_ratiofraction (0.585 = 58.5 %)Share of the ETH supply staked.
net_issuance_annualized_pctpercent (58.5 = 58.5 %)Net issuance annualised, as a percent of supply. Negative = the supply shrinks.
squeeze_indexscore from 0 to 100Supply squeeze index: combines the staked share and net issuance. Higher = less liquid ETH available.
label`low` (< 33), `moderate` (>= 33), `high` (>= 66).

Un indice composite qui croise le taux d’immobilisation et la contraction de l’offre : plus il monte, plus l’offre disponible se raréfie.

GET/v1/eth/price-btcdata_type · eth_price_btcRéférence complète
Les 6 champs de cette route (d’après le contrat)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)Point-in-time value: the instant of the measurement (when the source was read).
eth_price_usdUSDETH price.
btc_price_usdUSDBTC price in USD at the time of the row: the current price on `/v1/eth/price-btc`, the price at the block of the reward in `latest_reward` of `/v1/btc/mining` (used for `avg_reward_usd`).
eth_price_btcBTCETH price in BTC (ETH price / BTC price).
change_7d_pctpercent (58.5 = 58.5 %)Relative change of the value over 7 days, percent.
label7-day momentum of ETH/BTC: `eth_outperform` (> 0), `btc_outperform` (< 0) or `neutral`.

Le ratio ETH/BTC, sa capitalisation relative et son momentum sur sept jours : la mesure de la rotation entre les deux actifs de référence.

Une dépendance à connaître

Les familles supply, gas, deflation et squeeze viennent d'une source amont unique ; tant qu’elle est indisponible, elles répondent vide avec la raison no_api_key dans le snapshot. staking combine plusieurs sources : le montant staké vient de l'API publique de la Beacon chain et ne demande aucune clé ; quand il date de plus d'1,5 fois son rythme de collecte, staking_ratio et l'indice squeeze valent null plutôt qu'une valeur périmée. defi et price-btc restent servis.