API REST

Snapshot

Un endpoint à la carte : vous nommez les champs, il les ramène tous en une requête. C’est la bonne porte d’entrée pour un tableau de bord ou pour alimenter un modèle — un appel par cycle au lieu de dix.

#Le principe

GET/v1/snapshotdata_type · snapshot

Chaque paramètre de la requête est un nom de champ, et sa valeur la profondeur demandée — un nombre de lignes, de minutes ou de secondes selon le champ. Les champs qui n’ont qu’une valeur courante se demandent avec =1. symbol est obligatoire.

curl -H "X-API-KEY: $BYTNODE_KEY" \
  "https://api.bytnode.com/v1/snapshot?symbol=BTCUSDT\
&klines_1h=24\
&funding_rate_8h=1\
&oi_delta=60\
&liq_cumulative=120\
&cvd@1h=24\
&options=1\
&fear_greed=1"

Sans aucun champ demandé, la réponse rend data vide et la liste available_fields — pratique pour découvrir le catalogue depuis un client.

#Les 61 champs

Cinquante-trois champs se demandent par leur nom nu. La colonne profondeur donne l’unité et le plafond ; un champ sans plafond indiqué n’a qu’une valeur courante et se demande avec =1.

Prix et volume

ChampTypeDescription
klines_1m … klines_1w1000 bougiesLes huit pas de temps. Chaque ligne : timestamp, open, high, low, close, volume, taker_buy, taker_sell.
taker_combined1440 minutesVolume acheteur et vendeur par minute, sommé sur toutes les places.
trades_raw3600 secondesAgrégat de trades à la seconde : volume total, nombre, décomposition taker.
spot_ticks10 000 lignesTrades spot individuels.
futures_ticks10 000 lignesTrades à terme individuels.
price_changevaleur couranteVariation en % sur les huit pas de temps, calculée à la demande.

Dérivés et positionnement

ChampTypeDescription
oi_snapshotsvaleur couranteOpen interest total, sommé sur les places.
oi_history1440 minutesHistorique de l’open interest total, à la minute.
oi_delta60 minutesVariation d’open interest, avec son pourcentage.
funding_nextvaleur couranteProchain funding estimé, normalisé en équivalent 8 h.
funding_rate_8hvaleur couranteDernier taux appliqué, pondéré par l’open interest.
funding_cumulativevaleur couranteCumul sur 24 h, somme des trois dernières fenêtres.
liquidations1440 minutesÉvénements individuels sur la fenêtre de recherche.
liq_cumulative1440 minutesLiquidations cumulées par fenêtres de 5 minutes.
liq_ratiovaleur couranteGrosses liquidations contre petites.
basis60 minutesÉcart futures contre spot, pondéré par l’open interest.

Carnet et microstructure

ChampTypeDescription
orderbookvaleur couranteProfondeur bid et ask sommée, avec le déséquilibre.
vwap60 minutesVWAP intraday cumulatif depuis minuit UTC.
buysell_ratiovaleur couranteRatio acheteur sur vendeur, fenêtre de 5 minutes.
trade_sizevaleur couranteTaille moyenne des trades, pondérée par leur nombre.
heatmapvaleur couranteClusters de liquidation au-dessus et en dessous du prix.

Marché entier et satellites

ChampTypeDescription
tokenomicsvaleur couranteSupply, capitalisation et FDV de l’actif du symbole.
global_marketvaleur couranteCapitalisation totale, volume, dominances BTC et ETH.
fear_greedvaleur couranteIndice de sentiment 0-100 et sa classification.
optionsvaleur couranteRésumé options de l’actif dérivé du symbole — BTC ou ETH seulement.
macro, macro_correlations, net_liquidity, macro_momentum, macro_riskvaleur couranteSéries macro et les quatre indicateurs dérivés.
btc_network, btc_mempool, btc_fees, btc_miningvaleur couranteÉtat du réseau Bitcoin.
onchain_mvrv, onchain_nvt, onchain_active_addresses, onchain_miner_stressvaleur couranteValorisation on-chain Bitcoin, données quotidiennes.
eth_supply, eth_gas, eth_gas_momentum, eth_staking, eth_deflation, eth_defi, eth_squeeze, eth_ratiovaleur couranteLes huit familles Ethereum.

#Champs multi-timeframe

Huit champs existent par pas de temps. Ils se demandent avec le suffixe @tf, obligatoire, et la clé revient telle quelle dans datadata["cvd@1h"].

1m5m15m30m1h4h1d

ChampTypeDescription
cvd@tf200 fenêtresCumulative volume delta et sa série interne.
orderbook_aggregated@tf1000 fenêtresCarnet agrégé : moyenne, min, max et écart-type du déséquilibre.
vwap_window@tf1000 fenêtresVWAP de la fenêtre, distinct du VWAP intraday.
spread_interexchange@tf50 fenêtresPrime de chaque place. Le seul champ qui nomme les places.
trade@tf1440 bougiesBougies de trades, spot et futures sommés.
trade_spot@tf1440 bougiesBougies de trades, spot seul.
trade_future@tf1440 bougiesBougies de trades, futures seuls.
ls_ratio@tf500 fenêtresRatio long/short composite. Pas de 1m.

Demander un champ multi-timeframe sans son suffixe rend 422, et l’inverse également : un champ à forme unique suffixé @1h est refusé.

#Les clés additives

partial

Toujours présente. Elle passe à true dès qu’une partie de la réponse n’a pas pu être construite : le champ concerné vaut alors {"error": "..."} et les autres répondent normalement. Une panne locale reste locale — vous n’obtenez jamais une réponse vide parce qu’une famille sur sept était indisponible.

unavailable

Présente uniquement si au moins un champ demandé est vide. Elle dit pourquoi, ce qu’un null seul ne peut pas faire.

Réponse
{
  "data": { "funding_rate_8h": null, "options": null, "heatmap": [] },
  "unavailable": {
    "funding_rate_8h": "not_applicable",
    "options": "not_applicable",
    "heatmap": "no_data"
  }
}

Trois valeurs, par ordre de priorité : not_applicable (le phénomène n’existe pas pour cet actif), no_api_key (la source amont n’est pas branchée, rien n’a jamais été collecté), no_data (réelle absence sur la fenêtre). Seule la troisième autorise une conclusion de marché.

coverage

Combien de places ont produit le chiffre, et l’effet d’une absence. Le compte réel voyage ligne par ligne dans venue_count ; coverage porte ce qui est constant sur toutes les lignes. Le détail des valeurs est décrit sur la page Conventions.

out_of_plan_fields

Le snapshot rend le contenu des autres familles, et il est filtré selon votre offre : un champ dont la famille n’est pas dans l’offre est retiré de data et son nom est listé dans out_of_plan_fields, présente uniquement dans ce cas. Les autres champs répondent normalement ; la requête n’est pas refusée.

Réponse
{
  "status": "ok",
  "data_type": "snapshot",
  "partial": false,
  "data": {
    "funding_rate_8h": { "bucket": "...", "rate": 0.000082, "apr": 0.0898 },
    "basis": [ { "timestamp": "...", "basis_pct": 0.059 } ]
  },
  "out_of_plan_fields": ["fear_greed", "onchain_mvrv"]
}

Sans aucun champ demandé, available_fields ne liste que les champs de votre offre. Un snapshot dont tous les champs sont hors offre rend data vide avec la liste complète dans out_of_plan_fields — jamais un vide sans explication. La correspondance entre familles et offres est sur la page des offres ; le snapshot lui-même est ouvert à partir de Traders.

#Erreurs

CasCode
symbol absent422
Symbole inconnu ou désactivé400 avec la liste des symboles actifs
Champ multi-timeframe sans suffixe, ou l’inverse422
Pas de temps inconnu422
Profondeur non entière ou inférieure à 1400
Profondeur au-delà du plafond du champ400 à forme unique, 422 en multi-timeframe
Profondeur au-delà de la fenêtre d’historique de l’offre403, avec le limit maximal dans detail
Champ d’une famille hors offrepas une erreur : le champ est retiré et listé dans out_of_plan_fields

La fenêtre d’historique de l’offre s’applique aux champs datés comme aux routes REST : klines_1m=1000 demande seize heures de bougies 1 min, ce que Free — une heure en 1m — refuse en 403 explicite plutôt que de rendre soixante bougies sous le nom de mille.

403
{
  "detail": "Profondeur d'historique hors offre : 16 heure(s) demandes en 1m, votre offre en autorise 1 heure(s) (soit limit=60 au maximum sur ce timeframe, et aucune borne since_ms/until_ms au-dela de cette fenetre)."
}