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
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.
{
"status": "ok",
"timestamp": 1775647758094,
"database": "connected"
}En cas de problème, la réponse porte 503 et "database": "unreachable".
#Fraîcheur des sources
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.
{
"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
}
}
}| Champ | Type | Description |
|---|---|---|
count | integer | Nombre de lignes disponibles. |
last_insert | string | null | Horodatage ISO 8601 de la dernière écriture. |
age_seconds | float | null | Secondes écoulées depuis. |
is_stale | boolean | Vrai 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_seconds | integer | null | Le seuil appliqué. null signifie qu’aucun seuil n’a de sens pour cette source (un indice publié une fois par jour, par exemple). |
per_exchange | object | Sur les sources multi-places : l’âge de chacune. Une seule place tombée y est visible. |
any_exchange_stale | boolean | Accompagne 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
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.
{
"status": "ok",
"timestamp": 1775648758094,
"data_type": "symbols",
"data": [
{ "symbol": "BTCUSDT", "base_asset": "BTC", "name": "Bitcoin" },
{ "symbol": "ETHUSDT", "base_asset": "ETH", "name": "Ethereum" }
]
}| Champ | Type | Description |
|---|---|---|
symbol | string | L’identifiant à passer dans ?symbol=. |
base_asset | string | L’actif de base (BTC, ETH). C’est ce que les routes d’options prennent dans ?asset=. |
name | string | Le nom complet, pour l’affichage. |
#Rapport de capacités
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"| Champ | Type | Description |
|---|---|---|
symbol | string | L’actif interrogé. |
asset_class | string | crypto ou stablecoin. |
feeds_active_last_24h | object | Huit 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_available | array | Les métriques calculables : tous leurs flux d’entrée sont présents. |
computed_metrics_blocked | object | Les métriques empêchées, avec les flux manquants et la raison. |
computed_metrics_not_applicable | object | Sur un stablecoin : chaque métrique dérivée du marché à terme, avec sa raison. C’est voulu, pas une panne. |
stablecoin_note | string | Sur un stablecoin : ce qui reste disponible en spot. |
Un symbole inconnu ou désactivé renvoie 400 avec la liste des symboles actifs.