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
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
| Champ | Type | Description |
|---|---|---|
klines_1m … klines_1w | 1000 bougies | Les huit pas de temps. Chaque ligne : timestamp, open, high, low, close, volume, taker_buy, taker_sell. |
taker_combined | 1440 minutes | Volume acheteur et vendeur par minute, sommé sur toutes les places. |
trades_raw | 3600 secondes | Agrégat de trades à la seconde : volume total, nombre, décomposition taker. |
spot_ticks | 10 000 lignes | Trades spot individuels. |
futures_ticks | 10 000 lignes | Trades à terme individuels. |
price_change | valeur courante | Variation en % sur les huit pas de temps, calculée à la demande. |
Dérivés et positionnement
| Champ | Type | Description |
|---|---|---|
oi_snapshots | valeur courante | Open interest total, sommé sur les places. |
oi_history | 1440 minutes | Historique de l’open interest total, à la minute. |
oi_delta | 60 minutes | Variation d’open interest, avec son pourcentage. |
funding_next | valeur courante | Prochain funding estimé, normalisé en équivalent 8 h. |
funding_rate_8h | valeur courante | Dernier taux appliqué, pondéré par l’open interest. |
funding_cumulative | valeur courante | Cumul sur 24 h, somme des trois dernières fenêtres. |
liquidations | 1440 minutes | Événements individuels sur la fenêtre de recherche. |
liq_cumulative | 1440 minutes | Liquidations cumulées par fenêtres de 5 minutes. |
liq_ratio | valeur courante | Grosses liquidations contre petites. |
basis | 60 minutes | Écart futures contre spot, pondéré par l’open interest. |
Carnet et microstructure
| Champ | Type | Description |
|---|---|---|
orderbook | valeur courante | Profondeur bid et ask sommée, avec le déséquilibre. |
vwap | 60 minutes | VWAP intraday cumulatif depuis minuit UTC. |
buysell_ratio | valeur courante | Ratio acheteur sur vendeur, fenêtre de 5 minutes. |
trade_size | valeur courante | Taille moyenne des trades, pondérée par leur nombre. |
heatmap | valeur courante | Clusters de liquidation au-dessus et en dessous du prix. |
Marché entier et satellites
| Champ | Type | Description |
|---|---|---|
tokenomics | valeur courante | Supply, capitalisation et FDV de l’actif du symbole. |
global_market | valeur courante | Capitalisation totale, volume, dominances BTC et ETH. |
fear_greed | valeur courante | Indice de sentiment 0-100 et sa classification. |
options | valeur courante | Résumé options de l’actif dérivé du symbole — BTC ou ETH seulement. |
macro, macro_correlations, net_liquidity, macro_momentum, macro_risk | valeur courante | Séries macro et les quatre indicateurs dérivés. |
btc_network, btc_mempool, btc_fees, btc_mining | valeur courante | État du réseau Bitcoin. |
onchain_mvrv, onchain_nvt, onchain_active_addresses, onchain_miner_stress | valeur courante | Valorisation on-chain Bitcoin, données quotidiennes. |
eth_supply, eth_gas, eth_gas_momentum, eth_staking, eth_deflation, eth_defi, eth_squeeze, eth_ratio | valeur courante | Les 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 data — data["cvd@1h"].
1m5m15m30m1h4h1d
| Champ | Type | Description |
|---|---|---|
cvd@tf | 200 fenêtres | Cumulative volume delta et sa série interne. |
orderbook_aggregated@tf | 1000 fenêtres | Carnet agrégé : moyenne, min, max et écart-type du déséquilibre. |
vwap_window@tf | 1000 fenêtres | VWAP de la fenêtre, distinct du VWAP intraday. |
spread_interexchange@tf | 50 fenêtres | Prime de chaque place. Le seul champ qui nomme les places. |
trade@tf | 1440 bougies | Bougies de trades, spot et futures sommés. |
trade_spot@tf | 1440 bougies | Bougies de trades, spot seul. |
trade_future@tf | 1440 bougies | Bougies de trades, futures seuls. |
ls_ratio@tf | 500 fenêtres | Ratio 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.
{
"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.
{
"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
| Cas | Code |
|---|---|
symbol absent | 422 |
| Symbole inconnu ou désactivé | 400 avec la liste des symboles actifs |
| Champ multi-timeframe sans suffixe, ou l’inverse | 422 |
| Pas de temps inconnu | 422 |
| Profondeur non entière ou inférieure à 1 | 400 |
| Profondeur au-delà du plafond du champ | 400 à forme unique, 422 en multi-timeframe |
| Profondeur au-delà de la fenêtre d’historique de l’offre | 403, avec le limit maximal dans detail |
| Champ d’une famille hors offre | pas 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.
{
"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)."
}