Référence

Journal des modifications

Ce qui a changé dans le contrat de l’API, du plus récent au plus ancien, et le préavis auquel nous nous engageons avant un changement cassant. Contrat actuel : v1, version OpenAPI 1.1.0.

#Versions et obsolescence

Le contrat est v1. Non cassant, et livré sans préavis : une nouvelle route, un nouveau champ dans une réponse, un nouveau paramètre facultatif, un nouvel error.code, une nouvelle valeur dans un texte informatif. Écrivez des clients qui ignorent les champs inconnus.

Cassant : supprimer ou renommer une route, un champ, un paramètre ou un error.code, changer une unité ou le sens d’un champ. Un changement cassant est annoncé sur cette page, et ne prend effet pour votre offre qu’une fois son préavis écoulé :

OffrePréavis avant un changement cassant
FreeAucun préavis garanti (annoncé sur cette page)
Traders30 jours
Financial60 jours
Startup90 jours
EnterpriseFixé par le contrat

#Changements

2026-10-01 · Un seul format d’erreur, une référence générée

  • Toute erreur a une seule forme : status: "error", timestamp, error {code, message, param} et detail. error.code est stable et lisible par une machine : c’est lui qu’il faut tester. detail est conservé et répète le message ; sur une erreur de validation, c’est désormais une chaîne et non plus une liste.
  • Les messages d’erreur sont en anglais (ils étaient en français). Un client qui comparait le texte français doit passer à error.code.
  • /v1/snapshot accepte =true comme une profondeur de 1 (funding_rate_8h=true). Appelé avec symbol seul, il renvoie désormais aussi available_multi_tf_fields, timeframes et max_depth.
  • timePeriod=1mo sur les historiques Bitcoin, une écriture sans ambiguïté d’un mois ; 1m y fonctionne toujours et y signifie toujours un mois.
  • POST /v1/indicators accepte aussi les paramètres imbriqués dans un objet parameters.
  • /v1/trades/future sur un stablecoin répond unavailable: "not_applicable" (il disait no_data).
  • Les réponses sont compressées (gzip) quand le client le demande ; GET https://api.bytnode.com/ répond un index JSON des liens.
  • Le contrat OpenAPI porte désormais un schéma, l’unité de chaque champ et un exemple réel pour chaque route, les réponses d’erreur et des exemples de code. Nouveau : llms-full.txt, une collection Postman et la référence interactive.
  • Les textes de /v1/macro/correlations (method) et de /v1/macro/risk (condition) sont en anglais.

2026-09-30 · Qualité des données

  • Les bougies de transactions combinées (/v1/trades) sont construites à partir des bougies spot et futures de la même fenêtre.
  • Nouveau champ volume_estimated sur les bougies : true quand le volume agrégé d’une bougie plus ancienne a été reconstitué.
  • Le funding est aligné sur la période réellement couverte ; /v1/funding/rate?live=1 sert la fenêtre en cours.
  • La variation de prix de la paire USDC est calculée sur les bougies spot.
  • WebSocket : chaque message book.* porte mid_avg et spread_bps_avg.

2026-09-29 · Alias de temps, réponses vides, contrat publié

  • Chaque objet horodaté sous data porte aussi time, une copie de son bucket, timestamp, date… : un client générique lit une seule clé.
  • Toute route REST dont data est vide porte unavailable (not_applicable, no_api_key, no_data), comme le snapshot.
  • Le contrat OpenAPI, avec l’unité de chaque champ numérique, est servi sans clé sur /openapi.json.
  • Les bougies OHLC viennent d’un marché spot de référence par symbole ; les volumes restent agrégés sur toutes les places.
  • Un timeframe inconnu est un 422, et non plus un 403.

2026-09-28 · Paramètres stricts et une échelle par suffixe

  • Paramètres stricts : un paramètre qu’une route ne déclare pas, ou un paramètre répété, est un 422 avec une suggestion (il était ignoré en silence).
  • since_ms / until_ms en secondes, en micro- ou nanosecondes, ou antérieurs au 2009-01-03 sont un 422.
  • Unités par suffixe : *_pct est un pourcentage, *_ratio une fraction, *_bps des points de base. apr est devenu apr_pct ; basis_pct est servi ×100.
  • Chaque horodatage est en ISO 8601 UTC à millisecondes fixes (2026-09-28T14:00:00.000Z).
  • L’enveloppe rappelle le symbol et le timeframe effectifs de la requête.
  • is_closed est immuable : une fenêtre close est définitive et n’est jamais réécrite.
  • En-têtes de débit au format IETF (RateLimit-Policy, RateLimit), avec le quota mensuel restant.
  • Toute erreur produite par la passerelle est en JSON, jamais une page HTML.
  • /v1/status a une ligne par flux public, avec un seuil de 1,5 × son intervalle attendu.

2026-09-26 · Serveur MCP

  • Le serveur MCP expose trois outils couvrant toute l’API (73 champs), avec la clé et l’offre du client lui-même.
  • Un historique n’est jamais coupé en silence : une période sans timeframe reçoit le pas le plus fin qui tient, et chaque série porte sa couverture réelle (ranges).

2026-09-16 · Capacité du WebSocket

  • Le flux WebSocket tourne sur une infrastructure dédiée et annonce sa capacité : un 503 à la poignée de main signifie que le service est plein, pas que votre offre a refusé.
  • Les numéros de séquence (seq) sont globaux par canal.

2026-09-12 · Dix nouvelles paires

  • XMR, LINK, ADA, LTC, UNI, GRAM (ex-TON), AVAX, HBAR, NEAR et TAO rejoignent le catalogue : 22 paires.