Changelog
Hver ændring af Data API'et og dets kontrakt, nyeste først. Versionsnumrene følger politikken for versionering og udfasning.
POST /webhooks og POST /webhooks/{id}/test deler nu en grænse på 5 requests i minuttet pr. konto, oven i planens burst-grænse. Requests over grænsen får 429 rate_limited med Retry-After. En testhændelse sendes nu én gang uden genforsøg; andre leveringer forsøges stadig op til 3 gange, med backoff mellem forsøgene. Dette er en grænse mod misbrug og lader hver plans månedlige kvote og burst-grænse være uændrede. Politikken for versionering og udfasning blev ændret samme dag, så sådanne grænser kan gælde med det samme; indtil da fulgte enhver sænkning af en rate limit, som en plan havde, udfasningstidslinjen på seks måneder. På disse to endpoints viser X-RateLimit-*-headerne den af de to grænser, der har færrest requests tilbage.
POST /webhooks slår ikke længere værtsnavnet i URL'en op. Kaldet returnerer stadig 422, når URL'en ikke bruger https, indeholder loginoplysninger eller har en ikke-offentlig IP-adresse som vært. Et værtsnavn, der ikke kan slås op eller peger på en ikke-offentlig adresse, fik hidtil 422; det accepteres nu med 201 og tæller med i grænsen på 5 endpoints pr. konto. Hver levering til et sådant endpoint fejler så uden genforsøg, error på GET /webhooks/{id}/deliveries angiver årsagen, og 10 fejlede leveringer i træk deaktiverer endpointet. Send en testhændelse med POST /webhooks/{id}/test, når du har oprettet et endpoint, og tjek leveringsloggen for at se, at det kan nås.
endpoints[].endpoint på GET /usage angiver nu route-skabelonen i stedet for den forespurgte sti - api/v1/coins/{slug} i stedet for api/v1/coins/bitcoin - så hvert endpoint har én række i stedet for én pr. slug eller id. Requests, der blev registreret tidligere i den aktuelle faktureringsperiode, beholder deres sti, så begge former kan optræde, indtil perioden slutter.
GET /exchanges/{slug} og GET /exchanges/{slug}/trust-score havde fejlet med 500 for alle børser, siden Data API'et blev lanceret. Begge svarer nu; parametre og svarfelter er uændrede, og en børs uden rang returnerer score og breakdown som null.
Den offentliggjorte OpenAPI-kontrakt markerer nu hvert felt, der kan være null, som nullable og angiver værdier med decimaler som tal (for eksempel invested på GET /calculators/dca og indikatorværdier); de fælles felter logo og last_updated samt pagineringsfelterne from/to er nullable på alle endpoints, og det samme gælder coin-felterne name og price på alle endpoints for coin-lister og priser. Den angiver også series for DCA som et array, dokumenterer svarene fra GET /coins/{slug}/markets, GET /coins/losers, GET /global/history/{metric} og GET /sentiment/altseason, dokumenterer days på GET /sentiment/altseason som 1–365 (0 er altid blevet afvist; udelad den for at få den aktuelle aflæsning) og opfører koderne endpoint_unavailable (503) og http_error i fejlskemaet. Ingen request eller response er ændret - kun hvordan de beskrives.
Mislykket godkendelse var tidligere begrænset til 30 forsøg i minuttet pr. IP, hvorefter alle nøgler bag den IP fik 429. Nu må én nøgle fejle 30 gange i minuttet fra én IP og én IP 300 gange, nøgler, der er godkendt inden for cirka de seneste 15 minutter, blokeres ikke af IP-grænsen, og et request uden nøgle returnerer 401 uden at blive talt med. Blokerede requests får 429 rate_limited med Retry-After.
GET- og HEAD-requests, hvis sti har en afsluttende skråstreg, en dobbelt skråstreg eller en indledende /index.php, får nu en 301 til den rene URL i stedet for at blive leveret - for eksempel fra /api/v1/coins/ til /api/v1/coins. Andre metoder påvirkes ikke.
GET /calculators/compound-interest afrundede varigheden til hele rentetilskrivningsperioder, så en varighed, der sluttede midt i en periode, blev simuleret for lang eller for kort: 6 måneder med annually-tilskrivning løb et helt år (12 indskud og et helt års renter), og 5 måneder løb slet ingen periode (ingen indskud, ingen renter). Hele perioder kører nu som før, den sidste delvise periode giver forholdsmæssig rente (simpel rente for brøkdelen), og hvert indskud inden for varigheden tælles med. Resultaterne er uændrede, når varigheden er et helt antal rentetilskrivningsperioder; parametre og svarfelter er uændrede.
API’et og dokumentationen behandlede rate som renten pr. renteperiode, mens beregneren på hjemmesiden og dens vejledning brugte en årlig rente. GET /calculators/compound-interest anvendte hele rate på hver renteperiode, så 5 % med månedlig rentetilskrivning voksede som 5 % om måneden. rate er nu den årlige nominelle rente: hver periode giver rate divideret med antallet af perioder pr. år (5 % med månedlig rentetilskrivning giver 5/12 % om måneden), som meta.note nu angiver. Parametre og svarfelter er uændrede; resultaterne ændres for alle tilskrivningsfrekvenser undtagen annually. Uafhængigt heraf: når contribution_frequency og compound_frequency begge er daily eller begge er weekly, bliver indbetalinger ikke længere forsinket eller tabt på grund af afrundingsfejl i flydende kommatal, så total_contributions kan være én indbetaling højere ved duration_unit=months. Det ændrer betydningen af en eksisterende parameter: For at genskabe tidligere resultater skal du gange din rate med antallet af rentetilskrivningsperioder pr. år.
Hver Fear & Greed-aflæsning indeholder nu index ved siden af score: Fear & Greed-indekset fra 0–100 præcis som vist på Bitculator (0–19 ekstrem frygt, 20–39 frygt, 40–59 neutral, 60–79 grådighed, 80–100 ekstrem grådighed) — brug det til visning. score er uændret: den rå sammensatte værdi på −100…+100, som index er afledt af. Gælder GET /sentiment/fear-greed (hovedaflæsningen og hver post i intervals), fear_greed på GET /global og meta.fear_greed på GET /global/heatmap. Kun en tilføjelse; intet eksisterende felt er ændret.
GET /coins/{slug} returnerede fully_diluted_valuation som 0 for coins uden et maksimalt udbud (for eksempel Solana og Ethereum, hvis udbud ikke har et loft). Den falder nu tilbage til det samlede udbud og er null, når ingen af dem kendes, som OpenAPI-kontrakten allerede dokumenterede.
En Fear & Greed-aflæsning, der endnu ikke havde nogen score, blev rapporteret som score: 0. Den er nu null på GET /sentiment/fear-greed, og det samme gælder fear_greed på GET /global og meta.fear_greed på GET /global/heatmap.
marketcap og dominance kan være null for en coin uden cirkulerende udbud, og trust scorens score og breakdown er null for en børs uden rang. POST /alarms svarer med 422, når coinen ikke har nogen aktuel værdi for den valgte metrik. /coins/recently-added og /wallets/timeline respekterer nu sort. /coins/gainers og /coins/losers sorteres efter selve ændringen (tidligere reelt efter markedsværdi), og losers udelader coins på 0.00. Stigende sorteringer returnerer null-værdier til sidst. /prices opløser et tvetydigt symbol til den aktive coin med den højeste rangering. OpenAPI-kontrakten markerer de markedsfelter, der kan være null, og angiver 24t-volumen som et tal.
Hver indsigt på GET /insights, GET /insights/{id} og GET /coins/{slug}/insights bærer nu generated_by: "ai" og den model, der skrev den. Kun en tilføjelse; intet eksisterende felt er ændret.
Børsen Huobi er omdøbt til HTX, og dens slug er ændret fra huobi til htx; API'et følger ikke slug-omdirigeringer, så /exchanges/huobi returnerer nu 404. CoinEx er sat som inaktiv og returneres ikke længere.
change_24h og change_7d er nu null, når en coins ændringer ikke er blevet genberegnet i 15 minutter, i stedet for at vise en forældet bevægelse. Siden 18. september gælder det samme for change_rank_24h og change_rank_7d.
Den offentliggjorte kontrakt bærer nu eksempler på medietype-niveau, ét fælles fejlskema, som hvert 4xx/5xx-svar refererer til, de 401-, 429- og 500-svar, som ethvert kald med nøgle kan returnere, X-RateLimit-*- og X-Quota-*-headerne på hvert succesfuldt svar, alarm.triggered-leveringen som callback på POST /webhooks, samt metadata om kontakt, licens og vilkår. Ingen request eller response er ændret - kun hvordan de beskrives.
Nyt: /apis.json, /.well-known/api-catalog (RFC 9727), /.well-known/security.txt (RFC 9116), et JSON Schema-bundle med de fælles svarformer, en offentlig statusside med en JSON-tvilling, denne changelog og politikken for versionering og udfasning.
MCP-værktøjskald tæller ikke længere med i Data API-planens månedlige kvote og burst-grænse; MCP-serveren har haft sine egne nøgler og planer siden denne dag. tokens[].kind på GET /usage kan nu være mcp, og 429-beskeden ved overskredet kvote lyder »Your Data API plan has reached its monthly request limit.« (tidligere stod der embed plan).
Oprettelse eller rotation af en Data API-nøgle i udviklerkonsollen kræver nu en bekræftet e-mailadresse; konti uden e-mail, såsom wallet-logins, er undtaget. Oprettelse af nøgler er begrænset til 10 i minuttet. Eksisterende nøgler virker fortsat.
volume_usd på GET /tickers, GET /pairs, GET /pairs/{id}, GET /coins/{slug}/markets og GET /exchanges/{slug}/tickers blev gemt som et heltal, så cents gik tabt, og markeder under $0,50 viste 0. Volumener beholder nu to decimaler, og de totaler, der bygges af dem, arver ikke længere afrundingen.
change på GET /coins/{slug}/sparkline og GET /exchanges/{slug}/sparkline var en brøk for 30d til 365d (0,05 betød +5 %), men en procentsats for 24h og 7d. Den er nu en procentsats for alle perioder (1.25 betyder +1,25 %), så værdierne for de længere perioder er 100 gange større end før, og bevægelser under 0,5 % rundes ikke længere ned til 0.
På begge sparkline-endpoints kom low og high fra et sammendrag over et andet vindue og kunne modsige points - for eksempel en low over priser i serien. De er nu de faktiske yderværdier for den periode, points udtages fra.
GET /wallets, /wallets/timeline, /wallets/compare, /wallets/{slug} og /wallets/{slug}/assets returnerer nu også wallets med status vaporware, så status kan have den værdi.
Kildernes title og excerpt i indsigter indeholder ikke længere rå HTML-entiteter som í.
For en artikel, der aldrig var blevet redigeret, viste updated_at på GET /articles og GET /articles/{slug} det seneste tidspunkt, posten var ændret af en hvilken som helst grund, såsom en visningstæller eller en stemme. Den viser nu den seneste redaktionelle redigering med udgivelsesdatoen som fallback, og POST /articles/{slug}/feedback flytter den ikke længere.
Indsigter indeholder nu sentiment: bullish, bearish, sheepish eller null, når den ikke er klassificeret.
Klienter til TypeScript, Python, PHP, Go, Rust, Java, C# og C++, som hver dækker hvert endpoint på samme transportkerne: Bearer-auth, udpakning af envelopen, opsamling af X-Quota-*, retries ved 429 og 5xx, typede fejl og paginering.
Endpoints kan nu kræve en plan. Ved introduktionen krævede GET /sentiment/indicators Pro, og GET /sentiment/bull-bear, GET /sentiment/altseason, GET /global, GET /global/heatmap og GET /global/history/{metric} krævede Starter. Et kald uden for din plan returnerer 403 plan_required, hvor details.required_plan nævner den plan, der låser det op, og det bruger ikke af kvoten.
De seks /liquidations-endpoints blev slået fra på alle planer: de returnerer 503 endpoint_unavailable (»This endpoint is temporarily unavailable.«) og bruger ikke af kvoten.
Pro-planens månedlige kvote gik fra 500.000 til 250.000 requests.
Det generiske GET /coins/{slug}/indicators/{family} blev til 13 separat dokumenterede endpoints på de samme stier: rsi, stoch-rsi, sma, cci, mfi, williams-r, price-volatility, volume-volatility, macd, obv, adx, vwap og cmf. Eksisterende kald er uændrede; et ukendt indikatornavn får nu en ren 404 uden listen over gyldige navne.
Ved lanceringen trak Data API-kald og embed-widget-requests fra én månedlig pulje knyttet til embed-planen. Data API'et har nu sine egne planer Free, Starter og Pro, sit eget abonnement og sin egen månedlige kvote med sin egen faktureringsperiode: kalendermåneden i UTC på Free, forankret til fornyelsesdagen på betalte planer. GET /ping og GET /usage rapporterer Data API-planen, og /usage tæller kun Data API-kald. Grænserne var uændrede ved opdelingen.
Referencen flyttede fra /{locale}/documentation til /{locale}/documentation/api/v1, og Postman-samlingen og OpenAPI-YAML'en fra /documentation.postman og /documentation.openapi til /documentation/api/v1.postman og /documentation/api/v1.openapi. De gamle stier blev fjernet uden omdirigeringer; /api/v1/openapi.json er uændret.
Lancering: 73 operationer fordelt på 15 grupper - coins, priser, markeder, børser, wallets, global, sentiment, indikatorer, likvidationer, konvertering, beregnere, redaktionelt, alarmer, webhooks og meta. Bearer-nøgler med data-api-tilladelsen, { data, meta }-envelopen, decimalstreng-præcision, X-Quota-*-headers og signerede webhooks. Data API-kald og embed-widget-requests delte én månedlig kvote under embed-planen, og længere indikatorvinduer krævede Starter.
Udfasninger annonceres her og pr. e-mail til alle nøgleejere mindst seks måneder før fjernelse - se udfasningspolitikken. Det maskinlæsbare indeks på /apis.json bærer datoen for den nyeste post som sit modified-stempel.