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ímbolo | Activo | Mercados recopilados |
|---|---|---|
BTCUSDT | Bitcoin | spot + perpetual |
ETHUSDT | Ethereum | spot + perpetual |
SOLUSDT | Solana | spot + perpetual |
XRPUSDT | XRP | spot + perpetual |
DOGEUSDT | Dogecoin | spot + perpetual |
BNBUSDT | BNB | spot + perpetual |
TRXUSDT | TRON | spot + perpetual |
SUIUSDT | Sui | spot + perpetual |
HYPEUSDT | HYPE | spot + perpetual |
XLMUSDT | Stellar | spot + perpetual |
XMRUSDT | Monero | spot + perpetual |
LINKUSDT | Chainlink | spot + perpetual |
ADAUSDT | Cardano | spot + perpetual |
LTCUSDT | Litecoin | spot + perpetual |
UNIUSDT | Uniswap | spot + perpetual |
GRAMUSDT | Gram (formerly Toncoin) | spot + perpetual |
AVAXUSDT | Avalanche | spot + perpetual |
HBARUSDT | Hedera | spot + perpetual |
NEARUSDT | NEAR Protocol | spot + perpetual |
TAOUSDT | Bittensor | spot + perpetual |
USDCUSDT | USDC | spot |
USDTUSDC | USDT | spot |
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
30my cinco de ellos solo se sirven en1d. 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:
| Naturaleza | Tipo | Descripción |
|---|---|---|
sum | additive | Volú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 average | rates and prices | Funding, 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 average | average prices | VWAP 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.
| Valor | Tipo | Descripción |
|---|---|---|
true | boolean | El valor es definitivo e inmutable. No volverá a moverse: se puede almacenar, sumar o comparar con un gráfico. |
false | boolean | El 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:
# 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
/historysolo 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 llamaexchange_count, por razones históricas.- la clave
coveragedel snapshot, para lo que es constante en todas las filas: cuántos mercados se esperaban y el efecto de una ausencia.
{
"coverage": {
"oi_history": {
"status": "available",
"effect": "additive",
"count_field": "venue_count",
"venues_expected": 6
},
"cvd@1h": { "status": "unavailable", "reason": "pre_aggregated" }
}
}| Clave | Tipo | Descripción |
|---|---|---|
effect: additive | string | Un 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: weighted | string | El nivel sigue siendo válido pero puede estar sesgado. No lo compares con un historial calculado sobre más mercados. |
venues_expected | integer | El 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: unavailable | string | La 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 clavebucketdesigna el inicio de la ventana, nunca su final. - Los límites de la petición (
since_msyuntil_ms) están en milisegundos desde la época Unix. Un límite negativo, o unsince_msmayor queuntil_ms, devuelve422. - 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.