API REST

Snapshot

Un endpoint à la carte : vous nommez les champs, il les rapporte tous en une seule requête. C’est le bon point 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 renvoie un 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 candlesLes huit unités de temps. Chaque ligne : horodatage, ouverture, plus haut, plus bas, clôture, volume, taker_buy, taker_sell.
taker_combined1440 minutesVolume acheteur et vendeur par minute, sommé sur toutes les plateformes.
trades_raw3600 secondsAgrégat des transactions par seconde : volume total, nombre, répartition taker.
spot_ticks10,000 rowsTransactions spot individuelles.
futures_ticks10,000 rowsTransactions futures individuelles.
price_changecurrent valueVariation en % sur les huit unités de temps, calculée à la demande.

Dérivés et positionnement

ChampTypeDescription
oi_snapshotscurrent valueOpen interest total, sommé sur les plateformes.
oi_history1440 minutesHistorique de l’open interest total, à la minute.
oi_delta60 minutesVariation de l’open interest, avec son pourcentage.
funding_nextcurrent valueProchain funding estimé, normalisé en équivalent 8 h.
funding_rate_8hcurrent valueDernier taux appliqué, pondéré par l’open interest.
funding_cumulativecurrent valueCumul 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_ratiocurrent valueGrosses liquidations contre petites.
basis60 minutesÉcart futures contre spot, pondéré par l’open interest.

Carnet d’ordres et microstructure

ChampTypeDescription
orderbookcurrent valueProfondeur acheteuse et vendeuse sommée, avec le déséquilibre.
vwap60 minutesVWAP intrajournalier, cumulé depuis minuit UTC.
buysell_ratiocurrent valueRatio achats sur ventes, fenêtre de 5 minutes.
trade_sizecurrent valueTaille moyenne des transactions, pondérée par leur nombre.
heatmapcurrent valueGrappes de liquidations au-dessus et en dessous du prix.

Tout le marché et satellites

ChampTypeDescription
tokenomicscurrent valueOffre, capitalisation et FDV de l’actif du symbole.
global_marketcurrent valueCapitalisation totale, volume, dominances BTC et ETH.
fear_greedcurrent valueIndice de sentiment 0-100 et sa classification.
optionscurrent valueSynthèse options de l’actif déduit du symbole (BTC ou ETH uniquement).
macro, macro_correlations, net_liquidity, macro_momentum, macro_riskcurrent valueSéries macro et les quatre indicateurs dérivés.
btc_network, btc_mempool, btc_fees, btc_miningcurrent valueÉtat du réseau Bitcoin.
onchain_mvrv, onchain_nvt, onchain_active_addresses, onchain_miner_stresscurrent valueValorisation on-chain de Bitcoin, données quotidiennes.
eth_supply, eth_gas, eth_gas_momentum, eth_staking, eth_deflation, eth_defi, eth_squeeze, eth_ratiocurrent valueLes huit familles Ethereum.

#Champs multi-unités de temps

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

1m5m15m30m1h4h1d

ChampTypeDescription
cvd@tf200 windowsDelta de volume cumulé et sa série interne.
orderbook_aggregated@tf1000 windowsCarnet agrégé : moyenne, min, max et écart-type du déséquilibre.
vwap_window@tf1000 windowsVWAP de la fenêtre, distinct du VWAP intrajournalier.
spread_interexchange@tf50 windowsPrime de chaque plateforme. Le seul champ qui nomme les plateformes.
trade@tf1440 candlesBougies de transactions, spot et futures sommés.
trade_spot@tf1440 candlesBougies de transactions, spot uniquement.
trade_future@tf1440 candlesBougies de transactions, futures uniquement.
ls_ratio@tf500 windowsRatio long/short composite. Pas de 1m.

Demander un champ multi-unités de temps sans son suffixe renvoie 422, et l’inverse aussi : un champ à forme unique suffixé @1h est refusé.

#Les clés additionnelles

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. Un échec local reste local : vous n’obtenez jamais une réponse vide parce qu’une famille sur sept était indisponible.

unavailable

Présente seulement 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 (une absence réelle sur la fenêtre). Seule la troisième permet une conclusion de marché.

coverage

Combien de plateformes 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 renvoie 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 figure dans out_of_plan_fields, présente seulement 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 renvoie un data vide avec la liste complète dans out_of_plan_fields, jamais un résultat 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-unités de temps sans suffixe, ou l’inverse422
Unité de temps inconnue422
Profondeur non entière ou inférieure à 1400
Profondeur au-delà du plafond du champ400 sur un champ à forme unique, 422 sur un champ multi-unités de temps
Profondeur au-delà de la fenêtre d’historique de l’offre403, avec la limit maximale 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 avec un 403 explicite plutôt que de renvoyer 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)."
}