Bitculator

Changelog

Changelog de l'API

Chaque changement apporté à la Data API et à son contrat, du plus récent au plus ancien. Les numéros de version suivent la politique de versionnement et de dépréciation.

  1. v1.3.3 Modifié

    Création et test de webhooks limités à 5 requêtes par minute

    POST /webhooks et POST /webhooks/{id}/test partagent désormais une limite de 5 requêtes par minute et par compte, en plus de la limite de rafale du forfait. Au-delà, les requêtes reçoivent 429 rate_limited avec Retry-After. Un événement de test est désormais envoyé une seule fois, sans nouvelle tentative ; les autres livraisons sont toujours tentées jusqu'à 3 fois, avec un backoff entre les tentatives. Il s'agit d'une limite anti-abus, qui laisse inchangés le quota mensuel et la limite de rafale de chaque forfait. La politique de versionnement et de dépréciation a été modifiée le même jour pour que de telles limites puissent s'appliquer immédiatement ; jusque-là, abaisser toute limite de débit dont disposait un forfait suivait le calendrier de dépréciation de six mois. Sur ces deux endpoints, les en-têtes X-RateLimit-* indiquent celle des deux limites à laquelle il reste le moins de requêtes.

  2. v1.3.3 Modifié

    Noms d'hôte des webhooks résolus à la livraison, et non plus à la création

    POST /webhooks ne résout plus le nom d'hôte de l'URL. Il renvoie toujours 422 lorsque l'URL n'utilise pas https, contient des identifiants ou a pour hôte une adresse IP non publique. Un nom d'hôte qui ne se résout pas, ou qui se résout vers une adresse non publique, recevait jusqu'ici 422 ; il est désormais accepté avec 201 et compte dans la limite de 5 endpoints par compte. Chaque livraison vers un tel endpoint échoue alors sans nouvelle tentative, le champ error de GET /webhooks/{id}/deliveries en donne la raison, et 10 livraisons échouées d'affilée désactivent l'endpoint. Après avoir créé un endpoint, envoyez-lui un événement de test avec POST /webhooks/{id}/test et consultez le journal de livraison pour vérifier qu'il est joignable.

  3. v1.3.3 Modifié

    Détail de l'utilisation par modèle de route, et non plus par chemin

    endpoints[].endpoint sur GET /usage indique désormais le modèle de route au lieu du chemin demandé, soit api/v1/coins/{slug} au lieu de api/v1/coins/bitcoin : chaque endpoint a ainsi une seule ligne au lieu d'une par slug ou id. Les requêtes enregistrées plus tôt dans la période de facturation en cours gardent leur chemin, si bien que les deux formes peuvent apparaître jusqu'à la fin de la période.

  4. v1.3.2 Corrigé

    Profil et trust score d'un exchange corrigés

    GET /exchanges/{slug} et GET /exchanges/{slug}/trust-score échouaient avec une erreur 500 pour chaque exchange depuis le lancement de la Data API. Les deux répondent désormais ; les paramètres et les champs de réponse sont inchangés, et un exchange sans rang renvoie score et breakdown à null.

  5. v1.3.2 Modifié

    Types du contrat corrigés

    Le contrat OpenAPI publié signale désormais comme nullable chaque champ pouvant valoir null et type les valeurs fractionnaires comme des nombres (par exemple invested sur GET /calculators/dca et les valeurs des indicateurs) ; les champs communs logo et last_updated ainsi que les champs de pagination from/to sont nullables sur tous les endpoints, de même que le name et le price des cryptos sur tous les endpoints de listes de cryptos et de prix. Il type aussi la series du DCA comme un tableau, documente les réponses de GET /coins/{slug}/markets, GET /coins/losers, GET /global/history/{metric} et GET /sentiment/altseason, documente la plage 1–365 de days sur GET /sentiment/altseason (0 a toujours été refusé ; omettez-le pour obtenir la lecture actuelle) et répertorie les codes endpoint_unavailable (503) et http_error dans le schéma d'erreur. Aucune requête ni réponse n'a changé - seulement la façon dont elles sont décrites.

  6. v1.3.1 Modifié

    Échecs d'authentification limités par clé

    Les échecs d'authentification étaient plafonnés à 30 tentatives par minute et par IP, après quoi chaque clé derrière cette IP recevait 429. Désormais, une clé peut échouer 30 fois par minute depuis une même IP, et une IP 300 fois ; les clés authentifiées au cours des 15 dernières minutes environ ne sont pas bloquées par le plafond par IP, et une requête sans clé renvoie 401 sans être comptée. Les requêtes bloquées reçoivent 429 rate_limited avec Retry-After.

  7. v1.3.1 Modifié

    Les URL non canoniques sont redirigées

    Les requêtes GET et HEAD dont le chemin comporte une barre oblique finale, une double barre oblique ou un /index.php initial reçoivent désormais une 301 vers l'URL propre au lieu d'être servies - par exemple de /api/v1/coins/ vers /api/v1/coins. Les autres méthodes ne sont pas concernées.

  8. v1.3.1 Corrigé

    Les périodes de capitalisation partielles sont comptées exactement

    GET /calculators/compound-interest arrondissait la durée à un nombre entier de périodes de capitalisation, si bien qu'une durée se terminant en cours de période était simulée trop longue ou trop courte : 6 mois avec une capitalisation annually couvraient une année entière (12 versements et une année complète d'intérêts), et 5 mois ne couvraient aucune période (ni versements, ni intérêts). Les périodes entières se déroulent désormais comme avant, la dernière période partielle produit des intérêts au prorata (intérêts simples sur la fraction) et chaque versement compris dans la durée est compté. Les résultats sont inchangés lorsque la durée correspond à un nombre entier de périodes de capitalisation ; les paramètres et les champs de réponse sont inchangés.

  9. v1.3.0 Modifié

    Le taux de l'intérêt composé est annuel, et non par période

    L’API et sa documentation traitaient rate comme le taux par période de capitalisation, alors que le calculateur du site et son guide utilisaient un taux annuel. GET /calculators/compound-interest appliquait rate en entier à chaque période de capitalisation : 5 % capitalisés mensuellement croissaient comme 5 % par mois. rate est désormais le taux nominal annuel : chaque période rapporte rate divisé par le nombre de périodes par an (5 % capitalisés mensuellement rapportent 5/12 % par mois), comme l'indique désormais meta.note. Les paramètres et les champs de la réponse ne changent pas ; les résultats changent pour toutes les fréquences de capitalisation sauf annually. Par ailleurs, lorsque contribution_frequency et compound_frequency valent toutes deux daily ou toutes deux weekly, les dépôts ne sont plus retardés ni perdus à cause des arrondis en virgule flottante : total_contributions peut donc compter un dépôt de plus avec duration_unit=months. Cela change la signification d'un paramètre existant : pour reproduire les résultats précédents, multipliez votre rate par le nombre de périodes de capitalisation par an.

  10. v1.2.0 Ajouté

    Indice Fear & Greed (0–100) à côté du score brut

    Chaque lecture Fear & Greed contient désormais index à côté de score : l'indice Fear & Greed de 0 à 100 exactement tel qu'affiché sur Bitculator (0–19 peur extrême, 20–39 peur, 40–59 neutre, 60–79 avidité, 80–100 avidité extrême) — utilisez-le pour l'affichage. score est inchangé : le composite brut de −100…+100 dont index est dérivé. Concerne GET /sentiment/fear-greed (la lecture principale et chaque entrée de intervals), fear_greed sur GET /global et meta.fear_greed sur GET /global/heatmap. Ajout uniquement ; aucun champ existant n'est modifié.

  11. v1.1.2 Corrigé

    Une valorisation totalement diluée inconnue vaut null

    GET /coins/{slug} renvoyait fully_diluted_valuation à 0 pour les cryptos sans offre maximale (par exemple Solana et Ethereum, dont l'offre n'est pas plafonnée). Elle se rabat désormais sur l'offre totale et vaut null lorsqu'aucune n'est connue, comme le contrat OpenAPI le documentait déjà.

  12. v1.1.2 Corrigé

    Un Fear & Greed sans données suffisantes vaut null

    Une lecture Fear & Greed qui n'avait pas encore de score était renvoyée avec score: 0. Elle vaut désormais null sur GET /sentiment/fear-greed, tout comme fear_greed sur GET /global et meta.fear_greed sur GET /global/heatmap.

  13. v1.1.1 Corrigé

    Valeurs nulles, tri et movers corrigés

    marketcap et dominance peuvent être null pour un coin sans circulating supply, et le score et le breakdown du trust score sont null pour un exchange non classé. POST /alarms renvoie 422 lorsque le coin n'a pas de valeur actuelle pour la métrique choisie. /coins/recently-added et /wallets/timeline respectent désormais sort. /coins/gainers et /coins/losers sont triés selon la variation elle-même (auparavant, essentiellement selon la marketcap), et les losers excluent les coins à 0.00. Les tris ascendants placent les valeurs nulles en dernier. /prices associe un symbole ambigu au coin actif le mieux classé. Le contrat OpenAPI indique les champs de marché pouvant être nuls et définit le volume sur 24 h comme un nombre.

  14. v1.1.1 Ajouté

    Les aperçus indiquent qu'ils sont rédigés par IA

    Chaque aperçu renvoyé par GET /insights, GET /insights/{id} et GET /coins/{slug}/insights porte désormais generated_by: "ai" et le model qui l'a rédigé. Ajout uniquement ; aucun champ existant n'est modifié.

  15. v1.1.1 Modifié

    Huobi devient HTX ; CoinEx inactif

    L'exchange Huobi a été renommé HTX et son slug est passé de huobi à htx ; l'API ne suit pas les redirections de slug, donc /exchanges/huobi renvoie désormais 404. CoinEx a été passé en inactif et n'est plus renvoyé.

  16. v1.1.1 Corrigé

    Les variations 24h et 7d périmées valent null

    change_24h et change_7d valent désormais null lorsque les variations d'une crypto n'ont pas été recalculées depuis 15 minutes, au lieu d'afficher un mouvement dépassé. Depuis le 18 septembre, il en va de même pour change_rank_24h et change_rank_7d.

  17. v1.1.0 Modifié

    Contrat OpenAPI enrichi

    Le contrat publié porte désormais des exemples au niveau du type de média, un schéma d'erreur commun référencé depuis chaque réponse 4xx/5xx, les réponses 401, 429 et 500 que tout appel à clé peut renvoyer, les en-têtes X-RateLimit-* et X-Quota-* sur chaque réponse réussie, la livraison alarm.triggered en tant que callback de POST /webhooks, ainsi que les métadonnées de contact, de licence et de conditions. Aucune requête ni réponse n'a changé - seulement la façon dont elles sont décrites.

  18. v1.1.0 Ajouté

    Découverte lisible par machine

    Nouveau : /apis.json, /.well-known/api-catalog (RFC 9727), /.well-known/security.txt (RFC 9116), un bundle JSON Schema des formes de réponse communes, une page de statut publique avec son jumeau JSON, ce changelog, et la politique de versionnement et de dépréciation.

  19. v1.0.1 Modifié

    Le quota de la Data API n'est plus partagé avec MCP

    Les appels d'outils MCP ont cessé d'être décomptés du quota mensuel et de la limite de rafale du forfait Data API ; le serveur MCP dispose de ses propres clés et forfaits depuis ce jour. tokens[].kind sur GET /usage peut désormais valoir mcp, et le message de la réponse 429 de dépassement de quota est « Your Data API plan has reached its monthly request limit. » (il mentionnait auparavant le forfait embed).

  20. v1.0.1 Modifié

    E-mail vérifié requis pour créer des clés

    La création ou la rotation d'une clé Data API dans la console développeur nécessite désormais une adresse e-mail vérifiée ; les comptes sans adresse e-mail, comme ceux connectés via un portefeuille, sont exemptés. La création de clés est limitée à 10 par minute. Les clés existantes restent fonctionnelles.

  21. v1.0.1 Corrigé

    Les volumes des tickers gardent leurs centimes

    volume_usd sur GET /tickers, GET /pairs, GET /pairs/{id}, GET /coins/{slug}/markets et GET /exchanges/{slug}/tickers était stocké sous forme de nombre entier : les centimes étaient perdus et les marchés sous 0,50 $ affichaient 0. Les volumes conservent désormais deux décimales, et les totaux calculés à partir d'eux n'héritent plus de l'arrondi.

  22. v1.0.1 Modifié

    La variation de la sparkline est un pourcentage pour chaque période

    change sur GET /coins/{slug}/sparkline et GET /exchanges/{slug}/sparkline était une fraction pour 30d à 365d (0,05 signifiait +5 %) mais un pourcentage pour 24h et 7d. C'est désormais un pourcentage pour chaque période (1.25 signifie +1,25 %) : les valeurs des périodes plus longues sont donc 100 fois plus grandes qu'avant, et les mouvements inférieurs à 0,5 % ne sont plus arrondis à 0.

  23. v1.0.1 Corrigé

    Le plus bas et le plus haut de la sparkline correspondent à la série

    Sur les deux endpoints de sparkline, low et high provenaient d'un résumé calculé sur une autre fenêtre et pouvaient contredire points - par exemple un low supérieur à certains prix de la série. Ce sont désormais les véritables extrêmes de la période sur laquelle points est échantillonné.

  24. v1.0.1 Modifié

    Les portefeuilles vaporware sont répertoriés

    GET /wallets, /wallets/timeline, /wallets/compare, /wallets/{slug} et /wallets/{slug}/assets renvoient désormais aussi les portefeuilles ayant le statut vaporware ; status peut donc prendre cette valeur.

  25. v1.0.1 Corrigé

    Texte source des aperçus décodé

    Les champs title et excerpt des sources dans les aperçus ne contiennent plus d'entités HTML brutes telles que í.

  26. v1.0.1 Corrigé

    Le updated_at d'un article indique la dernière modification

    Pour un article jamais modifié, updated_at sur GET /articles et GET /articles/{slug} indiquait la dernière fois que l'enregistrement avait changé pour une raison quelconque, comme un compteur de vues ou un vote. Il indique désormais la dernière modification éditoriale, à défaut la date de publication, et POST /articles/{slug}/feedback ne le modifie plus.

  27. v1.0.1 Ajouté

    Sentiment des aperçus

    Les aperçus incluent désormais sentiment : bullish, bearish, sheepish, ou null lorsqu'il n'est pas classé.

  28. v1.0.1 Ajouté

    Huit SDK officiels

    Des clients TypeScript, Python, PHP, Go, Rust, Java, C# et C++, chacun couvrant tous les endpoints sur le même cœur de transport : auth Bearer, déballage de l'enveloppe, capture des X-Quota-*, nouvelles tentatives sur 429 et 5xx, erreurs typées et pagination.

  29. v1.0.1 Modifié

    Endpoints réservés à certains forfaits

    Les endpoints peuvent désormais exiger un forfait. À leur introduction, GET /sentiment/indicators exigeait Pro, et GET /sentiment/bull-bear, GET /sentiment/altseason, GET /global, GET /global/heatmap et GET /global/history/{metric} exigeaient Starter. Un appel hors de votre forfait renvoie 403 plan_required avec details.required_plan indiquant le forfait qui le débloque, et ne consomme pas de quota.

  30. v1.0.1 Modifié

    Endpoints de liquidations désactivés

    Les six endpoints /liquidations ont été désactivés sur tous les forfaits : ils renvoient 503 endpoint_unavailable (« This endpoint is temporarily unavailable. ») et ne consomment pas de quota.

  31. v1.0.1 Modifié

    Quota Pro abaissé à 250 000

    Le quota mensuel du forfait Pro est passé de 500 000 à 250 000 requêtes.

  32. v1.0.1 Modifié

    Un endpoint par indicateur

    Le GET /coins/{slug}/indicators/{family} générique est devenu 13 endpoints documentés séparément, aux mêmes chemins : rsi, stoch-rsi, sma, cci, mfi, williams-r, price-volatility, volume-volatility, macd, obv, adx, vwap et cmf. Les appels existants sont inchangés ; un nom d'indicateur inconnu reçoit désormais un simple 404 sans la liste des noms valides.

  33. v1.0.1 Modifié

    Des forfaits et un quota propres à la Data API

    Au lancement, les appels Data API et les requêtes des widgets embed puisaient dans une réserve mensuelle commune liée au forfait embed. La Data API dispose désormais de ses propres forfaits Free, Starter et Pro, de son propre abonnement et de son propre quota mensuel, avec sa propre période de facturation : le mois calendaire en UTC sur Free, calée sur le jour de renouvellement sur les forfaits payants. GET /ping et GET /usage indiquent le forfait Data API, et /usage ne compte que les appels Data API. Les limites sont restées inchangées lors de la séparation.

  34. v1.0.1 Modifié

    Les URL de la documentation ont changé

    La référence est passée de /{locale}/documentation à /{locale}/documentation/api/v1, et la collection Postman et le YAML OpenAPI de /documentation.postman et /documentation.openapi à /documentation/api/v1.postman et /documentation/api/v1.openapi. Les anciens chemins ont été supprimés sans redirection ; /api/v1/openapi.json est inchangé.

  35. v1.0.0 Ajouté

    Data API v1

    Lancement : 73 opérations réparties en 15 groupes : coins, prix, marchés, exchanges, portefeuilles, données globales, sentiment, indicateurs, liquidations, conversion, calculateurs, contenu éditorial, alarmes, webhooks et métadonnées. Clés Bearer avec la capacité data-api, enveloppe { data, meta }, précision des chaînes décimales, en-têtes X-Quota-* et webhooks signés. Les appels Data API et les requêtes des widgets intégrés partageaient un quota mensuel dans le cadre de l'offre embed, et les fenêtres d'indicateurs plus longues nécessitaient Starter.

Rester informé

Les dépréciations sont annoncées ici et par e-mail à chaque titulaire de clé au moins six mois avant la suppression - voir la politique de dépréciation. L'index lisible par machine sur /apis.json porte la date de l'entrée la plus récente comme horodatage modified.