API REST

Système et métadonnées

Quatre routes qui ne servent pas de métrique de marché : elles disent si le service répond, si la donnée est fraîche, 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 debout et si sa base répond. C’est la seule route qui répond sans clé, et elle n’est jamais décomptée du quota — le point qu’un système de surveillance 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 alimentant le cœur de marché : le nombre de lignes, la dernière insertion, son âge, et un drapeau is_stale calculé côté serveur contre un seuil propre à cette source. C’est la route à interroger avant de bâtir une analyse — savoir qu’une donnée est vieille vaut mieux que de la 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 périmée : « pas de donnée du tout » est un signal plus fort que « donnée 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-place : 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 écrivent. Celui-ci la fait remonter.

#Catalogue des symboles

GET/v1/symbolsdata_type · symbols

La liste vivante des actifs activés. C’est elle qui fait foi : n’écrivez 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 en ?symbol=.
base_assetstringL’actif de base — BTC, ETH. C’est lui que prennent les routes options en ?asset=.
namestringLe nom complet, pour affichage.

#Rapport de capacité

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

Ce que cet actif peut réellement servir, mesuré sur les vingt-quatre dernières heures. Il permet de prévoir 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 de la donnée sur la fenêtre. Capacité n’est pas 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 : toutes les métriques dérivées du marché à terme, avec leur raison. C’est intentionnel, pas une panne.
stablecoin_notestringSur un stablecoin : ce qui reste disponible en spot.

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