跳到主要内容

K-Line API 使用说明

版本:1.0.0
适用对象:接入方开发者、行情服务调用方、运维人员

本文档面向接入方开发者,介绍如何使用 K-Line API 管理采集池、查询历史 OHLCV 数据、订阅实时 K 线推送,以及调用行情代理与运维调试接口。


目录


1. 快速开始

1.1 服务简介

K-Line API 是一个 K 线数据服务,核心能力包括:

  • 管理需要采集的链上流动性池
  • 查询指定池的历史 OHLCV 蜡烛图数据
  • 通过 WebSocket 动态订阅实时 K 线推送
  • 代理查询 CoinGecko 市场行情、Top Holders 和代币元数据
  • 查看采集器与 KlineHub Durable Object 运行状态

所有 HTTP 接口均挂载在 /api/v1 路径前缀下。当前对外提供服务的接口统一使用公共请求头 X-API-Key 做接口鉴权和计费识别;转发层内部使用的请求头不作为对外接入要求。


1.2 Base URL

所有接口请求均以以下生产环境地址为根路径:

https://api.gelabs.org

示例:

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/health"

1.3 统一响应结构

大多数 HTTP 接口成功时返回统一结构:

{
"code": 0,
"message": "ok",
"data": {}
}
字段类型必返回说明
codeinteger业务状态码。成功固定为 0
messagestring响应消息。成功固定为 ok
dataobject / array / string业务数据,具体结构随接口变化

失败响应通常为:

{
"code": 10001,
"message": "Invalid query params",
"error": {
"type": "ValidationError",
"details": {
"formErrors": [],
"fieldErrors": {
"chain_type": ["String must contain at least 1 character(s)"]
}
}
}
}

注意: 运维调试接口中,/api/v1/admin/debug/ingester/ensure 返回纯文本 ok/api/v1/admin/debug/ingester/status/api/v1/admin/debug/hub/status 返回 Durable Object 裸 JSON,不使用统一响应包装。


1.4 错误码

错误码含义常见触发场景
0成功正常响应
10001参数校验失败query、path 或 body 字段缺失或格式不合法
10002无效参数参数值不符合业务约束
10003资源不存在路由不存在、CoinGecko 资源不存在
10004资源冲突重复创建同一池
10005错误请求WebSocket 预检等错误请求场景
20001未认证预留,当前未启用
20002无权限预留,当前未启用
60001K 线资源不存在查询不存在的池
60002K 线同步失败预留
60003无效 Symbol预留
60004无效时间间隔预留
99001服务器内部错误未捕获异常、上游异常、限流
99002数据库错误预留
99003缓存错误预留

1.5 公共约定

说明
公共请求头所有对外接口均需携带 X-API-Key,用于接口鉴权和计费识别
Content-TypePOST 请求体使用 application/json,WebSocket 消息使用 JSON 文本帧
时间戳HTTP 历史查询参数 fromto 接受 Unix 秒或毫秒;大于 10000000000 的值按毫秒处理
链类型chain_type 会归一化为小写,支持别名:eth/ethereumevmsol/solanasvmtrx/trontvmbtc/bitcoin 等 → utxoatomcosmossui/aptos/aptmove
代币方向token 支持 basequote,默认 base
K 线周期支持 1s1m15m1h4h1d1w1M1Y。其中 1w1M1Y1d 聚合查询得出
分页请求参数为 pagepage_size;响应分页字段为 pagepageSizetotaltotalPages
缓存当前 HTTP 查询接口未对外承诺固定 Cache-Control 策略;实时 WebSocket 订阅成功后可能收到服务端内存中的最新快照

注意: 1w1M1Y 周期由已落库的 1d K 线聚合查询得出,不代表采集器直接订阅了对应上游粒度。


1.6 快速接入流程

推荐按以下步骤接入:

  1. 调用 GET /api/v1/health 确认服务可用。
  2. 调用 POST /api/v1/admin/pools 创建需要采集的流动性池。
  3. 调用 PATCH /api/v1/admin/pools/{id}/activate 激活池,触发采集器订阅上游实时数据。
  4. 使用 GET /api/v1/kline/ohlcv 查询历史 K 线。
  5. 使用 GET /api/v1/kline/ws 建立 WebSocket 连接并订阅实时推送。

2. 池管理接口

池用于描述需要采集 K 线数据的链上流动性池。创建后默认 is_active: false,需要调用激活接口后才会通知采集器订阅上游实时数据。

本模块适用于:

  • 预先登记需要采集 OHLCV 的链上池
  • 控制采集器是否订阅指定池的实时行情
  • 查询当前系统内已登记池的状态和元信息

2.1 创建池

请求

POST /api/v1/admin/pools

请求体

字段类型必填说明
chain_typestring链类型,1-50 字符,服务端会归一化
chain_idinteger链 ID,正整数
network_idstringCoinGecko 网络标识符,1-50 字符,例如 eth
pool_addressstring池合约地址,1-100 字符
tokenstringbasequote,默认 base
dex_idstringDEX 标识符,1-100 字符
labelstring可读标签,最长 100 字符

curl 示例

curl -X POST "https://api.gelabs.org/api/v1/admin/pools" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chain_type": "evm",
"chain_id": 1,
"network_id": "eth",
"pool_address": "0xabc123def456",
"token": "base",
"dex_id": "uniswap_v3",
"label": "ETH/USDC"
}'

成功响应

{
"code": 0,
"message": "ok",
"data": {
"id": 42,
"chain_type": "evm",
"chain_id": 1,
"network_id": "eth",
"pool_address": "0xabc123def456",
"token": "base",
"dex_id": "uniswap_v3",
"label": "ETH/USDC",
"is_active": false,
"created_at": "2026-04-16T08:00:00.000Z",
"updated_at": "2026-04-16T08:00:00.000Z"
}
}

池对象字段

字段类型必返回说明
idinteger池的内部 ID
chain_typestring归一化后的链类型
chain_idinteger链 ID
network_idstringCoinGecko 网络标识符
pool_addressstring池合约地址
tokenstring采集的代币方向,basequote
dex_idstring / nullDEX 标识符
labelstring / null可读标签
is_activeboolean是否已激活采集
created_atstringISO 8601 创建时间
updated_atstringISO 8601 更新时间

常见错误响应

重复创建同一池时通常返回 HTTP 409:

{
"code": 10004,
"message": "Pool already exists",
"error": { "type": "ConflictError" }
}

2.2 获取池列表

请求

GET /api/v1/admin/pools

请求参数

参数类型必填默认值说明
pageinteger1页码,从 1 开始
page_sizeinteger20每页条数,范围 1-100

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/admin/pools?page=1&page_size=20"

缓存说明

池管理接口直接读取数据库状态,当前不对外承诺固定 HTTP 缓存策略。客户端如需缓存,应在激活、停用或重新创建池后主动刷新。

成功响应

{
"code": 0,
"message": "ok",
"data": {
"items": [
{
"id": 42,
"chain_type": "evm",
"chain_id": 1,
"network_id": "eth",
"pool_address": "0xabc123def456",
"token": "base",
"dex_id": "uniswap_v3",
"label": "ETH/USDC",
"is_active": true,
"created_at": "2026-04-16T08:00:00.000Z",
"updated_at": "2026-04-16T09:00:00.000Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1,
"totalPages": 1
}
}
}

2.3 获取池详情

请求

GET /api/v1/admin/pools/{id}
路径参数类型必填说明
idinteger池的内部 ID,正整数

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/admin/pools/42"

响应 data 为单个池对象,字段同创建池响应。池不存在时返回 HTTP 404,业务错误码通常为 60001

常见错误响应

{
"code": 60001,
"message": "Pool not found",
"error": { "type": "NotFoundError" }
}

2.4 激活池

请求

PATCH /api/v1/admin/pools/{id}/activate

激活后,服务会尽力通知 OhlcvIngester 订阅该池上游实时数据。通知失败不会回滚数据库状态,池状态以数据库为准。

curl 示例

curl -X PATCH "https://api.gelabs.org/api/v1/admin/pools/42/activate" \
-H "X-API-Key: $API_KEY"

成功时返回更新后的池对象,is_activetrue


2.5 停用池

请求

PATCH /api/v1/admin/pools/{id}/deactivate

停用后,服务会尽力通知 OhlcvIngester 取消订阅该池上游实时数据。通知失败不会回滚数据库状态,池状态以数据库为准。

curl 示例

curl -X PATCH "https://api.gelabs.org/api/v1/admin/pools/42/deactivate" \
-H "X-API-Key: $API_KEY"

成功时返回更新后的池对象,is_activefalse


3. 历史 K 线查询

本模块用于查询已经采集并落库的 OHLCV 蜡烛图数据,适用于绘制历史 K 线图、补齐客户端断线期间数据,以及在实时订阅前加载初始行情。

查询时需要同时指定链、池、代币方向和 K 线周期。接口返回数组结构,未命中数据时通常返回空数组。

3.1 查询 OHLCV 数据

请求

GET /api/v1/kline/ohlcv

请求参数

参数类型必填默认值说明
intervalstring-K 线周期:1s1m15m1h4h1d1w1M1Y
frominteger-查询起始时间,Unix 秒或毫秒
tointeger-查询结束时间,Unix 秒或毫秒
limitinteger1000最大返回条数,范围 1-5000
chain_typestring-链类型,会自动归一化
chain_idinteger-链 ID,正整数
pool_addressstring-池合约地址
tokenstringbasebasequote

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/kline/ohlcv?interval=1h&from=1776679200&to=1776765600&limit=500&chain_type=evm&chain_id=1&pool_address=0xabc123def456&token=base"

成功响应

data 是 OHLCV 数组,不再套 items

{
"code": 0,
"message": "ok",
"data": [
{
"pool_id": 42,
"interval": "1h",
"open_time": 1776679200,
"open": 3500.12,
"high": 3520,
"low": 3480.5,
"close": 3510.88,
"volume": 1234567.89
}
]
}

响应字段

字段类型必返回说明
pool_idinteger池的内部 ID
intervalstringK 线周期
open_timeinteger蜡烛开始时间,Unix 秒
opennumber / null开盘价
highnumber / null最高价
lownumber / null最低价
closenumber / null收盘价
volumenumber / null成交量

缓存说明

历史 K 线查询当前未声明固定 HTTP 缓存头。业务侧可按 interval 自行设置短缓存;实时性要求高的场景建议结合 WebSocket 推送刷新最新一根蜡烛。

常见错误响应

参数缺失或格式不合法时通常返回:

{
"code": 10001,
"message": "Invalid query params",
"error": {
"type": "ValidationError",
"details": {
"fieldErrors": {
"interval": ["Required"],
"pool_address": ["Required"]
}
}
}
}

4. Market 行情代理接口

Market 接口代理 CoinGecko API。外层仍使用 K-Line 服务统一成功响应,data 字段为 CoinGecko 返回的原始业务结构。

本模块适用于在 K 线服务侧顺带查询池和代币的外部市场信息,例如池详情、Top Holders 和合约地址对应的代币元数据。由于业务数据透传自 CoinGecko,字段结构可能随上游版本演进。

注意: Market 接口主要用于辅助展示和调试,不等同于 K-Line 服务内部采集状态;池未登记或未激活不影响通过 Market 接口查询上游数据。

4.1 获取池市场详情

请求

GET /api/v1/market/pools/{network}/{address}
参数位置类型必填说明
networkpathstringCoinGecko 网络标识符,1-100 字符
addresspathstring池合约地址,1-200 字符
includequerystring额外包含的字段,逗号分隔
include_volume_breakdownquerystring"true""false"
include_compositionquerystring"true""false"

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/market/pools/eth/0xabc123def456?include=base_token,quote_token&include_volume_breakdown=true&include_composition=false"

缓存说明

当前代理接口未在文档中承诺固定缓存时长。上游 CoinGecko 的响应延迟、限流和缓存行为可能影响最终结果。

常见错误响应

上游请求失败、限流或内部异常时通常返回:

{
"code": 99001,
"message": "Internal server error",
"error": { "type": "InternalServerError" }
}

4.2 获取代币 Top Holders

请求

GET /api/v1/market/tokens/{network}/{address}/top-holders
参数位置类型必填说明
networkpathstringCoinGecko 网络标识符,1-100 字符
addresspathstring代币合约地址,1-200 字符
holdersquerystring正整数字符串或 max
include_pnl_detailsquerystring"true""false"

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/market/tokens/eth/0xabc123def456/top-holders?holders=10&include_pnl_details=false"

缓存说明

当前代理接口未在文档中承诺固定缓存时长;请按上游数据更新频率和业务展示需求控制调用频率。

常见错误响应

{
"code": 99001,
"message": "Internal server error",
"error": { "type": "InternalServerError" }
}

4.3 通过合约地址查询代币元数据

请求

GET /api/v1/market/coins/{network}/{address}
参数位置类型必填说明
networkpathstringCoinGecko 平台标识符,1-100 字符
addresspathstring代币合约地址,1-200 字符

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/market/coins/ethereum/0xabc123def456"

缓存说明

当前代理接口未在文档中承诺固定缓存时长。代币元数据变化频率通常较低,客户端可按业务需要自行缓存。

常见错误响应

{
"code": 99001,
"message": "Internal server error",
"error": { "type": "InternalServerError" }
}

5. K-Line WebSocket

K-Line 实时推送使用单一 WebSocket 入口,连接建立后通过 JSON 消息动态订阅或退订多个池。

本模块适用于需要低延迟接收 K 线变更的客户端,例如行情页面、告警服务和内部数据同步任务。客户端建立连接后,可通过 subscribe / unsubscribe 动态维护多个池的订阅。

推荐客户端同时保留 HTTP 历史查询能力:首次进入页面或断线重连后先用 HTTP 补齐历史数据,再使用 WebSocket 推送更新最新蜡烛。

5.1 连接要求

连接地址

GET /api/v1/kline/ws

必填请求头

Header必填说明
Upgrade: websocket标准 WebSocket 升级头
Connection: Upgrade标准 WebSocket 升级头
X-API-Key公共 API Key,用于接口鉴权和计费识别

注意: X-API-Key 是对外接入唯一必填业务请求头;转发层内部请求头不作为接入方要求。

未携带 WebSocket 升级头时返回 HTTP 426:

{
"code": 4000,
"message": "WebSocket upgrade required",
"error": { "type": "BadRequestError" }
}

缺少 X-API-Key 或鉴权失败时通常返回 HTTP 401 或 403,具体以网关配置为准:

{
"code": 20001,
"message": "Unauthorized",
"error": { "type": "UnauthorizedError" }
}

5.2 协议常量

常量字符串值方向说明
WS_TYPE_PINGping客户端 → 服务端应用层心跳
WS_TYPE_PONGpong服务端 → 客户端心跳响应
WS_TYPE_SUBSCRIBEsubscribe客户端 → 服务端订阅池
WS_TYPE_UNSUBSCRIBEunsubscribe客户端 → 服务端退订池
WS_TYPE_SUBSCRIBEDsubscribed服务端 → 客户端订阅成功确认
WS_TYPE_UNSUBSCRIBEDunsubscribed服务端 → 客户端退订成功确认
WS_TYPE_OHLCVohlcv服务端 → 客户端实时或快照 K 线推送
WebSocket code说明
0成功
4001无效消息,例如 JSON 解析失败、缺少 id/type、订阅字段缺失
4002未知命令
4500内部错误,当前预留

5.3 客户端消息结构

客户端消息必须是 JSON 文本帧:

{
"id": "req-001",
"type": "subscribe",
"data": {}
}
字段类型必填说明
idstring请求关联 ID,服务端响应会原样带回
typestringpingsubscribeunsubscribe
dataobject视命令而定命令负载

subscribe.data

字段类型必填说明
chain_typestring链类型,会自动归一化
chain_idnumber链 ID
pool_addressstring池合约地址,内部池键会转小写
tokenstringbasequote,默认 base
intervalsstring[]合法 K 线周期数组;省略或空数组表示接收所有周期。非法值会被静默忽略

注意: intervals 应使用 JSON 数组,不要发送逗号分隔字符串。

unsubscribe.data

字段类型必填说明
chain_typestring链类型,会自动归一化
chain_idnumber链 ID
pool_addressstring池合约地址
tokenstringbasequote,默认 base

5.4 服务端消息结构

服务端下行消息统一为:

{
"id": "req-001",
"time": 1776682800000,
"type": "subscribed",
"code": 0,
"data": {},
"msg": "ok"
}
字段类型必返回说明
idstring请求响应会回传请求 ID;主动推送为 ""
timenumber服务端 Unix 毫秒时间戳
typestringpongsubscribedunsubscribedohlcverror
codenumberWebSocket 业务码
dataobject / null业务负载
msgstring可读说明;实时推送为 ok,快照为 snapshot

5.5 订阅与退订示例

心跳

{ "id": "hb-001", "type": "ping", "data": {} }

响应:

{
"id": "hb-001",
"time": 1776682800000,
"type": "pong",
"code": 0,
"data": {},
"msg": "ok"
}

订阅

{
"id": "sub-001",
"type": "subscribe",
"data": {
"chain_type": "evm",
"chain_id": 1,
"pool_address": "0xabc123def456",
"token": "base",
"intervals": ["1m", "1h", "4h"]
}
}

订阅成功响应:

{
"id": "sub-001",
"time": 1776682800000,
"type": "subscribed",
"code": 0,
"data": {
"key": "evm:1:0xabc123def456:base",
"intervals": ["1m", "1h", "4h"]
},
"msg": "ok"
}

若服务端缓存中已有该池最新 tick,订阅成功后会额外推送一条 ohlcvmsgsnapshot

退订

{
"id": "unsub-001",
"type": "unsubscribe",
"data": {
"chain_type": "evm",
"chain_id": 1,
"pool_address": "0xabc123def456",
"token": "base"
}
}

响应:

{
"id": "unsub-001",
"time": 1776682800000,
"type": "unsubscribed",
"code": 0,
"data": {
"key": "evm:1:0xabc123def456:base"
},
"msg": "ok"
}

5.6 推送数据字段

实时与快照推送都使用 type: "ohlcv"

{
"id": "",
"time": 1776682800000,
"type": "ohlcv",
"code": 0,
"data": {
"chain_type": "evm",
"chain_id": 1,
"pool_address": "0xabc123def456",
"token": "base",
"interval": "1h",
"open_time": 1776679200,
"open": 3500.12,
"high": 3520,
"low": 3480.5,
"close": 3510.88,
"volume": 1234567.89
},
"msg": "ok"
}
字段类型必返回说明
chain_typestring / null链类型
chain_idnumber / null链 ID
pool_addressstring池地址
tokenstring代币方向
intervalstringK 线周期
open_timenumber蜡烛开始时间,Unix 秒
opennumber / null开盘价
highnumber / null最高价
lownumber / null最低价
closenumber / null收盘价
volumenumber / null成交量

KlineHub 对二进制帧会静默忽略,不返回错误消息。未订阅任何池时不会收到 ohlcv 推送。对同一池重复 subscribe 会覆盖该池的 intervals 设置。


5.7 WebSocket 错误消息

{
"id": "sub-001",
"time": 1776682800000,
"type": "error",
"code": 4001,
"data": null,
"msg": "subscribe: missing required fields"
}
场景codemsg 示例
JSON 解析失败4001Invalid JSON
缺少 idtype4001Missing id or type
subscribe 缺少必填字段4001subscribe: missing required fields
unsubscribe 缺少必填字段4001unsubscribe: missing required fields
未知命令4002Unknown command: xxx

6. 通用 WebSocket

通用 WebSocket 路径为:

GET /api/v1/ws/{topic}

topic 会作为 Durable Object 实例名称。当前公开能力仅支持应用层 ping/pong

客户端消息

{ "id": "req-001", "type": "ping", "data": {} }

服务端响应

{
"id": "req-001",
"time": 1704070800000,
"type": "pong",
"code": 0,
"data": {},
"msg": "ok"
}

普通 HTTP 请求访问该路径会返回 HTTP 426 纯文本:

Expected WebSocket upgrade

与 KlineHub 不同,通用 WsServer 收到二进制帧会返回 error 消息,code4001msgBinary messages are not supported

注意: 通用 WebSocket 当前仅适合作为连通性或基础消息通道验证;K 线实时行情请使用 /api/v1/kline/ws


7. 运维调试接口(附录)

这些接口直接访问 Durable Object 内部状态,当前无鉴权保护,建议仅在受控网络或调试环境使用。

注意: 运维调试接口不完全遵循统一 JSON 响应结构,调用方应按各接口说明分别处理 text/plain 或 Durable Object 裸 JSON。

7.1 确保采集器运行

请求

POST /api/v1/admin/debug/ingester/ensure

curl 示例

curl -X POST "https://api.gelabs.org/api/v1/admin/debug/ingester/ensure" \
-H "X-API-Key: $API_KEY"

成功响应

ok

该接口返回 text/plain,不使用统一 JSON 包装。


7.2 查询采集器状态

请求

GET /api/v1/admin/debug/ingester/status

成功响应

{
"connected": true,
"channelConfirmed": true,
"lastTickAt": "2026-04-16T08:01:00.000Z",
"poolCount": 1,
"pools": [
{
"poolId": 42,
"chainRefId": 1,
"chainType": "evm",
"chainId": 1,
"networkId": "eth",
"poolAddress": "0xabc123def456",
"token": "base"
}
]
}
字段类型必返回说明
connectedboolean是否已连接上游 CoinGecko WebSocket
channelConfirmedboolean上游 Action Cable 频道是否已确认
lastTickAtstring / null最近一次收到 tick 的时间
poolCountinteger当前订阅池数量
poolsarray采集器内存中的池订阅列表

7.3 查询 KlineHub 状态

请求

GET /api/v1/admin/debug/hub/status

成功响应

{
"wsCount": 8,
"poolCount": 2,
"pools": [
{
"key": "evm:1:0xabc123def456:base",
"clientCount": 5
}
],
"lastIngestAt": "2026-04-16T08:01:00.000Z",
"lastIngestKey": "evm:1:0xabc123def456:base"
}
字段类型必返回说明
wsCountinteger当前连接到 KlineHub 的 WebSocket 客户端数量
poolCountinteger当前有订阅客户端的池键数量
pools[].keystring池订阅键,格式 chain_type:chain_id:pool_address:token
pools[].clientCountinteger订阅该池键的客户端数量
lastIngestAtstring / null最近一次收到 Ingester 推送的时间
lastIngestKeystring / null最近一次收到 tick 对应的池键

8. 健康检查(附录)

请求

GET /api/v1/health

curl 示例

curl -H "X-API-Key: $API_KEY" "https://api.gelabs.org/api/v1/health"

成功响应

{
"code": 0,
"message": "ok",
"data": {
"status": "ok",
"timestamp": "2026-04-16T08:00:00.000Z"
}
}

9. 错误处理与最佳实践

9.1 常见 HTTP 错误

HTTP常见业务码说明
40010001 / 10002 / 10005请求参数缺失、格式不合法,或 WebSocket 预检请求错误
40410003 / 60001路由、池或上游资源不存在
40910004重复创建同一池等资源冲突
50099001 / 99002 / 99003服务内部异常、数据库异常或缓存异常

调用方应同时关注 HTTP 状态码和响应体 code。业务成功以 code: 0 为准;部分运维接口不使用统一 JSON 包装,需要按接口单独处理。

9.2 WebSocket 接入建议

项目建议
心跳客户端定期发送 { "id": "hb-001", "type": "ping", "data": {} } JSON 消息,并检查服务端 pong
重连连接断开后使用指数退避重连,重连成功后重新发送订阅
补数据重连后先通过 GET /api/v1/kline/ohlcv 查询断线期间历史数据,再继续消费实时推送
幂等对同一池、同一 interval、同一 open_time 的 K 线更新做覆盖写入
订阅管理对同一池重复 subscribe 会覆盖该池的 intervals 设置,客户端应维护本地订阅状态

9.3 时间戳处理

  • HTTP 查询参数 fromto 支持 Unix 秒或毫秒;服务端会将大于 10000000000 的值按毫秒处理。
  • OHLCV 字段 open_time 使用 Unix 秒,WebSocket 信封字段 time 使用 Unix 毫秒。
  • 客户端展示跨时区行情时,建议统一以 UTC 存储,再在展示层转换时区。

9.4 价格与成交量精度

  • openhighlowclosevolume 可能为 null,客户端展示和计算时需要显式处理。
  • 对价格、成交量和市值等数值字段,建议使用高精度 decimal 类型或字符串化存储,避免 JavaScript number 精度问题。
  • Market 代理接口透传 CoinGecko 业务数据,字段类型可能与 K-Line 自身 OHLCV 字段不完全一致。

文档版本:v1.0.0 | 最后更新:2026-04-28