跳轉至

API 概覽

Sera API 是一個 RESTful API,用於程式化存取 Sera 的交易和帳戶管理功能。

基礎 URL

https://api.testnet.sera.cx/api/v1

內容類型

所有請求和回應使用 JSON:

Content-Type: application/json

身份驗證

API 支援兩種身份驗證方法:

方法 使用場景 Header
API Key 帳戶讀取端點與交易建構輔助端點 Authorization: Bearer {key}:{secret}
EIP-712 簽名 交易寫入、取消、提取與 API Key 管理 包含在請求主體或查詢參數中

詳情請參閱身份驗證。

速率限制

邊緣代理/CDN 也可配置用戶端限流,請以目標環境公布的限制為準。攜帶 API Key 的請求會在應用內按錢包地址限流:

分組 典型端點 限制
read GET /orders、GET /balances、GET /fills 10 req/s
trade POST /orders、POST /swap 5 req/s
cancel POST /orders/cancel、POST /orders/cancel-all 2 req/s
transfer 充值、授權、提現、轉帳與交易廣播輔助端點 2 req/s
quote POST /swap/quote、POST /swap/quote/batch、Exact Output 報價 50 條報價/秒

介面訪問範圍

客戶介面可供外部整合,呼叫時仍須滿足各端點的 API Key、錢包簽名或已簽名交易要求。表中的“無”僅表示無需交易 API Key,不代表無限制訪問;憑據校驗仍須提供待校驗的憑據。功能和訪問入口以目標環境實際開放的範圍為準。

運維探針供部署、負載均衡和監控使用,應透過受限的運維入口訪問,不屬於客戶交易流程。文件記錄這些路徑不代表要求將其開放到公網。

端點

系統

方法 路徑 驗證 說明
GET /health 無 服務健康、executor_id 與簽名就緒狀態
GET /system/time 無 伺服器時間戳
GET /tokens 無 代幣註冊表
GET /markets 無 活躍市場中繼資料
GET /fx/rate 無 ISO 貨幣對的聚合匯率與 24 小時漲跌幅
GET /permit/metadata API Key EIP-2612 permit domain、nonce 與額度探測
GET /config 無 公共鏈上與合約啟動配置
POST /verify-signature 無 驗證 EIP-712 訂單簽名

交易

方法 路徑 驗證 說明
POST /swap/quote 無 取得兌換報價
POST /swap/quote/batch 無 最多 50 條獨立報價
POST /orders/preview 無 規範數值與 EIP-712 Order 預覽
POST /swap EIP-712 執行已簽署的兌換
POST /orders EIP-712 掛限價單
POST /orders/cancel EIP-712 取消訂單
POST /orders/cancel-all API Key + EIP-712 取消所有未完成訂單
POST /orders/vl/batch EIP-712 提交虛擬流動性批次訂單
POST /orders/vl/cancel EIP-712 取消虛擬流動性批次

帳戶

方法 路徑 驗證 說明
GET /orders/{order_id} API Key 取得訂單狀態
GET /orders API Key 列出訂單
GET /fills/{order_id} API Key 取得單筆訂單成交明細
GET /fills API Key 取得帳戶範圍成交明細
GET /balances API Key 取得帳戶餘額
POST /balances/sync API Key 請求餘額同步
POST /approve API Key 建構未簽名的 ERC-20 approve(spender, amount) 交易
POST /deposit API Key 建構未簽名的 depositFund 或 depositFundWithPermit 交易
POST /tx/send API Key 廣播已簽名的授權/存款交易
POST /withdraw EIP-712;API Key 可選 取得提取共簽名
POST /withdraw/build 使用者及執行器簽名;API Key 可選 建構未簽名的提取交易
POST /withdraw/send 已簽名交易;API Key 可選 廣播已簽名的提取交易
POST /transfer API Key 建構未簽名的 ERC-20 轉帳
POST /transfer/send API Key 廣播已簽名的轉帳

API Key 管理

方法 路徑 驗證 說明
POST /api-keys EIP-712 建立 API key
GET /api-keys EIP-712 列出 API key(帶簽章的查詢參數)
POST /api-keys/list EIP-712 列出 API key(帶簽章的 JSON 主體)
DELETE /api-keys EIP-712 撤銷 API key(帶簽章的查詢參數)
POST /api-keys/revoke EIP-712 撤銷 API key(帶簽章的 JSON 主體)
POST /api-keys/revoke-all EIP-712 以單一簽章批次撤銷該錢包下所有有效 API key
POST /api-keys/self-revoke API Key 以目前憑證撤銷該 API key 自身
POST /api-keys/verify 請求體中的 Key/Secret 校驗請求體中的 API Key/Secret 對

其他 API 版本與服務

方法 完整路徑 認證 參考
POST /api/v2/orders EIP-712 整數金額 API
GET /api/v2/orders/{order_id} API Key 整數金額 API
GET /api/v2/orders API Key 整數金額 API
GET /api/v2/fills/{order_id} API Key 整數金額 API
GET /api/v2/fills API Key 整數金額 API
GET /api/v2/balances API Key 整數金額 API
POST /api/v2/balances/sync API Key 請求餘額同步
POST /api/v1/swap/exact-output/quote 無 Exact Output
POST /api/v1/swap/exact-output EIP-712 Exact Output
GET /api/v1/swap/exact-output/{quote_uuid} API Key Exact Output
GET /api/v1/swap/exact-output API Key Exact Output,使用 quote_uuid 查詢參數

v1 與 v2 並存,v2 的金額、狀態解釋和分頁方式不同,請使用以上完整版本路徑。地址篩查 API 是獨立服務,有自己的主機與回應契約。系統端點還介紹 GET /api/v1/livez、/api/v1/warmz、/api/v1/readyz、/api/v1/policy-readyz、/api/v1/traffic-readyz、/api/v1/screening/status。

運維探針

以下端點供運維使用。程式碼中未要求交易 API Key,部署入口應另行限制訪問;不要將“無 API Key”理解為已具備公網訪問保護。

方法 路徑 認證 說明
GET /livez 無 進程存活
GET /warmz 無 預熱依賴狀態
GET /readyz 無 策略就緒兼容別名
GET /policy-readyz 無 交易與篩查策略就緒
GET /traffic-readyz 無 流量服務就緒
GET /screening/status 無 篩查服務狀態,不查詢具體地址

錯誤回應

多數錯誤回傳包含 detail 欄位的 JSON 主體:

{
  "detail": "Human-readable error message"
}

多數處理器 5xx 故障回傳 503、{"detail":"Service temporarily unavailable; please retry"} 和 Retry-After: 1。啓動准入可能回傳不同詳情。結構化錯誤和安全重試請參閱下方客戶端處理說明。

狀態碼

代碼 含義
200 成功
202 已接受;執行或餘額同步待確認
201 資源已建立
400 請求無效(參數錯誤、簽章不符)
401 身份驗證失敗
403 禁止存取(存取其他使用者的資料)
404 資源未找到
409 衝突(重複簽章、自成交拒絕等)
410 已過期(報價過期、已消費或不存在)
413 整個請求體超過部署上限
422 驗證失敗
429 觸發限速或取消冷卻
503 服務暫時不可用;請依 Retry-After 重試

程式碼範例

import requests

# 公共端點
tokens = requests.get("https://api.testnet.sera.cx/api/v1/tokens").json()

# 驗證端點
headers = {"Authorization": "Bearer sera_abc123:secret456"}
orders = requests.get(
    "https://api.testnet.sera.cx/api/v1/orders",
    params={"owner_address": "0x..."},
    headers=headers,
).json()
// 公共端點(無需驗證)
const tokens = await fetch("https://api.testnet.sera.cx/api/v1/tokens")
  .then(r => r.json());

// 驗證端點(API key)
const orders = await fetch(
  "https://api.testnet.sera.cx/api/v1/orders?owner_address=0x...",
  { headers: { "Authorization": "Bearer sera_abc123:secret456" } },
).then(r => r.json());
# 公共端點
curl https://api.testnet.sera.cx/api/v1/tokens

# 驗證端點
curl -H "Authorization: Bearer sera_abc123:secret456" \
  "https://api.testnet.sera.cx/api/v1/orders?owner_address=0x..."

客戶端處理說明

報價、下單等端點接入應用層公共限流;生產類環境要求啟用其 429 拒絕行為。不能據此推斷每條匿名端點都使用相同限額。批次報價每條消耗一個額度,不是每個 HTTP 請求只消耗一個。API Key 錢包限額仍適用。返回 X-RateLimit-Limit、X-RateLimit-Remaining、Retry-After 時請使用這些值。

多數處理器 5xx 會被替換爲通用 503 和 Retry-After: 1。緩存預熱期間,啓動准入可能回傳不同的 503 detail。X-Sera-Retry-Safe: true 明確標識部分准入前失敗;沒有該標記時,不能推斷寫入未生效。替換結果未知的執行前,先按訂單/報價身份查詢。

錯誤欄位 示例 / 客戶端處理
detail.error_code INVALID_PRECISION、INVALID_DECIMAL_FORMAT:使用預覽並簽署規範值
detail.error_code DUPLICATE_ORDER_ID:查詢該 ID,僅爲獨立新訂單生成新 ID
detail.error_code WITHDRAW_UNAVAILABLE:刷新餘額和訂單
detail.error_code COMPLIANCE_BLOCKED:受保護操作被拒絕
detail.code 報價特定錯誤,例如 AMOUNT_BELOW_MIN 和 Exact Output 衝突
頂層 error_code,同時 ok:false 訂單預覽業務拒絕
error.code 獨立篩查服務的錯誤

不能假定 detail 總是字串,也不能假定每個 422 都有 Pydantic 欄位詳情。請求模型錯誤使用 { "detail": "Invalid request" }。新增流程還使用 202(執行待確認)、304(市場回應未變化,無回應體)、406(編碼不可接受)。未知錯誤碼仍應視爲失敗,並保留請求 ID 供排查。

示例用於說明請求/回應結構。實際調用前請替換佔位地址和歷史時間戳,從 /config 讀取當前鏈與合約信息,從 /system/time 讀取當前秒數。文檔列出某條路徑,不代表每個部署都已啓用該功能。

請求體大小

交易 API 對整個請求體預設限制 64 KiB(65,536 位元組),以目標部署設定為準;串流請求也受此限制。批量筆數和單個簽名長度符合要求,不代表合計大小符合要求。超限回傳 HTTP 413、{"detail":"Request body too large"};應縮小請求,不要原樣反覆重試。篩查服務有獨立的請求體與錯誤規則,其協定錯誤及 429 不一定帶 schema_version、error.retryable,不能把這兩個欄位作為所有錯誤的必填項。