Datos de mercado

API de datos on-chain

Las métricas on-chain de Bitcoin y Ethereum en una sola API: MVRV, NVT, direcciones activas, estado de la red y del mempool, oferta de ETH, gas, staking, DeFi y ratios. Ya no hace falta conectar por separado un proveedor de análisis on-chain, un nodo de Ethereum y un explorador de bloques: una clave, un formato, todos los datos.

Lo que dice la cadena, con independencia del libro de órdenes: el estado de la red de Bitcoin, su valoración frente al uso y las ocho familias de Ethereum. Todas estas rutas son de todo el mercado: no aceptan ?symbol=.

#Datos on-chain para agentes de IA y LLM

«¿Está el MVRV de Bitcoin en zona de euforia?», «¿Cuánto ETH está en staking?», «¿Es Ethereum deflacionario esta semana?»: un agente de IA lee las redes de Bitcoin y Ethereum mediante la herramienta MCP get_onchain_data, sin nodo ni explorador de bloques.

MCP tools/call
Valoración de Bitcoin, staking y oferta de Ethereum en una llamada MCP.
{
  "name": "get_onchain_data",
  "arguments": {
    "fields": ["btc_mvrv", "eth_staking", "eth_deflation"]
  }
}
  • Para el LLM: las métricas on-chain describen una red entera y no toman par; un MVRV por encima de 3,5 ha significado históricamente euforia, y por debajo de 1 un mercado bajo su coste medio — una lectura, no una señal.
  • Para desarrolladores: cada métrica es una ruta (/v1/btc/mvrv, /v1/btc/mempool…), es decir, una herramienta para tu propio agente de IA cuando lo construyes con tool calling.
  • Dónde funciona: Claude, ChatGPT, Cursor y cualquier cliente MCP, incluidos los frameworks de agentes compatibles con MCP, como LangChain o n8n.

Conecta tu agente de IA con la guía del servidor MCP, o enséñale BytNode con los Agent Skills de código abierto.

#Cadencia y alcance

Estas familias no se actualizan al ritmo del mercado, y consultarlas cada minuto no sirve de nada.

  • La red de Bitcoin: el mempool y las comisiones cambian cada minuto, el estado de la red cada cinco minutos, la minería cada diez.
  • La valoración on-chain de Bitcoin: un punto al día, fechado con time a medianoche UTC.
  • Ethereum: unos minutos para la oferta, el gas y la DeFi; una hora para el staking. El historial es diario.

Cada ruta tiene su historial en /history, con un limit. Ninguna acepta símbolo: pasar ?symbol=BTCUSDT se rechaza en lugar de ignorarse, para evitar que una cifra de todo el mercado se atribuya a un solo activo.

#La red de Bitcoin

GET/v1/btc/networkdata_type · btc_networkReferencia completa
Los 14 campos de esta ruta (según el contrato)
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.
CampoTipoDescripción
block_heightintegerAltura del último bloque.
difficultyfloatDificultad actual.
progress_pctfloatAvance en el periodo de ajuste en curso, en porcentaje.
difficulty_change_pctfloatVariación proyectada en el próximo ajuste, en porcentaje.
block_timeobjectEl tiempo medio entre bloques y su diferencia respecto al objetivo de diez minutos.
GET/v1/btc/mempooldata_type · btc_mempoolReferencia completa
Los 10 campos de esta ruta (según el contrato)
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`.
CampoTipoDescripción
tx_countintegerTransacciones pendientes.
vsizeintegerPeso total pendiente.
total_fee_satsintegerComisiones acumuladas de las transacciones pendientes, en satoshis.
fee_histogramarrayEl reparto de las comisiones ofrecidas, por tramo.
trendobjectUna señal de llenado: filling, draining o stable.
GET/v1/btc/feesdata_type · btc_feesReferencia completa
Los 14 campos de esta ruta (según el contrato)
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).
CampoTipoDescripción
fastest_fee_sat_vb / half_hour_fee_sat_vb / hour_fee_sat_vb / economy_fee_sat_vb / minimum_fee_sat_vbintegerComisiones recomendadas por nivel de prioridad, en satoshis por byte virtual, redondeadas al entero.
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_vbfloatLas mismas, en valores fraccionarios: útil para un servicio que construye transacciones.
fee_pressureobjectUna lectura cualitativa de la congestión.

/v1/btc/fees/history devuelve por defecto una fila por lectura de la fuente (una por minuto); ?timeframe=1h, 4h o 1d conserva la última lectura de cada bucket cerrado, fechada al inicio del bucket.

GET/v1/btc/miningdata_type · btc_miningReferencia completa
Los 19 campos de esta ruta (según el contrato)
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.

Concentración de los pools, recompensas de bloque y dificultad. El historial acepta un parámetro dataset para elegir entre concentration, rewards, difficulty y fee_rates.

CampoTipoDescripción
concentrationobjecttop1_share_pct y top3_share_pct: la parte de los bloques minados por el primer pool y por los tres primeros, en porcentaje. Cada pool de la lista lleva su propio share_pct.
latest_rewardobjectLa última recompensa de bloque observada, en sats y en USD, con el precio del BTC en ese bloque (btc_price_usd, block_height, y la hora del bloque en time), no el precio actual.

#Valoración on-chain de Bitcoin

Cuatro métricas que ponen el precio frente al uso real de la cadena. Cada una expone una label: una referencia de lectura, nunca una señal de ejecución.

GET/v1/btc/mvrvdata_type · btc_mvrvReferencia completa
Los 4 campos de esta ruta (según el contrato)
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"

El MVRV compara la capitalización con el valor al que las monedas se movieron por última vez. Por encima de 3,5, la historia habla de euforia; por debajo de 1, el mercado cotiza por debajo de su coste medio de adquisición.

GET/v1/btc/nvtdata_type · btc_nvtReferencia completa
Los 4 campos de esta ruta (según el contrato)
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.

El NVT pone la capitalización frente al volumen de transacciones on-chain: un ratio precio/ingresos aplicado a una red. Se deriva bajo demanda y se sirve con nvt_signal, su versión suavizada a noventa días, con menos ruido.

GET/v1/btc/active-addressesdata_type · btc_active_addressesReferencia completa
Los 6 campos de esta ruta (según el contrato)
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`.

El número de direcciones activas, con sus medias a siete y treinta días y el momentum que las compara. Es la medida más directa del uso.

GET/v1/btc/revenue-per-difficultydata_type · btc_revenue_per_difficultyReferencia completa
Los 4 campos de esta ruta (según el contrato)
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).

La relación entre los ingresos de los mineros y la dificultad. Cuando se desploma, los mineros menos eficientes venden sus reservas, generando una presión vendedora que no aparece en el libro de órdenes.

#On-chain de Ethereum

Ocho familias, todas de todo el mercado, todas con historial diario.

GET/v1/eth/supplydata_type · eth_supplyReferencia completa
Los 9 campos de esta ruta (según el contrato)
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`.
CampoTipoDescripción
execution_issuance_cumulativefloatETH emitido en la capa de ejecución desde el génesis (asignación del génesis incluida), en ETH — no la oferta en circulación. La oferta es total_supply = execution_issuance_cumulative + consensus_rewards_cumulative − burnt_fees_cumulative.
consensus_rewards_cumulativefloatEmisión acumulada de la capa de consenso. No es la cantidad en staking: esa la sirve /v1/eth/staking, como total_staked.
burnt_fees_cumulativefloatTotal quemado desde el origen.
withdrawn_cumulativefloatETH retirados del staking, acumulado.
total_supplyfloatOferta total de ETH: execution_issuance_cumulative + consensus_rewards_cumulative − burnt_fees_cumulative.
burn_24hfloatQuemado en las últimas 24 h.
net_issuance_24hfloatEmisión menos quema. Negativa, la oferta se contrae.
labelstringUna lectura cualitativa de la emisión neta.
GET/v1/eth/gasdata_type · eth_gasReferencia completa
Los 4 campos de esta ruta (según el contrato)
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_momentumReferencia completa
Los 7 campos de esta ruta (según el contrato)
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`.

El precio del gas, su congestión y después su momentum: el valor actual comparado con sus medias a siete y treinta días, con el régimen que se deriva. El gas es la medida más reactiva de la demanda de bloques en Ethereum.

GET/v1/eth/stakingdata_type · eth_stakingReferencia completa
Los 5 campos de esta ruta (según el contrato)
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.
CampoTipoDescripción
staking_ratiofloatParte de la oferta bloqueada, como fracción: 0.28 significa 28 %.
total_staked / total_supplyfloatEl ETH realmente en staking (la suma de los saldos de los validadores) y la oferta total, los dos términos del ratio.
apr_pctfloat | nullRendimiento anual del staking, en porcentaje: 3.1 significa 3,1 % anual. Se calcula igual en el valor actual y en el historial.
GET/v1/eth/deflationdata_type · eth_deflationReferencia completa
Los 5 campos de esta ruta (según el contrato)
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`.

La quema frente a la emisión, anualizadas, con la zona resultante. Es la lectura monetaria de Ethereum: con mucha actividad, la red destruye más de lo que emite.

GET/v1/eth/defidata_type · eth_defiReferencia completa
Los 8 campos de esta ruta (según el contrato)
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`.
CampoTipoDescripción
tvl_usdfloatValor total bloqueado en la DeFi de Ethereum.
dex_volume_24h_usd / dex_volume_7d_usdfloatVolumen negociado en mercados descentralizados.
eth_market_cap_usdfloatCapitalización de ETH.
defi_health_ratiofloatLa relación entre la actividad DeFi y la capitalización.
defi_health_change_30d_pctfloatLa tendencia a treinta días del TVL, en porcentaje.
GET/v1/eth/squeezedata_type · eth_squeezeReferencia completa
Los 5 campos de esta ruta (según el contrato)
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 índice compuesto que cruza la tasa de bloqueo con la contracción de la oferta: cuanto más sube, más escasa es la oferta disponible.

GET/v1/eth/price-btcdata_type · eth_price_btcReferencia completa
Los 6 campos de esta ruta (según el contrato)
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`.

El ratio ETH/BTC, su capitalización relativa y su momentum a siete días: la medida de la rotación entre los dos activos de referencia.

Una dependencia que conviene conocer

Las familias supply, gas, deflation y squeeze provienen de una única fuente; mientras no está disponible, responden vacías con el motivo no_api_key en el snapshot. staking combina varias fuentes: el importe en staking viene de la API pública de la Beacon chain y no requiere clave; cuando tiene más de 1,5 veces su ritmo de recogida, staking_ratio y el índice squeeze valen null en lugar de un valor desfasado. defi y price-btc siguen disponibles.