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.
Pour un agent IA, le snapshot tient en un appel MCP : l’outil get_pair_data du serveur MCP sert la valeur courante des champs du snapshot d’une paire en une requête, comptée une fois sur votre quota ; pour comparer jusqu’à dix paires, une requête par paire.
#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 (ou =true, qui signifie la même chose). symbol est obligatoire. Le snapshot est inclus à partir de l’offre Traders.
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
"https://api.bytnode.com/v1/snapshot?symbol=BTCUSDT\
&funding_rate=1\
&basis=1\
&fear_greed=1\
&cvd@1h=2"Sans aucun champ demandé, la réponse renvoie un data vide et le catalogue de ce que votre offre inclut : available_fields (les champs sans unité de temps), available_multi_tf_fields (demandés sous la forme name@tf), timeframes et max_depth, le plafond de chaque champ. Un client peut construire ses requêtes à partir de là sans lire cette page.
#Les 52 champs
Trente-sept champs se demandent par leur nom nu (la découverte, /v1/snapshot?symbol=BTCUSDT, les liste). Chacun a le nom et le contenu de sa route : un champ dont la route rend un objet revient sous la forme de cet objet, demandé avec =1 (ou =true) — une profondeur supérieure est un 422 qui renvoie à sa route /history ; les champs d’événements (trades individuels, événements de liquidation, bougies à la seconde) sont des listes, jusqu’au plafond de la colonne profondeur.
Prix et volume
| Champ | Type | Description |
|---|---|---|
trades_kline_futures_seconds | 1000 seconds | Les lignes de /v1/trades-kline/futures/seconds : les transactions futures perpétuels agrégées par seconde — volume, nombre, volumes acheteur et vendeur. |
trades_spot | 10,000 trades | Les transactions spot une à une, les lignes de /v1/trades/spot. |
trades_futures | 10,000 trades | Les transactions futures une à une, les lignes de /v1/trades/futures. |
price_change | valeur courante | Variation en % sur les huit unités de temps, calculée à la demande. |
Dérivés et positionnement
| Champ | Type | Description |
|---|---|---|
oi_change | valeur courante | Variation de l’open interest, avec son pourcentage. |
funding_next | valeur courante | Prochain funding estimé, normalisé en équivalent 8 h. |
funding_rate | 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_events | 10,000 événements | Les N dernières liquidations, les lignes de /v1/liquidations/events. Votre offre fixe combien : au-delà, 403 history_depth. |
liquidations_cumulative | valeur courante | Liquidations cumulées par fenêtres de 5 minutes. |
basis | valeur courante | Écart futures contre spot, pondéré par l’open interest. |
Tout le marché et satellites
| Champ | Type | Description |
|---|---|---|
tokenomics | valeur courante | Offre, capitalisation et FDV de l’actif du symbole. |
global | valeur courante | Capitalisation totale, volume, dominances BTC et ETH. |
fear_greed | valeur courante | Indice de sentiment 0-100 et sa classification. |
options_summary | valeur courante | Synthèse options de l’actif déduit du symbole (BTC ou ETH uniquement). |
macro_series, macro_correlations, macro_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. |
btc_mvrv, btc_nvt, btc_active_addresses, btc_revenue_per_difficulty | valeur courante | Valorisation on-chain de Bitcoin, données quotidiennes. |
eth_supply, eth_gas, eth_gas_momentum, eth_staking, eth_deflation, eth_defi, eth_squeeze, eth_price_btc | valeur courante | Les huit familles Ethereum. |
fear_greed_cmc, altcoin_season, cmc20, cmc100 | valeur courante | Sentiment CMC : l’indice Fear & Greed de CMC, l’Altcoin Season Index, et les indices CMC20 et CMC100. |
#Champs multi-unités de temps
Onze 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"]). klines prend aussi 1w (timeframes_by_field dans le catalogue). Un champ @tf est toujours une LISTE, même en profondeur 1 ; un champ sans unité de temps est l’OBJET de sa route (profondeur 1 seulement), sauf les champs d’événements (trades, liquidations, secondes), qui sont des listes.
1m5m15m30m1h4h1d
| Champ | Type | Description |
|---|---|---|
klines@tf | 1000 bougies | Les bougies de /v1/klines, de 1m à 1w (klines@1w aussi), avec les champs de la route : time, open, high, low, close, volume (spot + futures perpétuels) avec ses parts acheteuse et vendeuse, les mêmes par marché (volume_spot, volume_futures…), les drapeaux is_*_estimated et is_closed. Volumes en unités de l’actif de base. |
oi@tf | 1000 fenêtres | L’open interest total par bucket clos, les lignes de /v1/oi/history. oi@1m=1 donne la dernière minute. |
cvd@tf | 200 fenêtres | Delta de volume cumulé et sa série interne. |
buy_sell_ratio@tf | 1000 fenêtres | Ratio achats sur ventes par bucket clos (les mêmes buckets que cvd). |
trades_avg_size@tf | 1000 fenêtres | Taille moyenne des transactions par bucket clos, pondérée par leur nombre. |
liquidations_big_small_ratio@tf | 1000 fenêtres | Grosses liquidations contre petites, par bucket clos. |
orderbook@tf | 1000 fenêtres | Le carnet par fourchette de prix à la fin de chaque bucket, spot et futures perpétuels sommés : les lignes de /v1/orderbook/history. |
spread_interexchange@tf | 50 fenêtres | Prime de chaque plateforme. |
trades_kline@tf | 1440 bougies | Bougies de transactions (/v1/trades-kline), spot et futures sommés. |
trades_kline_spot@tf | 1440 bougies | Bougies de transactions, spot uniquement (/v1/trades-kline/spot). |
trades_kline_futures@tf | 1440 bougies | Bougies de transactions, futures uniquement (/v1/trades-kline/futures). |
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
is_partial
Présente sur toute réponse qui demande des champs. Elle passe à true dès qu’une partie de la réponse n’a pas pu être construite : le champ concerné vaut alors {"error": {"code": "...", "message": "..."}} 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.
{
"status": "ok",
"server_time": "2026-10-13T02:18:41.507Z",
"data_type": "snapshot",
"symbol": "USDCUSDT",
"is_partial": false,
"data": { "funding_rate": null, "options_summary": null, "basis": null },
"unavailable": {
"funding_rate": "not_applicable",
"options_summary": "not_applicable",
"basis": "not_applicable"
}
}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é.
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",
"server_time": "2026-10-13T02:30:56.839Z",
"data_type": "snapshot",
"symbol": "BTCUSDT",
"is_partial": false,
"data": {
"funding_rate": {"time": "2026-10-12T16:00:00.000Z", "period_end_at": "2026-10-13T00:00:00.000Z", "settled_at": "2026-10-13T00:00:00.005Z", "rate_pct": 0.0038949161538, "apr_pct": 4.26493318841, "is_closed": true},
"basis": {"time": "2026-10-13T02:30:14.102Z", "basis_value": -33.9427339947, "basis_pct": -0.0410036905061, "futures_price": 82743.8733191, "spot_price": 82777.8160531}
},
"out_of_plan_fields": ["fear_greed", "btc_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é | 422 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 | 422 invalid_depth |
| Profondeur au-delà du plafond du champ | 422 depth_too_large |
| Profondeur au-delà de la fenêtre d’historique de l’offre | 403 avec X-Deny-Reason: history_depth, et la limit maximale dans error.message |
| Clé inconnue, ou clé répétée | 422 avec le champ le plus proche en suggestion |
| 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@1h=1000 demande mille bougies horaires, ce que Traders (une semaine en 1h) refuse avec un 403 history_depth explicite plutôt que de renvoyer 168 bougies sous le nom de mille.
{
"status": "error",
"server_time": "2026-09-30T16:07:27.808Z",
"error": {
"code": "history_depth",
"message": "History depth beyond your plan: 1000 hour(s) requested on 1h, your plan allows 7 day(s) (i.e. at most limit=168 on this timeframe, and no since_ms/until_ms bound beyond that window).",
"param": "limit",
"details": {
"window_s": 604800,
"earliest_ms": 1791273600000,
"max_limit": 168,
"timeframe": "1h"
}
}
}