跳至主要内容

K-Line API · 介面詳情

歷史 K 線查詢

本模組用於查詢已經採集並落庫的 OHLCV 蠟燭圖資料,適用於繪製歷史 K 線圖、補齊客戶端斷線期間資料,以及在即時訂閱前載入初始行情。

查詢時需要同時指定鏈、池地址和 K 線週期。OHLCV 查詢按 pool_address 匹配池,忽略 token 參數。介面返回陣列結構,未命中資料時通常返回空陣列。

查詢 OHLCV 資料

請求

GET /kline/api/v1/kline/ohlcv

請求參數

參數類型必填預設值說明
intervalstring-K 線週期:1s1m15m1h4h1d1w1M1Y
frominteger-查詢起始時間,Unix 秒或毫秒
tointeger-查詢結束時間,Unix 秒或毫秒
limitinteger1000最大返回筆數,範圍 1-5000
chain_typestring-鏈類型,會自動歸一化
chain_idinteger-鏈 ID,正整數
pool_addressstring-池合約地址

curl 範例

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

成功回應

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"]
}
}
}
}

Market 行情介面

Market 介面使用 K-Line 服務統一成功回應,data 欄位返回對應市場資料。

本模組適用於查詢池和代幣的市場資訊,例如池詳情、Top Holders 和合約地址對應的代幣元資料。

注意: Market 介面主要用於輔助展示和偵錯,不等同於 K-Line 服務內部採集狀態。

取得池市場詳情

請求

GET /kline/api/v1/market/pools/{network}/{address}
參數位置類型必填說明
networkpathstring網路標識符,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/kline/api/v1/market/pools/eth/0xabc123def456?include=base_token,quote_token&include_volume_breakdown=true&include_composition=false"

快取說明

目前介面未在文件中承諾固定快取時長。

常見錯誤回應

請求失敗、限流或內部異常時通常返回:

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

取得代幣 Top Holders

請求

GET /kline/api/v1/market/tokens/{network}/{address}/top-holders
參數位置類型必填說明
networkpathstring網路標識符,1-100 字元
addresspathstring代幣合約地址,1-200 字元
holdersquerystring正整數字串或 max
include_pnl_detailsquerystring"true""false"

curl 範例

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

快取說明

目前介面未在文件中承諾固定快取時長;請按業務展示需求控制呼叫頻率。

常見錯誤回應

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

透過合約地址查詢代幣元資料

請求

GET /kline/api/v1/market/coins/{network}/{address}
參數位置類型必填說明
networkpathstring平台標識符,1-100 字元
addresspathstring代幣合約地址,1-200 字元

curl 範例

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

快取說明

目前代理介面未在文件中承諾固定快取時長。代幣元資料變化頻率通常較低,客戶端可按業務需要自行快取。

常見錯誤回應

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

K-Line WebSocket

K-Line 即時推送使用單一 WebSocket 入口,連線建立後透過 JSON 訊息動態訂閱或退訂多個池。

本模組適用於需要低延遲接收 K 線變更的客戶端,例如行情頁面、告警服務和內部資料同步任務。客戶端建立連線後,可透過 subscribe / unsubscribe 動態維護多個池的訂閱。

建議客戶端同時保留 HTTP 歷史查詢能力:首次進入頁面或斷線重連後先用 HTTP 補齊歷史資料,再使用 WebSocket 推送更新最新蠟燭。

連線要求

連線地址

GET /kline/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" }
}

協定常量

常量字串值方向說明
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內部錯誤,目前預留

客戶端訊息結構

客戶端訊息必須是 JSON 文字幀:

{
"id": "req-001",
"type": "subscribe",
"data": {}
}
欄位類型必填說明
idstring請求關聯 ID,服務端回應會原樣帶回
typestringpingsubscribeunsubscribe
dataobject視命令而定命令負載

subscribe.data

欄位類型必填說明
chain_typestring鏈類型,會自動歸一化
chain_idnumber鏈 ID
pool_addressstring池合約地址,內部池鍵會轉小寫
tokenstring已相容保留;服務端會根據目前啟用的唯一池配置自動確定 basequote,客戶端無需傳入
intervalsstring[]合法 K 線週期陣列;省略或空陣列表示接收所有週期。非法值會被靜默忽略

注意: intervals 應使用 JSON 陣列,不要傳送逗號分隔字串。

unsubscribe.data

欄位類型必填說明
chain_typestring鏈類型,會自動歸一化
chain_idnumber鏈 ID
pool_addressstring池合約地址
tokenstring已相容保留;退訂會移除目前連線上該池已有訂閱,不依賴客戶端傳入 token

服務端訊息結構

服務端下行訊息統一為:

{
"id": "req-001",
"time": 1776682800000,
"type": "subscribed",
"code": 0,
"data": {},
"msg": "ok"
}
欄位類型必返回說明
idstring請求回應會回傳請求 ID;主動推送為 ""
timenumber服務端 Unix 毫秒時間戳
typestringpongsubscribedunsubscribedohlcverror
codenumberWebSocket 業務碼
dataobject / null業務負載
msgstring可讀說明;即時推送為 ok,快照為 snapshot

訂閱與退訂範例

心跳

{ "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",
"intervals": ["1m", "1h", "4h"]
}
}

訂閱成功回應:

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

若服務端快取中已有該池最新 tick,訂閱成功後會額外推送一筆 ohlcvmsgsnapshot

退訂

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

回應:

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

推送資料欄位

即時與快照推送都使用 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 設定。訂閱成功時,服務端會使用目前啟用的唯一池配置生成訂閱 key;如果池不存在、未啟用或配置不唯一,會返回 error,不會寫入訂閱狀態。


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
subscribe 未找到啟用池4001subscribe: active pool not found
subscribe 命中多個啟用池配置4500subscribe: ambiguous active pool
unsubscribe 缺少必填欄位4001unsubscribe: missing required fields
未知命令4002Unknown command: xxx

通用 WebSocket

通用 WebSocket 路徑為:

GET /kline/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 線即時行情請使用 /kline/api/v1/kline/ws


錯誤處理與最佳實務

常見 HTTP 錯誤

HTTP常見業務碼說明
40010001 / 10002 / 10005請求參數缺失、格式不合法,或 WebSocket 預檢請求錯誤
40410003 / 60001路由、池或資源不存在
40910004重複建立同一池等資源衝突
50099001 / 99002 / 99003服務內部異常、資料庫異常或快取異常

呼叫方應同時關注 HTTP 狀態碼和回應體 code。業務成功以 code: 0 為準。

WebSocket 接入建議

項目建議
心跳客戶端定期傳送 { "id": "hb-001", "type": "ping", "data": {} } JSON 訊息,並檢查服務端 pong
重連連線斷開後使用指數退避重連,重連成功後重新傳送訂閱
補資料重連後先透過 GET /kline/api/v1/kline/ohlcv 查詢斷線期間歷史資料,再繼續消費即時推送
冪等對同一池、同一 interval、同一 open_time 的 K 線更新做覆蓋寫入
訂閱管理對同一池重複 subscribe 會覆蓋該池的 intervals 設定,客戶端應維護本地訂閱狀態

時間戳處理

  • HTTP 查詢參數 fromto 支援 Unix 秒或毫秒;服務端會將大於 10000000000 的值按毫秒處理。
  • OHLCV 欄位 open_time 使用 Unix 秒,WebSocket 信封欄位 time 使用 Unix 毫秒。
  • 客戶端展示跨時區行情時,建議統一以 UTC 儲存,再在展示層轉換時區。

價格與成交量精度

  • openhighlowclosevolume 可能為 null,客戶端展示和計算時需要顯式處理。
  • 對價格、成交量和市值等數值欄位,建議使用高精度 decimal 類型或字串化儲存,避免 JavaScript number 精度問題。
  • Market 行情介面返回的欄位類型可能與 K-Line 自身 OHLCV 欄位不完全一致。

文件版本:v1.0.0 | 最後更新:2026-04-28