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
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
| Champ | Type | Description |
|---|---|---|
klines_1m … klines_1w | 1000 candles | Les huit unités de temps. Chaque ligne : horodatage, ouverture, plus haut, plus bas, clôture, volume, taker_buy, taker_sell. |
taker_combined | 1440 minutes | Volume acheteur et vendeur par minute, sommé sur toutes les plateformes. |
trades_raw | 3600 seconds | Agrégat des transactions par seconde : volume total, nombre, répartition taker. |
spot_ticks | 10,000 rows | Transactions spot individuelles. |
futures_ticks | 10,000 rows | Transactions futures individuelles. |
price_change | current value | Variation en % sur les huit unités de temps, calculée à la demande. |
Dérivés et positionnement
| Champ | Type | Description |
|---|---|---|
oi_snapshots | current value | Open interest total, sommé sur les plateformes. |
oi_history | 1440 minutes | Historique de l’open interest total, à la minute. |
oi_delta | 60 minutes | Variation de l’open interest, avec son pourcentage. |
funding_next | current value | Prochain funding estimé, normalisé en équivalent 8 h. |
funding_rate_8h | current value | Dernier taux appliqué, pondéré par l’open interest. |
funding_cumulative | current value | 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 | current value | Grosses liquidations contre petites. |
basis | 60 minutes | Écart futures contre spot, pondéré par l’open interest. |
Carnet d’ordres et microstructure
| Champ | Type | Description |
|---|---|---|
orderbook | current value | Profondeur acheteuse et vendeuse sommée, avec le déséquilibre. |
vwap | 60 minutes | VWAP intrajournalier, cumulé depuis minuit UTC. |
buysell_ratio | current value | Ratio achats sur ventes, fenêtre de 5 minutes. |
trade_size | current value | Taille moyenne des transactions, pondérée par leur nombre. |
heatmap | current value | Grappes de liquidations au-dessus et en dessous du prix. |
Tout le marché et satellites
| Champ | Type | Description |
|---|---|---|
tokenomics | current value | Offre, capitalisation et FDV de l’actif du symbole. |
global_market | current value | Capitalisation totale, volume, dominances BTC et ETH. |
fear_greed | current value | Indice de sentiment 0-100 et sa classification. |
options | current value | Synthèse options de l’actif déduit du symbole (BTC ou ETH uniquement). |
macro, macro_correlations, net_liquidity, macro_momentum, macro_risk | current value | Séries macro et les quatre indicateurs dérivés. |
btc_network, btc_mempool, btc_fees, btc_mining | current value | État du réseau Bitcoin. |
onchain_mvrv, onchain_nvt, onchain_active_addresses, onchain_miner_stress | current value | Valorisation on-chain de Bitcoin, données quotidiennes. |
eth_supply, eth_gas, eth_gas_momentum, eth_staking, eth_deflation, eth_defi, eth_squeeze, eth_ratio | current value | Les 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
| Champ | Type | Description |
|---|---|---|
cvd@tf | 200 windows | Delta de volume cumulé et sa série interne. |
orderbook_aggregated@tf | 1000 windows | Carnet agrégé : moyenne, min, max et écart-type du déséquilibre. |
vwap_window@tf | 1000 windows | VWAP de la fenêtre, distinct du VWAP intrajournalier. |
spread_interexchange@tf | 50 windows | Prime de chaque plateforme. Le seul champ qui nomme les plateformes. |
trade@tf | 1440 candles | Bougies de transactions, spot et futures sommés. |
trade_spot@tf | 1440 candles | Bougies de transactions, spot uniquement. |
trade_future@tf | 1440 candles | Bougies de transactions, futures uniquement. |
ls_ratio@tf | 500 windows | Ratio 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.
{
"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.
{
"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
| Cas | Code |
|---|---|
symbol absent | 422 |
| Symbole inconnu ou désactivé | 400 avec la liste des symboles actifs |
| Champ multi-unités de temps sans suffixe, ou l’inverse | 422 |
| Unité de temps inconnue | 422 |
| Profondeur non entière ou inférieure à 1 | 400 |
| Profondeur au-delà du plafond du champ | 400 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’offre | 403, avec la limit maximale 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 avec un 403 explicite plutôt que de renvoyer 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)."
}