Log perubahan
Setiap perubahan pada Data API dan kontraknya, yang terbaru di urutan teratas. Nomor versi mengikuti kebijakan pemversian dan penghentian.
POST /webhooks dan POST /webhooks/{id}/test kini berbagi batas 5 permintaan per menit per akun, di samping batas burst paket. Permintaan yang melebihinya mendapat 429 rate_limited dengan Retry-After. Event uji kini dikirim sekali, tanpa percobaan ulang; pengiriman lainnya tetap dicoba hingga 3 kali, dengan backoff di antara percobaan. Ini adalah batas anti-penyalahgunaan yang tidak mengubah kuota bulanan maupun batas burst setiap paket. Kebijakan pemversian dan penghentian diubah pada hari yang sama agar batas semacam ini dapat langsung berlaku; sebelumnya, penurunan rate limit apa pun yang dimiliki sebuah paket mengikuti linimasa penghentian enam bulan. Pada kedua endpoint ini, header X-RateLimit-* menunjukkan batas yang sisa permintaannya lebih sedikit di antara keduanya.
POST /webhooks tidak lagi mencari hostname dari URL di DNS. Endpoint ini tetap mengembalikan 422 jika URL tidak memakai https, memuat kredensial, atau memakai alamat IP non-publik sebagai host. Hostname yang tidak ditemukan di DNS, atau yang mengarah ke alamat non-publik, sebelumnya mendapat 422; kini diterima dengan 201 dan dihitung dalam batas 5 endpoint per akun. Setiap pengiriman ke endpoint seperti itu lalu gagal tanpa percobaan ulang, error pada GET /webhooks/{id}/deliveries menyebutkan alasannya, dan 10 pengiriman gagal berturut-turut menonaktifkan endpoint tersebut. Setelah membuat endpoint, kirim event uji dengan POST /webhooks/{id}/test lalu periksa log pengiriman untuk memastikan endpoint dapat dijangkau.
endpoints[].endpoint pada GET /usage kini berisi templat rute, bukan path yang diminta: api/v1/coins/{slug}, bukan api/v1/coins/bitcoin. Dengan begitu, setiap endpoint memiliki satu baris, bukan satu baris per slug atau id. Permintaan yang tercatat lebih awal dalam periode penagihan saat ini tetap memakai path-nya, sehingga kedua bentuk bisa muncul sampai periode berakhir.
GET /exchanges/{slug} dan GET /exchanges/{slug}/trust-score telah gagal dengan 500 untuk setiap exchange sejak Data API diluncurkan. Kini keduanya merespons; parameter dan field respons tidak berubah, dan exchange tanpa peringkat mengembalikan score dan breakdown sebagai null.
Kontrak OpenAPI yang diterbitkan kini menandai setiap field yang dapat bernilai null sebagai nullable dan menetapkan tipe nilai pecahan sebagai angka (misalnya invested pada GET /calculators/dca dan nilai indikator); field bersama logo dan last_updated serta field paging from/to bersifat nullable di setiap endpoint, begitu pula name dan price koin di setiap endpoint daftar koin dan endpoint harga. Kontrak ini juga menetapkan tipe series DCA sebagai array, mendokumentasikan respons GET /coins/{slug}/markets, GET /coins/losers, GET /global/history/{metric}, dan GET /sentiment/altseason, mendokumentasikan days pada GET /sentiment/altseason sebagai 1–365 (nilai 0 selalu ditolak; jangan sertakan parameter ini untuk pembacaan saat ini), serta mencantumkan kode endpoint_unavailable (503) dan http_error dalam skema error. Tidak ada permintaan atau respons yang berubah - hanya cara mendeskripsikannya.
Autentikasi yang gagal dulu dibatasi 30 percobaan per menit per IP, setelah itu setiap key di balik IP tersebut mendapat 429. Kini satu key boleh gagal 30 kali per menit dari satu IP dan satu IP 300 kali, key yang berhasil diautentikasi dalam sekitar 15 menit terakhir tidak diblokir oleh batas IP, dan permintaan tanpa key mengembalikan 401 tanpa dihitung. Permintaan yang diblokir mendapat 429 rate_limited dengan Retry-After.
Permintaan GET dan HEAD yang path-nya memiliki garis miring di akhir, garis miring ganda, atau /index.php di awal kini mendapat 301 ke URL yang bersih alih-alih dilayani - misalnya /api/v1/coins/ ke /api/v1/coins. Metode lain tidak terpengaruh.
GET /calculators/compound-interest membulatkan durasi ke periode pemajemukan penuh, sehingga durasi yang berakhir di tengah periode disimulasikan terlalu panjang atau terlalu pendek: 6 bulan dengan pemajemukan annually berjalan setahun penuh (12 setoran dan bunga setahun penuh), sedangkan 5 bulan tidak menjalankan satu periode pun (tanpa setoran, tanpa bunga). Periode penuh kini berjalan seperti sebelumnya, periode parsial terakhir menghasilkan bunga secara pro rata (bunga sederhana untuk pecahannya), dan setiap setoran dalam durasi dihitung. Hasil tidak berubah bila durasi merupakan bilangan bulat periode pemajemukan; parameter dan field respons tidak berubah.
API dan dokumentasinya memperlakukan rate sebagai suku bunga per periode pemajemukan, sedangkan kalkulator di situs web dan panduannya memakai suku bunga tahunan. GET /calculators/compound-interest menerapkan rate secara penuh pada setiap periode pemajemukan, sehingga 5% dengan pemajemukan bulanan tumbuh seperti 5% per bulan. rate kini adalah suku bunga nominal tahunan: setiap periode menghasilkan rate dibagi jumlah periode per tahun (5% dengan pemajemukan bulanan menghasilkan 5/12% per bulan), seperti yang kini dinyatakan meta.note. Parameter dan field respons tidak berubah; hasilnya berubah untuk setiap frekuensi pemajemukan kecuali annually. Selain itu, ketika contribution_frequency dan compound_frequency sama-sama daily atau sama-sama weekly, setoran tidak lagi tertunda atau hilang akibat pembulatan floating-point, sehingga total_contributions bisa lebih tinggi satu setoran dengan duration_unit=months. Ini mengubah makna parameter yang sudah ada: untuk mereproduksi hasil sebelumnya, kalikan rate Anda dengan jumlah periode pemajemukan per tahun.
Setiap pembacaan Fear & Greed kini memuat index di samping score: indeks Fear & Greed 0–100 persis seperti yang ditampilkan Bitculator (0–19 ketakutan ekstrem, 20–39 ketakutan, 40–59 netral, 60–79 keserakahan, 80–100 keserakahan ekstrem) — gunakan ini untuk tampilan. score tidak berubah: nilai komposit mentah −100…+100 yang menjadi dasar index. Berlaku untuk GET /sentiment/fear-greed (pembacaan utama dan setiap entri di intervals), fear_greed pada GET /global, dan meta.fear_greed pada GET /global/heatmap. Hanya penambahan; tidak ada field yang diubah.
GET /coins/{slug} mengembalikan fully_diluted_valuation sebagai 0 untuk koin tanpa pasokan maksimum (misalnya Solana dan Ethereum, yang pasokannya tidak dibatasi). Kini nilainya beralih ke pasokan total dan bernilai null jika keduanya tidak diketahui, sebagaimana sudah didokumentasikan kontrak OpenAPI.
Pembacaan Fear & Greed yang belum memiliki skor dilaporkan sebagai score: 0. Kini nilainya null pada GET /sentiment/fear-greed, begitu pula fear_greed pada GET /global dan meta.fear_greed pada GET /global/heatmap.
marketcap dan dominance dapat bernilai null untuk koin tanpa suplai beredar, serta score dan breakdown trust score bernilai null untuk bursa yang belum berperingkat. POST /alarms mengembalikan 422 jika koin tidak memiliki nilai saat ini untuk metrik yang dipilih. /coins/recently-added dan /wallets/timeline kini mematuhi sort. /coins/gainers dan /coins/losers diurutkan berdasarkan perubahannya sendiri (sebelumnya secara efektif berdasarkan kapitalisasi pasar), dan losers mengecualikan koin di 0.00. Pengurutan menaik menempatkan nilai null di akhir. /prices memetakan simbol ambigu ke koin aktif dengan peringkat tertinggi. Kontrak OpenAPI menandai field pasar yang dapat bernilai null dan menetapkan tipe volume 24 jam sebagai angka.
Setiap wawasan pada GET /insights, GET /insights/{id}, dan GET /coins/{slug}/insights kini memuat generated_by: "ai" dan model yang menulisnya. Hanya penambahan; tidak ada field yang diubah.
Exchange Huobi berganti nama menjadi HTX dan slug-nya berubah dari huobi menjadi htx; API tidak mengikuti pengalihan slug, sehingga /exchanges/huobi kini mengembalikan 404. CoinEx dinonaktifkan dan tidak lagi dikembalikan.
change_24h dan change_7d kini bernilai null ketika perubahan sebuah koin belum dihitung ulang selama 15 menit, alih-alih menampilkan pergerakan yang sudah usang. Sejak 18 September, hal yang sama berlaku untuk change_rank_24h dan change_rank_7d.
Kontrak yang diterbitkan kini memuat contoh di level media type, satu skema error bersama yang dirujuk dari setiap respons 4xx/5xx, respons 401, 429, dan 500 yang bisa dikembalikan setiap panggilan ber-key, header X-RateLimit-* dan X-Quota-* pada setiap respons sukses, pengiriman alarm.triggered sebagai callback pada POST /webhooks, serta metadata kontak, lisensi, dan ketentuan. Tidak ada permintaan atau respons yang berubah - hanya cara mendeskripsikannya.
Baru: /apis.json, /.well-known/api-catalog (RFC 9727), /.well-known/security.txt (RFC 9116), bundel JSON Schema untuk bentuk respons bersama, halaman status publik dengan kembaran JSON-nya, log perubahan ini, serta kebijakan pemversian dan penghentian.
Panggilan alat MCP tidak lagi dihitung terhadap kuota bulanan dan batas burst paket Data API; sejak hari itu server MCP memiliki key dan paketnya sendiri. tokens[].kind pada GET /usage kini bisa bernilai mcp, dan pesan 429 saat melebihi kuota berbunyi "Your Data API plan has reached its monthly request limit." (sebelumnya menyebut paket embed).
Membuat atau merotasi key Data API di konsol developer kini memerlukan alamat email terverifikasi; akun tanpa email, seperti akun yang masuk dengan wallet, dikecualikan. Pembuatan key dibatasi 10 per menit. Key yang sudah ada tetap berfungsi.
volume_usd pada GET /tickers, GET /pairs, GET /pairs/{id}, GET /coins/{slug}/markets, dan GET /exchanges/{slug}/tickers disimpan sebagai bilangan bulat, sehingga sen hilang dan pasar di bawah $0,50 menampilkan 0. Volume kini mempertahankan dua desimal, dan total yang dibangun darinya tidak lagi mewarisi pembulatan tersebut.
change pada GET /coins/{slug}/sparkline dan GET /exchanges/{slug}/sparkline berupa pecahan untuk 30d hingga 365d (0,05 berarti +5%) tetapi berupa persen untuk 24h dan 7d. Kini nilainya berupa persen untuk setiap periode (1.25 berarti +1,25%), sehingga nilai untuk periode yang lebih panjang 100 kali lebih besar dari sebelumnya, dan pergerakan di bawah 0,5% tidak lagi dibulatkan menjadi 0.
Pada kedua endpoint sparkline, low dan high berasal dari ringkasan yang dibangun atas jendela berbeda dan bisa bertentangan dengan points - misalnya low di atas harga-harga dalam seri. Kini keduanya adalah nilai ekstrem sebenarnya dari periode tempat points diambil sampelnya.
GET /wallets, /wallets/timeline, /wallets/compare, /wallets/{slug}, dan /wallets/{slug}/assets kini juga mengembalikan wallet berstatus vaporware, sehingga status dapat memuat nilai tersebut.
title dan excerpt sumber di dalam wawasan tidak lagi memuat entitas HTML mentah seperti í.
Untuk artikel yang tidak pernah disunting, updated_at pada GET /articles dan GET /articles/{slug} menunjukkan waktu terakhir record berubah karena alasan apa pun, seperti jumlah tayangan atau sebuah vote. Kini nilainya menunjukkan suntingan editorial terakhir, atau tanggal terbit jika tidak ada, dan POST /articles/{slug}/feedback tidak lagi mengubahnya.
Wawasan kini menyertakan sentiment: bullish, bearish, sheepish, atau null jika belum diklasifikasikan.
Client TypeScript, Python, PHP, Go, Rust, Java, C#, dan C++, masing-masing mencakup setiap endpoint di atas inti transport yang sama: autentikasi Bearer, pembongkaran envelope, penangkapan X-Quota-*, retry pada 429 dan 5xx, error bertipe, dan paging.
Endpoint kini dapat mensyaratkan sebuah paket. Saat diperkenalkan, GET /sentiment/indicators memerlukan Pro, sedangkan GET /sentiment/bull-bear, GET /sentiment/altseason, GET /global, GET /global/heatmap, dan GET /global/history/{metric} memerlukan Starter. Panggilan di luar paket Anda mengembalikan 403 plan_required dengan details.required_plan yang menyebutkan paket yang membukanya, dan tidak memakai kuota.
Keenam endpoint /liquidations dinonaktifkan di semua paket: endpoint tersebut mengembalikan 503 endpoint_unavailable ("This endpoint is temporarily unavailable.") dan tidak memakai kuota.
Kuota bulanan paket Pro turun dari 500.000 menjadi 250.000 permintaan.
GET /coins/{slug}/indicators/{family} yang generik menjadi 13 endpoint yang didokumentasikan terpisah pada path yang sama: rsi, stoch-rsi, sma, cci, mfi, williams-r, price-volatility, volume-volatility, macd, obv, adx, vwap, dan cmf. Panggilan yang ada tidak berubah; nama indikator yang tidak dikenal kini mendapat 404 biasa tanpa daftar nama yang valid.
Saat peluncuran, panggilan Data API dan permintaan widget embed menarik dari satu kumpulan bulanan yang terikat pada paket embed. Data API kini memiliki paket Free, Starter, dan Pro, langganan, dan kuota bulanannya sendiri, dengan periode penagihannya sendiri: bulan kalender dalam UTC pada Free, dan berpatokan pada hari perpanjangan pada paket berbayar. GET /ping dan GET /usage melaporkan paket Data API, dan /usage hanya menghitung panggilan Data API. Batas tidak berubah saat pemisahan.
Referensi dipindahkan dari /{locale}/documentation ke /{locale}/documentation/api/v1, dan koleksi Postman serta YAML OpenAPI dari /documentation.postman dan /documentation.openapi ke /documentation/api/v1.postman dan /documentation/api/v1.openapi. Path lama dihapus tanpa pengalihan; /api/v1/openapi.json tidak berubah.
Peluncuran: 73 operasi dalam 15 grup - koin, harga, pasar, exchange, wallet, global, sentimen, indikator, likuidasi, konversi, kalkulator, editorial, alarm, webhook, dan meta. Key Bearer dengan kemampuan data-api, envelope { data, meta }, presisi string desimal, header X-Quota-*, dan webhook yang ditandatangani. Panggilan Data API dan permintaan widget embed berbagi satu kuota bulanan di bawah paket embed, dan jendela indikator yang lebih panjang memerlukan Starter.
Penghentian diumumkan di sini dan lewat email ke setiap pemilik key setidaknya enam bulan sebelum penghapusan - lihat kebijakan penghentian. Indeks yang dapat dibaca mesin di /apis.json memuat tanggal entri terbaru sebagai stempel modified-nya.