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.

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

GET/v1/snapshotdata_type · snapshotRéférence complète

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

ChampTypeDescription
trades_kline_futures_seconds1000 secondsLes lignes de /v1/trades-kline/futures/seconds : les transactions futures perpétuels agrégées par seconde — volume, nombre, volumes acheteur et vendeur.
trades_spot10,000 tradesLes transactions spot une à une, les lignes de /v1/trades/spot.
trades_futures10,000 tradesLes transactions futures une à une, les lignes de /v1/trades/futures.
price_changevaleur couranteVariation en % sur les huit unités de temps, calculée à la demande.

Dérivés et positionnement

ChampTypeDescription
oi_changevaleur couranteVariation de l’open interest, avec son pourcentage.
funding_nextvaleur couranteProchain funding estimé, normalisé en équivalent 8 h.
funding_ratevaleur couranteDernier taux appliqué, pondéré par l’open interest.
funding_cumulativevaleur couranteCumul sur 24 h, somme des trois dernières fenêtres.
liquidations_events10,000 événementsLes N dernières liquidations, les lignes de /v1/liquidations/events. Votre offre fixe combien : au-delà, 403 history_depth.
liquidations_cumulativevaleur couranteLiquidations cumulées par fenêtres de 5 minutes.
basisvaleur couranteÉcart futures contre spot, pondéré par l’open interest.

Tout le marché et satellites

ChampTypeDescription
tokenomicsvaleur couranteOffre, capitalisation et FDV de l’actif du symbole.
globalvaleur couranteCapitalisation totale, volume, dominances BTC et ETH.
fear_greedvaleur couranteIndice de sentiment 0-100 et sa classification.
options_summaryvaleur couranteSynthèse options de l’actif déduit du symbole (BTC ou ETH uniquement).
macro_series, macro_correlations, macro_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.
btc_mvrv, btc_nvt, btc_active_addresses, btc_revenue_per_difficultyvaleur couranteValorisation on-chain de Bitcoin, données quotidiennes.
eth_supply, eth_gas, eth_gas_momentum, eth_staking, eth_deflation, eth_defi, eth_squeeze, eth_price_btcvaleur couranteLes huit familles Ethereum.
fear_greed_cmc, altcoin_season, cmc20, cmc100valeur couranteSentiment 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

ChampTypeDescription
klines@tf1000 bougiesLes 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@tf1000 fenêtresL’open interest total par bucket clos, les lignes de /v1/oi/history. oi@1m=1 donne la dernière minute.
cvd@tf200 fenêtresDelta de volume cumulé et sa série interne.
buy_sell_ratio@tf1000 fenêtresRatio achats sur ventes par bucket clos (les mêmes buckets que cvd).
trades_avg_size@tf1000 fenêtresTaille moyenne des transactions par bucket clos, pondérée par leur nombre.
liquidations_big_small_ratio@tf1000 fenêtresGrosses liquidations contre petites, par bucket clos.
orderbook@tf1000 fenêtresLe 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@tf50 fenêtresPrime de chaque plateforme.
trades_kline@tf1440 bougiesBougies de transactions (/v1/trades-kline), spot et futures sommés.
trades_kline_spot@tf1440 bougiesBougies de transactions, spot uniquement (/v1/trades-kline/spot).
trades_kline_futures@tf1440 bougiesBougies 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.

Réponse
{
  "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.

Réponse
{
  "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

CasCode
symbol absent422
Symbole inconnu ou désactivé422 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 à 1422 invalid_depth
Profondeur au-delà du plafond du champ422 depth_too_large
Profondeur au-delà de la fenêtre d’historique de l’offre403 avec X-Deny-Reason: history_depth, et la limit maximale dans error.message
Clé inconnue, ou clé répétée422 avec le champ le plus proche en suggestion
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@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.

403
{
  "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"
    }
  }
}