Jurnal de modificări
Fiecare modificare a API-ului de date și a contractului său, cele mai noi primele. Numerele de versiune respectă politica de versionare și de retragere din uz.
POST /webhooks și POST /webhooks/{id}/test au acum o limită comună de 5 cereri pe minut per cont, pe lângă limita de vârf a abonamentului. Cererile peste această limită primesc 429 rate_limited cu Retry-After. Un eveniment de test este trimis acum o singură dată, fără reîncercări; pentru celelalte livrări se fac în continuare cel mult 3 încercări, cu întârziere progresivă între ele. Aceasta este o limită împotriva abuzurilor și lasă neschimbate cota lunară și limita de vârf ale fiecărui abonament. Politica de versionare și de retragere din uz a fost modificată în aceeași zi, astfel încât asemenea limite să poată intra în vigoare imediat; până atunci, reducerea oricărei limite de rată pe care o avea un abonament urma calendarul de retragere din uz de șase luni. Pentru aceste două endpointuri, antetele X-RateLimit-* arată limita dintre cele două la care au mai rămas mai puține cereri.
POST /webhooks nu mai rezolvă numele de gazdă din URL. Returnează în continuare 422 când URL-ul nu folosește https, conține date de autentificare sau are ca gazdă o adresă IP care nu este publică. Un nume de gazdă care nu se poate rezolva sau care indică spre o adresă care nu este publică primea înainte 422; acum este acceptat cu 201 și intră în limita de 5 endpointuri pe cont. Fiecare livrare către un astfel de endpoint eșuează apoi fără reîncercare, câmpul error din GET /webhooks/{id}/deliveries arată motivul, iar 10 livrări eșuate la rând dezactivează endpointul. După ce creați un endpoint, trimiteți-i un eveniment de test cu POST /webhooks/{id}/test și verificați în jurnalul livrărilor că poate fi accesat.
endpoints[].endpoint din GET /usage indică acum șablonul rutei în locul căii solicitate, adică api/v1/coins/{slug} în loc de api/v1/coins/bitcoin, astfel încât fiecare endpoint are un singur rând în loc de câte unul pentru fiecare slug sau id. Cererile înregistrate mai devreme în perioada de facturare curentă își păstrează calea, așa că ambele forme pot apărea până la sfârșitul perioadei.
GET /exchanges/{slug} și GET /exchanges/{slug}/trust-score eșuau cu eroarea 500 pentru fiecare bursă de la lansarea API-ului de date. Acum ambele răspund; parametrii și câmpurile răspunsului rămân neschimbate, iar pentru o bursă fără clasament score și breakdown sunt returnate ca null.
Contractul OpenAPI publicat marchează acum drept nullable fiecare câmp care poate fi null și tipizează valorile fracționare drept numere (de exemplu invested din GET /calculators/dca și valorile indicatorilor); câmpurile comune logo și last_updated, precum și câmpurile de paginare from/to, sunt nullable în toate endpointurile, iar câmpurile name și price ale monedelor, în toate endpointurile de liste de monede și de prețuri. De asemenea, contractul tipizează câmpul DCA series drept array, documentează răspunsurile pentru GET /coins/{slug}/markets, GET /coins/losers, GET /global/history/{metric} și GET /sentiment/altseason, documentează intervalul 1–365 pentru days din GET /sentiment/altseason (0 a fost întotdeauna respins; omiteți-l pentru a obține citirea actuală) și enumeră codurile endpoint_unavailable (503) și http_error în schema de eroare. Nicio cerere și niciun răspuns nu s-au modificat - doar felul în care sunt descrise.
Autentificările eșuate erau plafonate la 30 de încercări pe minut per IP, după care fiecare cheie din spatele acelui IP primea 429. Acum o cheie poate eșua de 30 de ori pe minut de pe un IP, iar un IP de 300 de ori; cheile care s-au autentificat în aproximativ ultimele 15 minute nu sunt blocate de plafonul per IP, iar o cerere fără cheie returnează 401 fără să fie numărată. Cererile blocate primesc 429 rate_limited cu Retry-After.
Cererile GET și HEAD a căror cale are o bară oblică la final, o bară oblică dublată sau un /index.php la început primesc acum un 301 către URL-ul curat, în loc să fie servite - de exemplu de la /api/v1/coins/ la /api/v1/coins. Celelalte metode nu sunt afectate.
GET /calculators/compound-interest rotunjea durata la perioade de capitalizare întregi, astfel încât o durată care se încheia la mijlocul unei perioade era simulată prea lungă sau prea scurtă: 6 luni cu capitalizare annually rulau un an întreg (12 depuneri și dobânda pe un an întreg), iar 5 luni nu rulau nicio perioadă (fără depuneri, fără dobândă). Perioadele întregi rulează acum ca înainte, ultima perioadă parțială aduce dobândă proporțional (dobândă simplă pentru fracțiune) și fiecare depunere din cadrul duratei este luată în calcul. Rezultatele rămân neschimbate atunci când durata este un număr întreg de perioade de capitalizare; parametrii și câmpurile răspunsului rămân neschimbate.
API-ul și documentația sa tratau rate ca rata pe perioadă de capitalizare, în timp ce calculatorul de pe site și ghidul său foloseau o rată anuală. GET /calculators/compound-interest aplica rate integral fiecărei perioade de capitalizare, așa că 5% cu capitalizare lunară creștea ca 5% pe lună. rate este acum rata nominală anuală: fiecare perioadă aduce rate împărțită la numărul de perioade pe an (5% cu capitalizare lunară înseamnă 5/12% pe lună), așa cum indică acum meta.note. Parametrii și câmpurile răspunsului nu se schimbă; rezultatele se schimbă pentru toate frecvențele de capitalizare, cu excepția annually. Independent de aceasta, când contribution_frequency și compound_frequency sunt ambele daily sau ambele weekly, depunerile nu mai sunt amânate și nici omise din cauza rotunjirilor în virgulă mobilă, așa că total_contributions poate include o depunere în plus cu duration_unit=months. Aceasta schimbă semnificația unui parametru existent: pentru a reproduce rezultatele anterioare, înmulțiți rate cu numărul de perioade de capitalizare pe an.
Fiecare citire Fear & Greed conține acum index lângă score: indicele Fear & Greed de la 0 la 100 exact așa cum îl afișează Bitculator (0–19 frică extremă, 20–39 frică, 40–59 neutru, 60–79 lăcomie, 80–100 lăcomie extremă) — folosiți-l pentru afișare. Câmpul score rămâne neschimbat: valoarea compusă brută de −100…+100 din care este derivat index. Se aplică pentru GET /sentiment/fear-greed (citirea principală și fiecare intrare din intervals), câmpului fear_greed din GET /global și câmpului meta.fear_greed din GET /global/heatmap. Doar o adăugare; niciun câmp existent nu s-a schimbat.
GET /coins/{slug} returna fully_diluted_valuation ca 0 pentru monedele fără ofertă maximă (de exemplu Solana și Ethereum, a căror ofertă nu este plafonată). Acum folosește oferta totală și este null când niciuna nu este cunoscută, așa cum documenta deja contractul OpenAPI.
O citire Fear & Greed care nu avea încă un scor era raportată ca score: 0. Acum este null în GET /sentiment/fear-greed, la fel ca fear_greed din GET /global și meta.fear_greed din GET /global/heatmap.
marketcap și dominance pot fi null pentru o monedă fără ofertă circulantă, iar score și breakdown din scorul de încredere sunt null pentru o bursă neclasificată. POST /alarms returnează 422 atunci când moneda nu are o valoare curentă pentru metrica aleasă. /coins/recently-added și /wallets/timeline respectă acum sort. /coins/gainers și /coins/losers sunt ordonate după variația în sine (anterior, în fapt, după capitalizarea de piață), iar lista scăderilor exclude monedele aflate la 0.00. Sortările crescătoare returnează valorile null la final. /prices rezolvă un simbol ambiguu către cea mai bine clasată monedă activă. Contractul OpenAPI marchează câmpurile de piață care pot fi null și tipizează volumul pe 24h drept număr.
Fiecare analiză din GET /insights, GET /insights/{id} și GET /coins/{slug}/insights conține acum generated_by: "ai" și model, modelul care a scris-o. Doar o adăugare; niciun câmp existent nu s-a schimbat.
Bursa Huobi a fost redenumită HTX, iar slugul ei s-a schimbat din huobi în htx; API-ul nu urmează redirecționările de slug, așa că /exchanges/huobi returnează acum 404. CoinEx a fost setată ca inactivă și nu mai este returnată.
change_24h și change_7d sunt acum null când variațiile unei monede nu au fost recalculate timp de 15 minute, în loc să afișeze o mișcare depășită. Din 18 septembrie, același lucru se aplică și pentru change_rank_24h și change_rank_7d.
Contractul publicat conține acum exemple la nivel de tip media, o singură schemă de eroare comună, la care trimite fiecare răspuns 4xx/5xx, răspunsurile 401, 429 și 500 pe care le poate returna orice apel cu cheie, antetele X-RateLimit-* și X-Quota-* la fiecare răspuns reușit, livrarea alarm.triggered sub formă de callback pe POST /webhooks, precum și metadate de contact, de licență și de termeni. Nicio cerere și niciun răspuns nu s-au modificat - doar felul în care sunt descrise.
Nou: /apis.json, /.well-known/api-catalog (RFC 9727), /.well-known/security.txt (RFC 9116), un pachet JSON Schema cu formele comune de răspuns, o pagină de stare publică însoțită de o copie în JSON, acest jurnal de modificări și politica de versionare și de retragere din uz.
Apelurile de instrumente MCP au încetat să fie numărate în cota lunară și în limita de vârf a abonamentului pentru API-ul de date; de la acea dată, serverul MCP are propriile chei și abonamente. tokens[].kind din GET /usage poate fi acum mcp, iar mesajul 429 la depășirea cotei este "Your Data API plan has reached its monthly request limit." (înainte menționa abonamentul pentru widget-uri).
Crearea sau rotirea unei chei pentru API-ul de date în consola pentru dezvoltatori necesită acum o adresă de e-mail verificată; conturile fără e-mail, precum autentificările cu portofel, sunt scutite. Crearea cheilor este limitată la 10 pe minut. Cheile existente continuă să funcționeze.
volume_usd din GET /tickers, GET /pairs, GET /pairs/{id}, GET /coins/{slug}/markets și GET /exchanges/{slug}/tickers era stocat ca număr întreg, așa că cenții se pierdeau, iar piețele sub $0,50 afișau 0. Volumele păstrează acum două zecimale, iar totalurile calculate din ele nu mai moștenesc rotunjirea.
change din GET /coins/{slug}/sparkline și GET /exchanges/{slug}/sparkline era o fracție pentru 30d până la 365d (0,05 însemna +5%), dar un procent pentru 24h și 7d. Acum este un procent pentru fiecare perioadă (1.25 înseamnă +1,25%), așa că valorile pentru perioadele mai lungi sunt de 100 de ori mai mari decât înainte, iar mișcările sub 0,5% nu mai sunt rotunjite la 0.
Pe ambele endpointuri sparkline, low și high proveneau dintr-un rezumat construit pe o altă fereastră și puteau contrazice points - de exemplu un low peste unele prețuri din serie. Acum sunt extremele reale ale perioadei din care este eșantionat points.
GET /wallets, /wallets/timeline, /wallets/compare, /wallets/{slug} și /wallets/{slug}/assets returnează acum și portofelele cu statusul vaporware, așa că status poate avea această valoare.
Câmpurile title și excerpt ale surselor din analize nu mai conțin entități HTML brute precum í.
Pentru un articol care nu a fost niciodată editat, updated_at din GET /articles și GET /articles/{slug} arăta ultima dată când înregistrarea s-a schimbat din orice motiv, de exemplu un număr de vizualizări sau un vot. Acum arată ultima editare redacțională, cu data publicării ca rezervă, iar POST /articles/{slug}/feedback nu îl mai modifică.
Analizele includ acum sentiment: bullish, bearish, sheepish sau null când nu sunt clasificate.
Clienți TypeScript, Python, PHP, Go, Rust, Java, C# și C++, fiecare acoperind toate endpointurile pe același nucleu de transport: autentificare Bearer, despachetarea structurii, captarea X-Quota-*, reîncercări la 429 și 5xx, erori tipizate și paginare.
Endpointurile pot necesita acum un abonament. La introducere, GET /sentiment/indicators necesita Pro, iar GET /sentiment/bull-bear, GET /sentiment/altseason, GET /global, GET /global/heatmap și GET /global/history/{metric} necesitau Starter. Un apel în afara abonamentului dumneavoastră returnează 403 plan_required, cu details.required_plan indicând abonamentul care îl deblochează, și nu consumă din cotă.
Cele șase endpointuri /liquidations au fost dezactivate pe toate abonamentele: returnează 503 endpoint_unavailable ("This endpoint is temporarily unavailable.") și nu consumă din cotă.
Cota lunară a abonamentului Pro a scăzut de la 500.000 la 250.000 de cereri.
Endpointul generic GET /coins/{slug}/indicators/{family} a devenit 13 endpointuri documentate separat, pe aceleași căi: rsi, stoch-rsi, sma, cci, mfi, williams-r, price-volatility, volume-volatility, macd, obv, adx, vwap și cmf. Apelurile existente rămân neschimbate; un nume de indicator necunoscut primește acum un simplu 404, fără lista numelor valide.
La lansare, apelurile către API-ul de date și cererile widget-urilor încorporate consumau dintr-un singur fond lunar legat de abonamentul pentru widget-uri. API-ul de date are acum propriile abonamente Gratuit, Starter și Pro, propria subscripție și propria cotă lunară, cu propria perioadă de facturare: luna calendaristică în UTC pe Gratuit, ancorată la ziua de reînnoire pe abonamentele plătite. GET /ping și GET /usage raportează abonamentul API-ului de date, iar /usage numără doar apelurile către API-ul de date. Limitele nu s-au schimbat la separare.
Referința s-a mutat de la /{locale}/documentation la /{locale}/documentation/api/v1, iar colecția Postman și fișierul OpenAPI YAML, de la /documentation.postman și /documentation.openapi la /documentation/api/v1.postman și /documentation/api/v1.openapi. Căile vechi au fost eliminate fără redirecționări; /api/v1/openapi.json a rămas neschimbat.
Lansare: 73 de operațiuni în 15 grupuri - monede, prețuri, piețe, burse, portofele, date globale, sentiment, indicatori, lichidări, conversie, calculatoare, conținut editorial, alarme, webhookuri și meta. Chei Bearer cu permisiunea data-api, structura { data, meta }, precizie prin șiruri zecimale, antete X-Quota-* și webhookuri semnate. Apelurile către API-ul de date și cererile widget-urilor încorporate partajau o singură cotă lunară în cadrul abonamentului pentru widget-uri, iar ferestrele mai lungi ale indicatorilor necesitau Starter.
Retragerile din uz sunt anunțate aici și prin e-mail către fiecare deținător de cheie cu cel puțin șase luni înainte de eliminare - vedeți politica de retragere din uz. Indexul citibil automat de la /apis.json poartă data celei mai noi intrări drept marcaj modified.