参考
返回信封字段
每个端点返回的外层结构都一样,共六个字段。数据本身在 data 里,形态不止一种;另外有些错误(缺参数、超限、付费端点没带 Key)走的是另一套返回,别按信封去解析。
长什么样
除 /v1/health 外,所有端点成功返回的外层都是这六个字段:
{
"ok": true,
"endpoint": "kline",
"tier": "free",
"elapsed_ms": 701,
"source": "multi",
"data": [ "…这里才是数据…" ]
}
| 字段 | 类型 | 含义 |
|---|---|---|
ok |
布尔 | 本次是否取到数据。先看它,再取 data |
endpoint |
字符串 | 端点名(如 kline、quote) |
tier |
字符串 | 本次请求走的档位(匿名调用是 free;带 Key 则是该 Key 的档位) |
elapsed_ms |
数字 | 服务端耗时(毫秒) |
source |
字符串 | 数据来源标识 |
data |
视端点而定 | 真正的数据 |
data 有哪几种形态
不同端点返回的 data 结构不同,取数前先判类型:
| 形态 | 出现在 | 怎么取 |
|---|---|---|
| 数组(每项一行) | kline、quote、hot … |
data[0],再按字段名取,如 data[0].last |
| 对象 | 单条记录类端点 | 直接按字段名取 |
| 已排版文本(字符串) | market-overview、changedist … |
同时会多出 structured / tables,程序化取数用它们 |
| 多段 | 一次返回多张表的端点 | 从 tables 里按段取 |
文本型端点的例子:data 是一段 markdown,同时额外多出两个字段 —— structured 是第一个表([{列: 值}]),tables 是全部表。data 本身没有被改动:文本客户端照旧用 data,程序客户端用 structured。
source 能信吗
source 是数据来源标识。可以看,但不要写进业务逻辑做判断 —— 它的取值不保证稳定,也不代表某个具体上游。
失败时是什么样
ok: false 表示这次没取到数据(此时 data 可能为空或缺席)。注意两点:
- HTTP 状态码仍是 200(信封本身就是返回体);
- 先判
ok,再决定要不要用data。
哪些返回不是信封
下面这几种不走上面那套结构,别按信封去解析:
| 情况 | HTTP | 返回长什么样 |
|---|---|---|
缺必填参数(如没传 code) |
422 | {"detail": [{"loc": ["query", "code"], "msg": "Field required", "input": null}]} |
| 付费端点匿名调用 | 401 | {"error": "需要 API Key(此端点属付费层)", "docs": "/docs"} |
| 匿名超限 | 429 | {"error": "匿名限流 …", "pow": { … }, "how_to": "…"} |
共同特征:没有 ok 字段,顶层是 error 或 detail。所以健壮的客户端应该先看 HTTP 状态码,再看有没有 ok。其余错误码见错误码与限流说明。
/v1/health 是例外
/v1/health 不返回 data,它返回服务状态:
{ "ok": true, "uptime_s": 123456, "data_ready": true, "tiers": ["free", "pro"] }
data_ready 为 true 表示数据通道可用。
最后更新: 2026-10-05
字段与失败语义取自 2026-10-05 线上真实返回与端点定义;错误返回形状实测于 /v1/kline 等免费端点。