Bitculator

Журнал змін

Журнал змін API

Кожна зміна Data API та його контракту, спершу найновіші. Номери версій відповідають політиці версіонування та застарівання.

  1. v1.3.3 Змінено

    Створення і тестування вебхуків обмежено 5 запитами на хвилину

    POST /webhooks і POST /webhooks/{id}/test тепер мають спільний ліміт 5 запитів на хвилину на обліковий запис - на додачу до хвилинного ліміту тарифу. Запити понад нього отримують 429 rate_limited із Retry-After. Тестова подія тепер надсилається один раз, без повторів; для інших доставок, як і раніше, робиться до 3 спроб, з експоненційною затримкою між спробами. Це ліміт проти зловживань, і він не змінює місячну квоту та хвилинний ліміт жодного тарифу. Політика версіонування та застарівання була змінена того самого дня, щоб такі ліміти могли набирати чинності одразу; до того часу зниження будь-якого ліміту запитів, який мав тариф, відбувалося за шестимісячним графіком застарівання. На цих двох ендпоінтах заголовки X-RateLimit-* показують той із двох лімітів, за яким залишилося менше запитів.

  2. v1.3.3 Змінено

    Імена хостів вебхуків перевіряються під час доставки, а не під час створення

    POST /webhooks більше не шукає ім'я хоста з URL у DNS. Він і далі повертає 422, якщо URL не використовує https, містить облікові дані або має хостом непублічну IP-адресу. Ім'я хоста, яке не вдається знайти в DNS або яке вказує на непублічну адресу, раніше отримувало 422; тепер його приймають із 201, і воно зараховується до ліміту 5 ендпоінтів на обліковий запис. Кожна доставка на такий ендпоінт тоді завершується помилкою без повторів, поле error у GET /webhooks/{id}/deliveries називає причину, а 10 невдалих доставок поспіль вимикають ендпоінт. Після створення ендпоінта надішліть на нього тестову подію через POST /webhooks/{id}/test і перевірте в журналі доставок, що він доступний.

  3. v1.3.3 Змінено

    Розбивка використання показує шаблони маршрутів, а не шляхи

    endpoints[].endpoint у GET /usage тепер містить шаблон маршруту замість запитаного шляху: api/v1/coins/{slug} замість api/v1/coins/bitcoin. Тож кожен ендпоінт має один рядок, а не по одному на кожен slug чи id. Запити, враховані раніше в поточному розрахунковому періоді, зберігають свій шлях, тому до кінця періоду можуть траплятися обидві форми.

  4. v1.3.2 Виправлено

    Профіль біржі та оцінку довіри виправлено

    GET /exchanges/{slug} і GET /exchanges/{slug}/trust-score від запуску Data API завершувалися помилкою 500 для кожної біржі. Тепер обидва відповідають; параметри та поля відповіді не змінилися, а для біржі без рангу score і breakdown повертаються як null.

  5. v1.3.2 Змінено

    Типи в контракті виправлено

    Опублікований контракт OpenAPI тепер позначає як nullable кожне поле, яке може бути null, і типізує дробові значення як числа (наприклад, invested у GET /calculators/dca та значення індикаторів); спільні поля logo, last_updated і поля пагінації from/to позначено як nullable у всіх ендпоінтах, а name і price монети - у всіх ендпоінтах списків монет і цін. Крім того, він типізує series у DCA як масив, документує відповіді GET /coins/{slug}/markets, GET /coins/losers, GET /global/history/{metric} та GET /sentiment/altseason, документує для days у GET /sentiment/altseason діапазон 1–365 (0 завжди відхилявся; щоб отримати поточне значення, не передавайте цей параметр) і перелічує у схемі помилки коди endpoint_unavailable (503) та http_error. Жоден запит чи відповідь не змінилися - лише те, як їх описано.

  6. v1.3.1 Змінено

    Невдала автентифікація обмежується для кожного ключа

    Раніше невдала автентифікація обмежувалася 30 спробами на хвилину з однієї IP-адреси, після чого кожен ключ за цією IP-адресою отримував 429. Тепер один ключ може помилитися 30 разів на хвилину з однієї IP-адреси, а одна IP-адреса - 300 разів; ключі, що успішно пройшли автентифікацію приблизно за останні 15 хвилин, не блокуються лімітом за IP-адресою, а запит без ключа повертає 401 і не враховується. Заблоковані запити отримують 429 rate_limited із Retry-After.

  7. v1.3.1 Змінено

    Неканонічні URL перенаправляються

    Запити GET і HEAD, шлях яких містить кінцевий слеш, подвійний слеш або початковий /index.php, тепер отримують 301 на чистий URL замість обслуговування як є - наприклад, з /api/v1/coins/ на /api/v1/coins. Інших методів це не стосується.

  8. v1.3.1 Виправлено

    Неповні періоди капіталізації враховуються точно

    GET /calculators/compound-interest округлював строк до цілої кількості періодів капіталізації, тому строк, що закінчувався посеред періоду, моделювався задовгим або закоротким: 6 місяців із капіталізацією annually вважалися цілим роком (12 внесків і відсотки за весь рік), а 5 місяців не давали жодного періоду (ні внесків, ні відсотків). Тепер цілі періоди розраховуються як раніше, останній неповний період приносить відсотки пропорційно (прості відсотки за його частку), а кожен внесок у межах строку враховується. Якщо строк дорівнює цілій кількості періодів капіталізації, результати не змінюються; параметри та поля відповіді не змінилися.

  9. v1.3.0 Змінено

    Ставка складних відсотків - річна, а не за період

    API та його документація трактували rate як ставку за період нарахування, тоді як калькулятор на сайті та інструкція до нього використовували річну ставку. GET /calculators/compound-interest застосовував rate повністю до кожного періоду нарахування, тож 5% при щомісячному нарахуванні зростали як 5% на місяць. Тепер rate - номінальна річна ставка: кожен період приносить rate, поділену на кількість періодів на рік (5% при щомісячному нарахуванні дають 5/12% на місяць), про що тепер повідомляє meta.note. Параметри й поля відповіді не змінюються; результати змінюються для всіх частот нарахування, крім annually. Крім того, якщо contribution_frequency і compound_frequency обидві дорівнюють daily або обидві дорівнюють weekly, внески більше не затримуються й не губляться через округлення чисел з рухомою комою, тож total_contributions за duration_unit=months може містити на один внесок більше. Це змінює зміст наявного параметра: щоб відтворити попередні результати, помножте rate на кількість періодів капіталізації на рік.

  10. v1.2.0 Додано

    Індекс Fear & Greed (0–100) поруч із сирим score

    Кожне значення Fear & Greed тепер містить index поруч із score: індекс Fear & Greed від 0 до 100 точно так, як його показує Bitculator (0–19 екстремальний страх, 20–39 страх, 40–59 нейтрально, 60–79 жадібність, 80–100 екстремальна жадібність) — використовуйте його для відображення. score не змінився: це сирий складений показник −100…+100, з якого виводиться index. Стосується GET /sentiment/fear-greed (основне значення та кожен запис у intervals), fear_greed у GET /global та meta.fear_greed у GET /global/heatmap. Лише додавання; жодне наявне поле не змінено.

  11. v1.1.2 Виправлено

    Невідома повністю розмита оцінка тепер null

    GET /coins/{slug} повертав fully_diluted_valuation рівним 0 для монет без максимальної пропозиції (наприклад, Solana та Ethereum, пропозиція яких не обмежена). Тепер використовується загальна пропозиція, а якщо жодна не відома, значення дорівнює null, як уже було описано в контракті OpenAPI.

  12. v1.1.2 Виправлено

    Fear & Greed без достатніх даних - null

    Значення Fear & Greed, яке ще не мало оцінки, поверталося як score: 0. Тепер у GET /sentiment/fear-greed це null, як і fear_greed у GET /global та meta.fear_greed у GET /global/heatmap.

  13. v1.1.1 Виправлено

    Виправлено null-значення, сортування та movers

    marketcap і dominance можуть бути null для монети без обігової пропозиції, а score і breakdown оцінки довіри дорівнюють null для біржі без рангу. POST /alarms повертає 422, якщо монета не має поточного значення для обраної метрики. /coins/recently-added і /wallets/timeline тепер враховують sort. /coins/gainers і /coins/losers сортуються за самою зміною (раніше фактично за ринковою капіталізацією), а losers виключають монети зі значенням 0.00. Сортування за зростанням повертає null-значення останніми. /prices зіставляє неоднозначний символ з активною монетою з найвищим рейтингом. Контракт OpenAPI позначає ринкові поля, що можуть бути null, і типізує обсяг за 24 год як число.

  14. v1.1.1 Додано

    Інсайти позначено як написані ШІ

    Кожен інсайт у GET /insights, GET /insights/{id} і GET /coins/{slug}/insights тепер містить generated_by: "ai" та model, яка його написала. Лише додавання; жодне наявне поле не змінено.

  15. v1.1.1 Змінено

    Huobi тепер HTX; CoinEx неактивна

    Біржу Huobi перейменовано на HTX, і її slug змінився з huobi на htx; API не виконує перенаправлень slug, тож /exchanges/huobi тепер повертає 404. CoinEx переведено в неактивні, і вона більше не повертається.

  16. v1.1.1 Виправлено

    Застарілі зміни за 24 год і 7 днів - null

    change_24h і change_7d тепер дорівнюють null, якщо зміни монети не перераховувалися 15 хвилин, замість того щоб показувати застарілий рух. Із 18 вересня те саме стосується change_rank_24h і change_rank_7d.

  17. v1.1.0 Змінено

    Контракт OpenAPI розширено

    Опублікований контракт тепер містить приклади на рівні media-type, одну спільну схему помилки, на яку посилається кожна відповідь 4xx/5xx, відповіді 401, 429 та 500, які може повернути будь-який виклик із ключем, заголовки X-RateLimit-* і X-Quota-* у кожній успішній відповіді, доставку alarm.triggered як callback на POST /webhooks, а також метадані контакту, ліцензії та умов. Жоден запит чи відповідь не змінилися - лише те, як їх описано.

  18. v1.1.0 Додано

    Машинозчитуване виявлення

    Нове: /apis.json, /.well-known/api-catalog (RFC 9727), /.well-known/security.txt (RFC 9116), бандл JSON Schema зі спільними формами відповідей, публічна сторінка статусу з JSON-двійником, цей журнал змін і політика версіонування та застарівання.

  19. v1.0.1 Змінено

    Квота Data API більше не спільна з MCP

    Виклики MCP-інструментів перестали витрачати місячну квоту та хвилинний ліміт тарифу Data API; від цього дня MCP-сервер має власні ключі й тарифи. tokens[].kind у GET /usage тепер може бути mcp, а повідомлення 429 про перевищення квоти звучить «Your Data API plan has reached its monthly request limit.» (раніше в ньому згадувався тариф вбудовування).

  20. v1.0.1 Змінено

    Для створення ключів потрібен підтверджений email

    Створення або ротація ключа Data API в консолі розробника тепер вимагає підтвердженої адреси електронної пошти; облікові записи без email, як-от створені через вхід із гаманцем, звільнено від цієї вимоги. Створення ключів обмежено 10 на хвилину. Наявні ключі продовжують працювати.

  21. v1.0.1 Виправлено

    Обсяги тікерів зберігають центи

    volume_usd у GET /tickers, GET /pairs, GET /pairs/{id}, GET /coins/{slug}/markets і GET /exchanges/{slug}/tickers зберігався як ціле число, тож центи губилися, а ринки з обсягом менше ніж $0,50 показували 0. Тепер обсяги зберігають два знаки після коми, і підсумки, побудовані з них, більше не успадковують округлення.

  22. v1.0.1 Змінено

    Зміна у спарклайні - відсоток для будь-якого періоду

    change у GET /coins/{slug}/sparkline і GET /exchanges/{slug}/sparkline був часткою для періодів від 30d до 365d (0,05 означало +5%), але відсотком для 24h і 7d. Тепер це відсоток для кожного періоду (1.25 означає +1,25%), тож значення для довших періодів у 100 разів більші, ніж раніше, а рухи менше ніж 0,5% більше не округлюються до 0.

  23. v1.0.1 Виправлено

    Мінімум і максимум спарклайна відповідають ряду

    В обох ендпоінтах спарклайнів low і high бралися зі зведення, побудованого за іншим вікном, і могли суперечити points - наприклад, low вище за ціни в ряду. Тепер це справжні екстремуми періоду, з якого вибираються points.

  24. v1.0.1 Змінено

    Гаманці vaporware потрапляють у списки

    GET /wallets, /wallets/timeline, /wallets/compare, /wallets/{slug} і /wallets/{slug}/assets тепер також повертають гаманці зі статусом vaporware, тож status може мати це значення.

  25. v1.0.1 Виправлено

    Текст джерел в інсайтах декодовано

    title і excerpt джерел усередині інсайтів більше не містять необроблених HTML-сутностей, як-от í.

  26. v1.0.1 Виправлено

    updated_at статті показує останнє редагування

    Для статті, яку жодного разу не редагували, updated_at у GET /articles і GET /articles/{slug} показував час останньої зміни запису з будь-якої причини, наприклад через лічильник переглядів чи голос. Тепер він показує останнє редакційне редагування, а якщо його не було - дату публікації, і POST /articles/{slug}/feedback його більше не зсуває.

  27. v1.0.1 Додано

    Настрій в інсайтах

    Інсайти тепер містять sentiment: bullish, bearish, sheepish або null, якщо настрій не класифіковано.

  28. v1.0.1 Додано

    Вісім офіційних SDK

    Клієнти для TypeScript, Python, PHP, Go, Rust, Java, C# і C++, кожен покриває всі ендпоінти на спільному транспортному ядрі: Bearer-автентифікація, розпакування оболонки, захоплення X-Quota-*, повтори при 429 та 5xx, типізовані помилки та посторінкова навігація.

  29. v1.0.1 Змінено

    Ендпоінти, залежні від тарифу

    Ендпоінти тепер можуть вимагати певного тарифу. На момент запровадження GET /sentiment/indicators вимагав Pro, а GET /sentiment/bull-bear, GET /sentiment/altseason, GET /global, GET /global/heatmap і GET /global/history/{metric} - Starter. Виклик поза вашим тарифом повертає 403 plan_required, де details.required_plan називає тариф, який його відкриває, і не витрачає квоту.

  30. v1.0.1 Змінено

    Ендпоінти ліквідацій вимкнено

    Шість ендпоінтів /liquidations вимкнено на всіх тарифах: вони повертають 503 endpoint_unavailable («This endpoint is temporarily unavailable.») і не витрачають квоту.

  31. v1.0.1 Змінено

    Квоту Pro знижено до 250 000

    Місячну квоту тарифу Pro знижено з 500 000 до 250 000 запитів.

  32. v1.0.1 Змінено

    Окремий ендпоінт для кожного індикатора

    Загальний GET /coins/{slug}/indicators/{family} перетворився на 13 окремо задокументованих ендпоінтів за тими самими шляхами: rsi, stoch-rsi, sma, cci, mfi, williams-r, price-volatility, volume-volatility, macd, obv, adx, vwap і cmf. Наявні виклики не змінилися; на невідому назву індикатора тепер повертається простий 404 без списку допустимих назв.

  33. v1.0.1 Змінено

    Власні тарифи та квота Data API

    На момент запуску виклики Data API та запити віджетів витрачали один місячний пул, прив'язаний до тарифу вбудовування. Тепер Data API має власні тарифи Free, Starter і Pro, підписку та місячну квоту з власним розрахунковим періодом: календарний місяць за UTC на Free і період із прив'язкою до дня продовження на платних тарифах. GET /ping і GET /usage повідомляють тариф Data API, а /usage рахує лише виклики Data API. Під час розділення ліміти не змінилися.

  34. v1.0.1 Змінено

    URL документації перенесено

    Довідник переїхав із /{locale}/documentation на /{locale}/documentation/api/v1, а колекція Postman і OpenAPI YAML - із /documentation.postman і /documentation.openapi на /documentation/api/v1.postman і /documentation/api/v1.openapi. Старі шляхи видалено без перенаправлень; /api/v1/openapi.json не змінився.

  35. v1.0.0 Додано

    Data API v1

    Запуск: 73 операції в 15 групах - монети, ціни, ринки, біржі, гаманці, глобальні дані, настрої, індикатори, ліквідації, конвертація, калькулятори, редакційні матеріали, сповіщення, вебхуки та мета. Bearer-ключі з дозволом data-api, оболонка { data, meta }, точність десяткових рядків, заголовки X-Quota-* і підписані вебхуки. Виклики Data API та запити віджетів ділили одну місячну квоту в межах тарифу вбудовування, а довші вікна індикаторів вимагали Starter.

Будьте в курсі

Про застарівання оголошується тут і електронною поштою кожному власнику ключа щонайменше за шість місяців до видалення - див. політику застарівання. Машинозчитуваний індекс /apis.json несе дату найновішого запису у своїй позначці modified.