Primeros pasos

Convenciones

Las reglas que valen para todas las familias. Explican por qué dos llamadas al mismo endpoint pueden diferir, por qué una cifra no se compara con otra y qué significa la ausencia de un mercado en un agregado.

#Símbolos

Se siguen veintidós activos: veinte perpetuos USDT-M y dos stablecoins, estas últimas solo en spot. La lista viva la sirve /v1/symbols, y esa es la que manda.

SímboloActivoMercados recopilados
BTCUSDTBitcoinspot + perpetual
ETHUSDTEthereumspot + perpetual
SOLUSDTSolanaspot + perpetual
XRPUSDTXRPspot + perpetual
DOGEUSDTDogecoinspot + perpetual
BNBUSDTBNBspot + perpetual
TRXUSDTTRONspot + perpetual
SUIUSDTSuispot + perpetual
HYPEUSDTHYPEspot + perpetual
XLMUSDTStellarspot + perpetual
XMRUSDTMonerospot + perpetual
LINKUSDTChainlinkspot + perpetual
ADAUSDTCardanospot + perpetual
LTCUSDTLitecoinspot + perpetual
UNIUSDTUniswapspot + perpetual
GRAMUSDTGram (formerly Toncoin)spot + perpetual
AVAXUSDTAvalanchespot + perpetual
HBARUSDTHederaspot + perpetual
NEARUSDTNEAR Protocolspot + perpetual
TAOUSDTBittensorspot + perpetual
USDCUSDTUSDCspot
USDTUSDCUSDTspot

symbol es obligatorio

En todas las rutas propias de un activo. Si falta, la petición devuelve 422; si es desconocido o está desactivado, 400 con la lista de valores aceptados. No hay símbolo por defecto ni alternativa: servir Bitcoin a quien no pidió nada produciría una cifra correcta atribuida al activo equivocado.

Los datos de todo el mercado, en cambio, no aceptan ningún símbolo: Fear & Greed, mercado global, macro, ETF, red de Bitcoin, on-chain de BTC y ETH. Las opciones se seleccionan con ?asset=BTC o ?asset=ETH.

#Temporalidades

En las rutas por intervalos, siete valores:

1m5m15m30m1h4h1d

Los indicadores técnicos aceptan un octavo, la semana, porque se calculan directamente sobre las velas:

1m5m15m30m1h4h1d1w

Dos excepciones que recordar:

  • El ratio largo/corto rechaza 1m: ningún mercado publica un ratio de cuenta global en esa temporalidad.
  • Los instrumentos macro intradía rechazan 30m y cinco de ellos solo se sirven en 1d. El catálogo de la familia indica cuáles.

Un valor fuera de la lista devuelve 422 con los valores aceptados, nunca una alternativa silenciosa a otra temporalidad.

#Agregación multimercado

Ninguna respuesta nombra su mercado. Las métricas multimercado llegan ya fusionadas: es el contrato de la plataforma, y la razón por la que varias integraciones se convierten en una. Tres reglas de fusión, según la naturaleza de la magnitud:

NaturalezaTipoDescripción
sumadditiveVolúmenes, interés abierto, número de operaciones, liquidaciones, profundidad del libro. Un mercado que falta hace mecánicamente que la cifra sea demasiado baja.
open-interest-weighted averagerates and pricesFunding, base, ratio largo/corto. El mercado que lleva más posiciones pesa más, y eso es lo que hace representativo al compuesto.
volume-weighted averageaverage pricesVWAP y precio de referencia. El peso natural de un precio medio es el volumen que lo produjo.

Una sola excepción en toda la API: /v1/spread/interexchange nombra los mercados, ya que un diferencial no tiene sentido sin ellos. En todos los demás casos el parámetro exchange no existe: pasarlo devuelve 422.

#Velas cerradas y periodo en curso

Seis familias sirven datos cortados en ventanas: las velas de operaciones, el VWAP por ventana, el CVD, el libro de órdenes agregado, los diferenciales entre mercados y el ratio largo/corto. En ellas, cada fila lleva un booleano is_closed, lo hayas pedido o no.

ValorTipoDescripción
truebooleanEl valor es definitivo e inmutable. No volverá a moverse: se puede almacenar, sumar o comparar con un gráfico.
falsebooleanEl valor es provisional. Dos llamadas sucesivas pueden devolver cifras distintas para la misma fila.

Por defecto solo se sirven las ventanas cerradas. Para ver el periodo en curso, añade ?live=1:

curl
# The latest CLOSED hourly candle: its value will not move again.
curl -H "X-API-KEY: $BYTNODE_KEY" \
  "https://api.bytnode.com/v1/cvd?symbol=BTCUSDT&timeframe=1h"

# The candle IN PROGRESS: provisional, flagged is_closed: false.
curl -H "X-API-KEY: $BYTNODE_KEY" \
  "https://api.bytnode.com/v1/cvd?symbol=BTCUSDT&timeframe=1h&live=1"

Lo que hay que saber de ?live=1

  • Es una opción. Sin ella, la respuesta es exactamente la de antes.
  • Solo en las rutas de último valor. Las rutas /history solo sirven datos cerrados, por definición; allí se ignora el parámetro.
  • Nunca un null. Si el periodo en curso aún no ha recibido nada (un mercado tranquilo), se devuelve en su lugar la última ventana cerrada.
  • El valor no salta al cierre. Provisional y definitivo salen de la misma definición: cuando el periodo se cierra, la fila se congela en la cifra que mostraba.

Frescura alcanzable: unos dos segundos en operaciones, VWAP, CVD y diferenciales; de seis a diez segundos en el libro de órdenes; un minuto en el ratio largo/corto, que los mercados no publican más rápido.

#Cobertura de las fuentes

Como el mercado nunca se nombra, un funding calculado sobre dos mercados tiene la misma forma que uno calculado sobre seis. Dos mecanismos devuelven esa información:

  • venue_count, fila a fila: el número real para la ventana concreta. Varía de una ventana a otra, así que no puede ser un atributo global. El funding lo llama exchange_count, por razones históricas.
  • la clave coverage del snapshot, para lo que es constante en todas las filas: cuántos mercados se esperaban y el efecto de una ausencia.
coverage
{
  "coverage": {
    "oi_history": {
      "status": "available",
      "effect": "additive",
      "count_field": "venue_count",
      "venues_expected": 6
    },
    "cvd@1h": { "status": "unavailable", "reason": "pre_aggregated" }
  }
}
ClaveTipoDescripción
effect: additivestringUn mercado que falta hace mecánicamente que la cifra sea demasiado baja. Nunca presentes la caída como un evento de mercado: di «al menos X».
effect: weightedstringEl nivel sigue siendo válido pero puede estar sesgado. No lo compares con un historial calculado sobre más mercados.
venues_expectedintegerEl denominador observado en una ventana móvil, nunca declarado. Varía según el activo y la métrica: algunos activos no cotizan en todas partes, y no todos los mercados publican liquidaciones.
status: unavailablestringLa cobertura no se conoce para este campo: o el mercado se fusionó al escribir, o las filas son anteriores a la medición. No concluyas que es completa.

#Marcas de tiempo y orden

  • Las marcas de tiempo de los datos están en ISO 8601, en UTC: 2026-08-29T11:38:00+00:00. La clave bucket designa el inicio de la ventana, nunca su final.
  • Los límites de la petición (since_ms y until_ms) están en milisegundos desde la época Unix. Un límite negativo, o un since_ms mayor que until_ms, devuelve 422.
  • Los arrays de valores (la serie de un indicador, la serie interna de un CVD) van del más antiguo al más reciente.
  • Las listas de historial se devuelven del más reciente al más antiguo. La fila más fresca va primero.
  • El día empieza a medianoche UTC: es el reinicio del VWAP intradía y la alineación de las series diarias.