API REST

Système et métadonnées

Quatre routes qui ne servent aucune métrique de marché : elles disent si le service répond, si les données sont fraîches, quels actifs existent, et ce que chacun peut réellement servir.

#Santé du service

GET/v1/healthsans clé

La sonde. Elle dit si le service est en marche et si sa base de données répond. C’est la seule route qui répond sans clé, et elle n’est jamais décomptée du quota, ce qui en fait le point qu’un système de supervision peut interroger sans rien consommer.

200
{
  "status": "ok",
  "timestamp": 1775647758094,
  "database": "connected"
}

En cas de problème, la réponse porte 503 et "database": "unreachable".

#Fraîcheur des sources

GET/v1/status

Pour chaque source qui alimente le cœur de marché : le nombre de lignes, la dernière insertion, son âge, et un drapeau is_stale calculé côté serveur selon un seuil propre à cette source. C’est la route à interroger avant de construire une analyse : savoir qu’une donnée est ancienne vaut mieux que de le découvrir dans un résultat.

200
{
  "status": "ok",
  "timestamp": 1775648290510,
  "tables": {
    "raw_exchange.klines_1m": {
      "count": 4881977,
      "last_insert": "2026-08-29T11:37:00+00:00",
      "age_seconds": 70.5,
      "is_stale": false,
      "stale_threshold_seconds": 180
    },
    "raw_exchange.trades_raw": {
      "count": 918964,
      "last_insert": "2026-08-29T11:38:09+00:00",
      "age_seconds": 1.5,
      "is_stale": false,
      "stale_threshold_seconds": 30,
      "per_exchange": {
        "venue_a": { "age_seconds": 1.2, "is_stale": false },
        "venue_b": { "age_seconds": 2.0, "is_stale": false }
      },
      "any_exchange_stale": false
    }
  }
}
ChampTypeDescription
countintegerNombre de lignes disponibles.
last_insertstring | nullHorodatage ISO 8601 de la dernière écriture.
age_secondsfloat | nullSecondes écoulées depuis.
is_stalebooleanVrai si l’âge dépasse le seuil. Une source vide qui a un seuil est marquée obsolète : « aucune donnée du tout » est un signal plus fort que « données en retard ».
stale_threshold_secondsinteger | nullLe seuil appliqué. null signifie qu’aucun seuil n’a de sens pour cette source (un indice publié une fois par jour, par exemple).
per_exchangeobjectSur les sources multi-places : l’âge de chacune. Une seule place tombée y est visible.
any_exchange_stalebooleanAccompagne per_exchange. Le drapeau racine repose sur la source la plus fraîche : une place morte y serait invisible tant que les autres continuent d’écrire. Celui-ci la fait apparaître.

#Catalogue des symboles

GET/v1/symbolsdata_type · symbols

La liste vivante des actifs activés. C’est elle qui fait foi : ne codez pas la liste en dur dans un client, faites-la lire au démarrage.

200
{
  "status": "ok",
  "timestamp": 1775648758094,
  "data_type": "symbols",
  "data": [
    { "symbol": "BTCUSDT", "base_asset": "BTC", "name": "Bitcoin" },
    { "symbol": "ETHUSDT", "base_asset": "ETH", "name": "Ethereum" }
  ]
}
ChampTypeDescription
symbolstringL’identifiant à passer dans ?symbol=.
base_assetstringL’actif de base (BTC, ETH). C’est ce que les routes d’options prennent dans ?asset=.
namestringLe nom complet, pour l’affichage.

#Rapport de capacités

GET/v1/symbols/{symbol}/capabilitiesdata_type · symbol_capabilities

Ce que cet actif peut réellement servir, mesuré sur les dernières vingt-quatre heures. Il permet d’anticiper une réponse vide au lieu de la découvrir, et de distinguer une métrique qui n’a pas de sens ici d’une métrique momentanément bloquée.

curl -H "X-API-KEY: $BYTNODE_KEY" \
  "https://api.bytnode.com/v1/symbols/USDCUSDT/capabilities"
ChampTypeDescription
symbolstringL’actif interrogé.
asset_classstringcrypto ou stablecoin.
feeds_active_last_24hobjectHuit flux, chacun vrai ou faux selon qu’il a produit des données sur la fenêtre. La capacité n’est pas la fraîcheur : un flux actif il y a vingt heures y est encore vrai.
computed_metrics_availablearrayLes métriques calculables : tous leurs flux d’entrée sont présents.
computed_metrics_blockedobjectLes métriques empêchées, avec les flux manquants et la raison.
computed_metrics_not_applicableobjectSur un stablecoin : chaque métrique dérivée du marché à terme, avec sa raison. C’est voulu, pas une panne.
stablecoin_notestringSur un stablecoin : ce qui reste disponible en spot.

Un symbole inconnu ou désactivé renvoie 400 avec la liste des symboles actifs.