快速開始
註冊、驗證郵箱並選擇套餐;付款確認後會顯示第一把 API Key(只顯示一次)。
建立帳號
驗證郵箱;未驗證的客戶不能購買或取得金鑰。
用 USDC 購買套餐
選擇 Solana、Base 或 Arbitrum,轉帳後提交交易哈希。
呼叫 API
REST 與 WebSocket 都使用 Authorization 標頭攜帶金鑰。
curl -s "https://api.marketquote.io/v1/quote/AAPL" \
-H "Authorization: Bearer mq_live_9f2c…" \
-H "Accept: application/json"
{
"symbol": "AAPL",
"bid": "345.42",
"bid_qty": "0",
"ask": "345.46",
"ask_qty": "0",
"status": "TRADING",
"time": 1793029498236
}認證
每個 REST 請求與 WebSocket 握手都在 Authorization 標頭攜帶 API Key;金鑰綁定一個客戶,有效性隨客戶狀態與訂閱判定。
- 每個客戶一把金鑰;明文只在建立或重置時顯示。
- 在客戶門戶自助重置;舊金鑰立即吊銷。
- 金鑰只能放在 Authorization 標頭;查詢字串中的金鑰一律拒絕。
- REST 每次請求都會向 PostgreSQL 校驗金鑰與訂閱;已吊銷的金鑰立即失效。
- WebSocket 連線會定期重新校驗;金鑰或訂閱失效時立即關閉連線。
- 客戶被禁用、訂閱取消或退款都會使金鑰失效。
REST
商品、L1 報價、最新價、K 線、交易時段與資料源目錄的無狀態讀取;歷史查詢使用同一組端點並帶 from/to 視窗。
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /v1/instruments | 公開商品目錄,包含資產類別。 |
| GET | /v1/quote/{symbol} | 最新合成 BBO;帶 from/to 與 limit 可查歷史。 |
| GET | /v1/tick/{symbol} | 最新合成最新價;帶 from/to 與 limit 可查歷史。 |
| GET | /v1/quotes?symbols=A,B | 單次最多 50 個商品的合成 BBO 最新報價;結果保持請求順序。 |
| GET | /v1/ticks?symbols=A,B | 單次最多 50 個商品的合成最新價;結果保持請求順序。 |
| GET | /v1/klines/{symbol}/1m | 最新 1m K 線;帶 from/to 與 limit 可查區間。 |
| GET | /v1/schedules/{symbol} | 商品時區下的每週交易時段與節假日覆蓋。 |
| GET | /v1/schedules?symbols=A,B | 單次最多 50 個商品的每週交易時段與節假日覆蓋。 |
| GET | /v1/sources | 公開資料源目錄,包含 LIVE 狀態。 |
| UPGRADE | /v1/ws | WebSocket 升級;quote / tick 通道;必須攜帶 Authorization 標頭。 |
歷史查詢使用同一組端點並帶 from/to 視窗;from 與 to 是毫秒級 epoch 邊界(含端點),必須成對提供且 to 大於 from;limit 限制回傳列數。
批量讀取:/v1/quotes、/v1/ticks 與 /v1/schedules 接受逗號分隔的 symbols 查詢參數(最多 50 個,自動去重並保持請求順序),且只回傳最新值。
每個批量項目要麼是與單商品端點相同的物件,要麼是 {"symbol":"...","error":"CODE"};單個商品不可用不影響其他項,SNAPSHOT_UNAVAILABLE 與單商品端點使用相同的時效規則。
交易時段回傳商品 IANA 時區下的每週時段與節假日覆蓋;7x24 商品回傳 is_24x7 且不含每週時段。
包含 / 的商品符號必須做百分比編碼,例如 BTC%2FUSDT。
用 Accept: application/json 或 application/x-protobuf 選擇編碼;價格與數量是依商品 price_precision、qty_precision 格式化的十進位字串,時間戳為毫秒級 epoch。
REST 回應範例
{
"instruments": [
{
"asset_category": "EQUITIES",
"contract_month": null,
"enable_pre_post": true,
"expiry_date": null,
"name": "Apple",
"price_precision": 2,
"product_code": null,
"qty_precision": 0,
"symbol": "AAPL"
},
{
"asset_category": "EQUITIES",
"contract_month": null,
"enable_pre_post": true,
"expiry_date": null,
"name": "Microsoft",
"price_precision": 2,
"product_code": null,
"qty_precision": 0,
"symbol": "MSFT"
},
{
"asset_category": "COMMODITIES",
"contract_month": "2026-12",
"enable_pre_post": false,
"expiry_date": "2026-12-20",
"name": "Crude Oil Dec 2026",
"price_precision": 2,
"product_code": "CL",
"qty_precision": 0,
"symbol": "CLZ6"
},
{
"asset_category": "COMPOSITE",
"contract_month": null,
"enable_pre_post": false,
"expiry_date": null,
"name": "Crude Oil Composite Index",
"price_precision": 4,
"product_code": null,
"qty_precision": 2,
"symbol": "CL_IDX"
}
]
}{
"symbol": "AAPL",
"bid": "345.42",
"bid_qty": "0",
"ask": "345.46",
"ask_qty": "0",
"status": "TRADING",
"time": 1793029498236
}{
"symbol": "AAPL",
"quotes": [
{
"symbol": "AAPL",
"bid": "345.42",
"bid_qty": "0",
"ask": "345.46",
"ask_qty": "0",
"status": "TRADING",
"time": 1793029498236
}
]
}{
"symbol": "AAPL",
"price": "345.46",
"qty": "1",
"side": 0,
"status": "TRADING",
"time": 1793029498081
}{
"symbol": "AAPL",
"prices": [
{
"symbol": "AAPL",
"price": "345.46",
"qty": "1",
"side": 0,
"status": "TRADING",
"time": 1793029498081
}
]
}{
"symbol": "CL_IDX",
"bid": "69.8750",
"bid_qty": "0.00",
"ask": "70.3750",
"ask_qty": "0.00",
"status": "TRADING",
"time": 1793029498236
}{
"symbol": "CL_IDX",
"price": "70.1250",
"qty": "0.00",
"side": 0,
"status": "TRADING",
"time": 1793029498081
}{
"quotes": [
{
"symbol": "AAPL",
"bid": "345.42",
"bid_qty": "0",
"ask": "345.46",
"ask_qty": "0",
"status": "TRADING",
"time": 1793029498236
},
{ "symbol": "EURUSD", "error": "SNAPSHOT_UNAVAILABLE" }
]
}{
"ticks": [
{
"symbol": "AAPL",
"price": "345.46",
"qty": "1",
"side": 0,
"status": "TRADING",
"time": 1793029498081
},
{ "symbol": "EURUSD", "error": "SNAPSHOT_UNAVAILABLE" }
]
}{
"symbol": "AAPL",
"interval": "1m",
"open_time": 1793029380000,
"open": "345.48",
"high": "345.48",
"low": "345.41",
"close": "345.42",
"volume": "12576",
"count": 143
}{
"symbol": "AAPL",
"interval": "1m",
"klines": [
{
"symbol": "AAPL",
"interval": "1m",
"open_time": 1793029380000,
"open": "345.48",
"high": "345.48",
"low": "345.41",
"close": "345.42",
"volume": "12576",
"count": 143
}
]
}{
"symbol": "AAPL",
"timezone": "America/New_York",
"enable_pre_post": true,
"is_halted": false,
"is_24x7": false,
"sessions": [
{
"day_of_week": 1,
"session_type": "PRE",
"start_local_time": "04:00:00",
"end_local_time": "09:30:00"
},
{
"day_of_week": 1,
"session_type": "TRADING",
"start_local_time": "09:30:00",
"end_local_time": "16:00:00"
}
],
"overrides": [
{
"override_date": "2026-11-26",
"session_status": "HOLIDAY_CLOSED",
"start_local_time": "00:00:00",
"end_local_time": "23:59:59",
"name": "Apple"
}
]
}{
"schedules": [
{
"symbol": "AAPL",
"timezone": "America/New_York",
"enable_pre_post": true,
"is_halted": false,
"is_24x7": false,
"sessions": [
{
"day_of_week": 1,
"session_type": "TRADING",
"start_local_time": "09:30:00",
"end_local_time": "16:00:00"
}
],
"overrides": []
},
{ "symbol": "NOPE1", "error": "NOT_FOUND" }
]
}{
"sources": [
{ "source_id": 7, "name": "DATABENTO", "status": "LIVE" },
{ "source_id": 10, "name": "ITICK_STOCK", "status": "LIVE" },
{ "source_id": 11, "name": "ITICK_INDICES", "status": "LIVE" }
]
}綜合指數
綜合指數是平台產生的商品,資產類目為 COMPOSITE。其數值為同一合約品種中未到期、且具有有效持倉量與價格的合約,按持倉量加權成分價格:Σ(持倉量 × 成分價格) / Σ持倉量。成分價格為該成員的最新價;未停牌成員的最新成交超過 last_stale_timeout_ms 未更新時,改以當前 L1 中間價計算;停牌成員則持續採用最後成交價。
期貨合約在商品目錄中提供 product_code、contract_month(YYYY-MM)與 expiry_date(YYYY-MM-DD)。綜合指數本身資產類目為 COMPOSITE,其合約欄位在 JSON 中為 null。
綜合指數的 L1 報價為指示性報價:買價 = 指數值 − 報價偏移,賣價 = 指數值 + 報價偏移,雙邊數量為 0;買賣價會鉗制為買價維持正值、賣價高於買價。指數最新值仍透過一般 tick 通道訂閱,並與其他商品一樣歸檔。
公開 API 客戶可像一般商品一樣使用綜合指數。成分、權重與持倉量僅在營運後台提供給操作員。
WebSocket
兩條通道:quote 提供合成 BBO,tick 提供合成最新價;控制訊框為 JSON 文字,行情推送為二進位 Protobuf MarketFrame 信封,攜帶 channel、symbol 與 L1Quote 或 LastPrice 載荷。
合成買一/賣一、掛單量與市場狀態。
合成最新價、成交量與主動方向;純報價商品由盤口中間價派生。
- 握手必須攜帶 Authorization: Bearer <api_key>;查詢字串中的金鑰一律拒絕。
- subscribe 動作會取代連線目前的訂閱集合,並以 JSON 訊框回覆確認。
- 確認訊框之後,網關會立即推送每個已訂閱商品與通道的最新快照;降級(DEGRADED_NO_SOURCE)或已過期的快照會被跳過,即時推送也永不包含 DEGRADED_NO_SOURCE 訊框。時效判斷中 quote 使用 l1_stale_timeout_ms,tick 使用 last_stale_timeout_ms。
- 網關會定期重新校驗權益;金鑰或訂閱失效時以代碼 1008 關閉連線。
- 瀏覽器 WebSocket 用戶端無法設定 Authorization 標頭;請使用伺服器端用戶端,或由反向代理注入標頭。
curl -s "https://api.marketquote.io/v1/quote/AAPL" \
-H "Authorization: Bearer mq_live_9f2c…" \
-H "Accept: application/json"
{
"symbol": "AAPL",
"bid": "345.42",
"bid_qty": "0",
"ask": "345.46",
"ask_qty": "0",
"status": "TRADING",
"time": 1793029498236
}WebSocket 訊框範例
→ {"action":"subscribe","channels":["quote","tick"],"symbols":["AAPL"]}
← {"type":"subscribed","channels":["quote","tick"],"symbols":["AAPL"],"subscriptions":2}→ {"action":"subscribe","channels":["quote","tick"],"symbols":["AAPL"]}
← {"type":"subscribed","channels":["quote","tick"],"symbols":["AAPL"],"subscriptions":2}
← [binary] quote snapshot for AAPL (pushed immediately after the ack)
← [binary] tick snapshot for AAPL (evaluated per channel)
Snapshots that are DEGRADED_NO_SOURCE or older than the channel freshness
timeout are skipped. Live pushes never include DEGRADED_NO_SOURCE frames.channel: "quote"
symbol: "AAPL"
l1 {
symbol: "AAPL"
bid: "345.42"
bid_qty: "0"
ask: "345.46"
ask_qty: "0"
status: "TRADING"
time: 1793029498236
}channel: "tick"
symbol: "AAPL"
last {
symbol: "AAPL"
price: "345.46"
qty: "1"
side: 0
status: "TRADING"
time: 1793029498081
}← {"type":"error","code":"VALIDATION_FAILED",
"message":"channels: channels 不能为空",
"field_errors":[{"field":"channels","message":"channels 不能为空"}]}→ {"action":"ping"}
← {"type":"pong"}錯誤
錯誤由穩定的 code 與 HTTP 狀態組成;請以 code 作為契約,message 僅供人閱讀。
| 錯誤碼 | HTTP | 說明 |
|---|---|---|
| UNAUTHENTICATED | 401 | 缺少或無效的 API Key。 |
| FORBIDDEN | 403 | 金鑰有效,但訂閱未授予該權限。 |
| NOT_FOUND | 404 | 未知的商品、已退役商品或端點。 |
| VALIDATION_FAILED | 400 | 查詢參數格式錯誤,包含不合法的 from/to 視窗、limit 或 K 線週期。 |
| RATE_LIMITED | 429 | REST 或 WebSocket 速率超限;請以退避重試。 |
| SNAPSHOT_UNAVAILABLE | 503 | 沒有可用的即時快照:缺失、降級(DEGRADED_NO_SOURCE)或已超過該通道的保鮮逾時。 |
| MARKET_DATA_DEPENDENCY_UNAVAILABLE | 503 | 行情依賴暫不可用;請以退避重試。 |
| INTERNAL | 500 | 未預期的伺服器錯誤;聯絡支援時請附上請求 ID。 |
限制
配額是套餐權益的一部分,由網關執行;超限時 API 回傳 429 並附 Retry-After。
| API Key | 每個客戶 1 把 |
| 並行 WebSocket 連線 | 套餐權益 |
| 單連線訂閱數 | 套餐權益 |
| 單次批量商品數 | 50 |
| REST 請求 | 按套餐的每分鐘配額 |
| WebSocket 新建連線 | 按套餐的每分鐘配額 |
| 歷史視窗 | 由伺服器限制的 from/to |
| 每次歷史查詢列數 | 由伺服器限制的筆數 |
狀態
資料源目錄會揭露方案可存取商品所綁定資料源的 LIVE 狀態;官網演示在快照停止刷新時隱藏價格,而不是顯示舊值。
發生營運事件時,請先查看狀態頁與資料源目錄,再開支援工單。
準備好接入了嗎?
建立帳號、選擇套餐,取得你的第一把 API Key。