更新日志
Data API 及其契约的每一项变更,最新在前。版本号遵循版本与弃用政策。
POST /webhooks 与 POST /webhooks/{id}/test 现在在套餐突发限制之外,按账户共享每分钟 5 次请求的上限;超出的请求会收到带有 Retry-After 的 429 rate_limited。测试事件现在只发送一次,不再重试;其他投递仍最多尝试 3 次,每次之间带退避。这是一项防滥用限制,不改变任何套餐的月度配额与突发限制。版本与弃用政策已于同一天修改,使此类限制可以立即生效;在此之前,调低套餐已有的任何速率限制,都遵循为期六个月的弃用时间表。在这两个端点上,X-RateLimit-* 响应头显示两个限制中剩余请求较少的那一个。
POST /webhooks 不再解析 URL 中的主机名。若 URL 不使用 https、包含凭据,或以非公开 IP 地址作为主机,仍会返回 422。无法解析或解析到非公开地址的主机名此前会收到 422;现在会以 201 被接受,并计入每个账户 5 个端点的上限。此后向该端点的每次投递都会失败且不重试,失败原因见 GET /webhooks/{id}/deliveries 中的 error,连续 10 次投递失败后端点会被停用。创建端点后,请用 POST /webhooks/{id}/test 发送测试事件,并在投递日志中确认其可以访问。
GET /usage 中的 endpoints[].endpoint 现在给出路由模板,而不是请求的路径,即 api/v1/coins/{slug} 而非 api/v1/coins/bitcoin,因此每个端点只有一行,而不是每个 slug 或 id 各一行。当前计费周期内此前记录的请求保留原路径,所以在本周期结束前两种形式可能同时出现。
自 Data API 推出以来,GET /exchanges/{slug} 和 GET /exchanges/{slug}/trust-score 对每个交易所都一直失败并返回 500。现在两者都能正常响应;参数和响应字段均不变,没有排名的交易所会将 score 和 breakdown 返回为 null。
已发布的 OpenAPI 契约现在将所有可能为 null 的字段标注为可空,并将小数值定义为数字类型(例如 GET /calculators/dca 中的 invested 以及指标值);共享的 logo、last_updated 和分页 from/to 字段在所有端点上均为可空,币种的 name 和 price 在所有币种列表端点和价格端点上也为可空。此外,它还将 DCA 的 series 定义为数组,补充了 GET /coins/{slug}/markets、GET /coins/losers、GET /global/history/{metric} 和 GET /sentiment/altseason 的响应说明,注明 GET /sentiment/altseason 的 days 取值范围为 1–365(0 一直都会被拒绝;如需获取当前读数,请省略该参数),并在错误 schema 中列出 endpoint_unavailable(503)和 http_error 错误码。没有任何请求或响应发生变化 - 变的只是描述方式。
身份验证失败过去按每个 IP 每分钟最多 30 次限制,超出后该 IP 背后的所有密钥都会收到 429。现在,单个密钥在单个 IP 上每分钟最多可失败 30 次,单个 IP 最多 300 次;大约最近 15 分钟内成功通过验证的密钥不会被 IP 上限阻止;不带密钥的请求会直接返回 401,且不计入次数。被阻止的请求会收到带有 Retry-After 的 429 rate_limited。
路径带有末尾斜杠、双斜杠或以 /index.php 开头的 GET 和 HEAD 请求,现在会收到指向规范 URL 的 301,而不是直接返回内容 - 例如 /api/v1/coins/ 重定向到 /api/v1/coins。其他请求方法不受影响。
GET /calculators/compound-interest 过去会把期限四舍五入为整数个复利期,因此在复利期中途结束的期限会被模拟得过长或过短:按 annually 复利的 6 个月会按整整一年计算(12 次定投和一整年的利息),而 5 个月则一个复利期都不计算(没有定投,也没有利息)。现在整数个复利期照旧计算,最后不足一期的部分按比例计息(该部分按单利计算),期限内的每一笔定投都会计入。期限恰为整数个复利期时结果不变;参数和响应字段均不变。
API 及其文档曾将 rate 视为每个复利周期的利率,而网站计算器及其使用指南采用的是年利率。GET /calculators/compound-interest 过去会把 rate 全额应用到每个复利周期,因此按月复利的 5% 实际按每月 5% 增长。现在 rate 为名义年利率:每个周期的利率为 rate 除以每年的周期数(年利率 5% 按月复利,即每月 5/12%),meta.note 现已注明这一点。参数和响应字段均未改变;除 annually 外,所有复利频率的结果都会变化。此外,当 contribution_frequency 和 compound_frequency 同为 daily 或同为 weekly 时,存入不再因浮点数舍入误差而延后或遗漏,因此在 duration_unit=months 下,total_contributions 可能多出一笔存入金额。这改变了现有参数的含义:如需重现之前的结果,请将 rate 乘以每年的复利期数。
每个 Fear & Greed 读数现在都在 score 旁包含 index:即与 Bitculator 显示完全一致的 0–100 Fear & Greed 指数(0–19 极度恐惧,20–39 恐惧,40–59 中性,60–79 贪婪,80–100 极度贪婪)——显示时请使用它。score 保持不变:它是推导出 index 的原始 −100…+100 综合值。适用于 GET /sentiment/fear-greed(主读数及 intervals 中的每一项)、GET /global 中的 fear_greed 以及 GET /global/heatmap 中的 meta.fear_greed。仅为新增,未修改任何现有字段。
GET /coins/{slug} 对没有最大供应量的币种(例如供应量无上限的 Solana 和 Ethereum)将 fully_diluted_valuation 返回为 0。现在改为回退到总供应量,两者均未知时为 null,与 OpenAPI 合约此前的说明一致。
尚无评分的 Fear & Greed 读数过去被报告为 score: 0。现在它在 GET /sentiment/fear-greed 上为 null,GET /global 中的 fear_greed 和 GET /global/heatmap 中的 meta.fear_greed 也同样如此。
没有流通供应量的币种,其 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 小时交易量定义为数字类型。
GET /insights、GET /insights/{id} 和 GET /coins/{slug}/insights 上的每条洞察现在都带有 generated_by: "ai" 以及撰写它的 model。仅为新增,未修改任何现有字段。
Huobi 交易所已更名为 HTX,其 slug 从 huobi 改为 htx;API 不跟随 slug 重定向,因此 /exchanges/huobi 现在返回 404。CoinEx 已被设为非活跃状态,不再返回。
当某个币种的涨跌幅已有 15 分钟未重新计算时,change_24h 和 change_7d 现在为 null,而不是显示过时的涨跌。自 9 月 18 日起,change_rank_24h 和 change_rank_7d 也适用同样的规则。
已发布的契约现在包含媒体类型级别的示例、一个由所有 4xx/5xx 响应共同引用的错误 schema、每个带密钥调用都可能返回的 401、429 与 500 响应、每个成功响应上的 X-RateLimit-* 与 X-Quota-* 响应头、作为 POST /webhooks 回调的 alarm.triggered 投递,以及联系方式、许可证与条款元数据。没有任何请求或响应发生变化 - 变的只是描述方式。
新增:/apis.json、/.well-known/api-catalog(RFC 9727)、/.well-known/security.txt(RFC 9116)、共享响应结构的 JSON Schema 包、附带 JSON 版本的公开状态页、本更新日志,以及版本与弃用政策。
MCP 工具调用不再计入 Data API 套餐的月度配额和突发限制;自当天起,MCP 服务器拥有自己的密钥和套餐。GET /usage 上的 tokens[].kind 现在可能为 mcp,超出配额时的 429 消息为“Your Data API plan has reached its monthly request limit.”(此前写的是嵌入套餐)。
现在在开发者控制台中创建或轮换 Data API 密钥需要已验证的邮箱地址;没有邮箱的账户(例如通过钱包登录的账户)不受此限制。密钥创建限制为每分钟 10 次。现有密钥继续有效。
GET /tickers、GET /pairs、GET /pairs/{id}、GET /coins/{slug}/markets 和 GET /exchanges/{slug}/tickers 上的 volume_usd 过去以整数存储,因此会丢失美分,低于 $0.50 的市场显示为 0。现在交易量保留两位小数,由其计算出的总计也不再继承这一舍入误差。
GET /coins/{slug}/sparkline 和 GET /exchanges/{slug}/sparkline 上的 change 在 30d 至 365d 周期为小数比例(0.05 表示 +5%),而在 24h 和 7d 周期为百分比。现在所有周期均为百分比(1.25 表示 +1.25%),因此较长周期的数值比之前大 100 倍,低于 0.5% 的涨跌也不再被舍入为 0。
在两个迷你走势图端点上,low 和 high 过去取自基于不同窗口构建的摘要,可能与 points 相矛盾 - 例如 low 高于序列中的价格。现在它们是 points 所采样周期内的真实极值。
GET /wallets、/wallets/timeline、/wallets/compare、/wallets/{slug} 和 /wallets/{slug}/assets 现在也会返回状态为 vaporware(从未发布)的钱包,因此 status 可能为该值。
洞察中来源的 title 和 excerpt 不再包含诸如 í 之类的原始 HTML 实体。
对于从未编辑过的文章,GET /articles 和 GET /articles/{slug} 上的 updated_at 过去显示的是记录因任何原因(例如浏览次数或投票)最后一次变动的时间。现在它显示最后一次编辑修改的时间,若无则回退到发布日期,并且 POST /articles/{slug}/feedback 不再改变它。
洞察现在包含 sentiment:bullish、bearish、sheepish,未分类时为 null。
TypeScript、Python、PHP、Go、Rust、Java、C# 与 C++ 客户端,每一个都覆盖全部端点并共享同一传输核心:Bearer 认证、信封解包、X-Quota-* 捕获、429 与 5xx 重试、类型化错误与分页。
端点现在可以要求特定套餐。引入时,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 中指明可解锁它的套餐,且不消耗配额。
六个 /liquidations 端点已在所有套餐上关闭:它们返回 503 endpoint_unavailable(“This endpoint is temporarily unavailable.”),且不消耗配额。
Pro 套餐的月度配额从 500,000 次请求下调至 250,000 次。
通用的 GET /coins/{slug}/indicators/{family} 变为 13 个在相同路径上分别编写文档的端点:rsi、stoch-rsi、sma、cci、mfi、williams-r、price-volatility、volume-volatility、macd、obv、adx、vwap 和 cmf。现有调用不受影响;未知的指标名称现在会得到一个不附带有效名称列表的普通 404。
上线之初,Data API 调用和嵌入组件请求共用一个与嵌入套餐绑定的月度额度池。现在 Data API 拥有自己的 Free、Starter 和 Pro 套餐、订阅和月度配额,以及自己的计费周期:Free 套餐按 UTC 自然月计算,付费套餐以续订日为起点。GET /ping 和 GET /usage 报告的是 Data API 套餐,/usage 只统计 Data API 调用。拆分时各项限制保持不变。
参考文档从 /{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 保持不变。
正式上线:15 个分组共 73 个操作 - 币种、价格、市场、交易所、钱包、全局、市场情绪、指标、清算、换算、计算器、编辑内容、警报、Webhook 与元信息。具备 data-api 权限的 Bearer 密钥、{ data, meta } 信封、十进制字符串精度、X-Quota-* 响应头以及带签名的 Webhook。Data API 调用和嵌入组件请求在嵌入套餐下共享一个月度配额,较长的指标窗口需要 Starter。
弃用会在此处公布,并在移除前至少六个月通过邮件通知每一位密钥所有者 - 参见弃用政策。机器可读索引 /apis.json 以最新条目的日期作为其 modified 时间戳。