介面總覽

一個閘道,三種相容協定。把 OpenAI、Anthropic 或 Gemini 用戶端指向 Asale,改掉 base URL 和金鑰,其餘程式碼原封不動。

Asale 閘道同時以三種協定應答。你的用戶端已經會說哪一種,就繼續用哪一種——SDK、請求主體、串流解析全部保留,只改兩行:base URL 和金鑰。

本頁的內容三種協定通用。各自的介面清單與可直接執行的範例見:

Base URL

三種協定的 base URL 截斷深度不同,因為各家用戶端往後串接的路徑不同。用你手上那個 SDK 對應的那一行。

協定Base URL實際請求的介面
OpenAIhttps://gw.asale.ai/v1POST /v1/chat/completions
Anthropichttps://gw.asale.aiPOST /v1/messages
Geminihttps://gw.asale.aiPOST /v1beta/models/{model}:generateContent

gw.asale.ai 是推論閘道;api.asale.ai 是主控台介面(工作階段、錢包、行情),通常不接受 sk-asale- 金鑰,把推論請求送過去只會拿到 404。例外是錢包餘額 API:它只靠金鑰驗證,不需要登入狀態。

驗證

三個請求標頭,各對應一種協定,好讓各家 SDK 不改程式碼就能通過驗證。任一個在任一介面上都有效。

Authorization: Bearer sk-asale-...
x-api-key: sk-asale-...
x-goog-api-key: sk-asale-...

金鑰在 API 金鑰頁面管理:註冊時自動產生一把,之後可以新增、命名、設定有效期、停用而不刪除,副本遺失也能重新檢視。

每個帳號有一把標記為預設的金鑰。它是桌面用戶端買入時寫給各 AI 工具的那一把,與你自己發起的請求無關——後者以你實際送出的那把金鑰驗證。

模型

模型名稱是平台的,不是某一家廠商的型號表。直接問閘道能媒合到什麼:

curl https://gw.asale.ai/v1/models -H "Authorization: Bearer $ASALE_API_KEY"
{
  "object": "list",
  "data": [
    { "id": "claude-sonnet-4-5", "object": "model", "owned_by": "anthropic", "context_length": 200000 }
  ]
}

目錄裡有、但此刻沒人在賣的模型,回傳的是 503 no_supply 而不是 404——名稱是對的,只是這一秒沒有供給。市場頁面可以看到哪些模型有流動性。

串流

伺服器推送事件(SSE),保持各協定原生的事件格式,不做二次封裝:OpenAI 與 Anthropic 用 stream: true,Gemini 用 :streamGenerateContent。現有的串流解析程式碼無需更動。

一個請求要花多少

請求送出前,閘道會依你宣告的 max_tokens 乘以該模型的輸出價凍結一筆預估;回應結束後依真實用量計價,差額立即退回可用餘額。

以下情況不計費:請求發生錯誤、用量回傳為零、你中途斷線。計量細節見用量計費。

錯誤

所有失敗都是同一種 JSON,配上對應的 HTTP 狀態碼:

{
  "error": {
    "message": "insufficient balance",
    "code": "payment_required",
    "key": "errors.wallet.insufficientBalance"
  }
}

請依 code 分支,不要依 message——文案會被翻譯與改寫。

狀態碼code怎麼處理
401unauthorized金鑰缺失、格式不對或不存在。檢查請求標頭與金鑰。
403forbidden金鑰已停用,或帳號被限制交易。
402payment_required到錢包儲值。
429rate_limited退避重試,Retry-After 說明要等多久。
503no_supply這一刻沒人在賣這個模型。稍後重試,或換一個模型。
502upstream承接請求的上游失敗了,可以安全重試。

金鑰過期回傳 401 且 key 為 errors.apiKey.expired,被停用回傳 403 且為 errors.apiKey.disabled——兩者的修復方式不同,所以狀態碼也不同。

頻率限制

每把金鑰各有自己的每分鐘請求數與每分鐘 token 數上限,超過任一項回傳 429 並帶 Retry-After。上限是依金鑰計算的,所以把工作量拆到兩把金鑰上,額度也會跟著拆開。

查餘額

完整說明請見錢包餘額 API。

本頁其餘內容都是 gw.asale.ai 的介面。這一個是 api.asale.ai 的,而且是主控台介面裡唯一一個只靠金鑰驗證、不需要登入狀態的——因為「我還剩多少、這把金鑰花了多少」是一個只握有金鑰的腳本也該能自己問清楚的問題,不該非要借一次登入狀態才能問。

GET https://api.asale.ai/api/v1/me/wallet/balance
Authorization: Bearer sk-asale-...

x-api-key、x-goog-api-key 在這裡同樣有效,跟閘道上一樣。

{
  "balance": 4820000,
  "frozen": 150000,
  "payable": 0,
  "debt": 0,
  "unit": "micro_usdt",
  "recent_consumption": [
    { "task_id": "t_...", "model": "claude-sonnet-4-5", "amount_usdt": 1200, "created_ts": 1760000000 }
  ],
  "recent_consumption_window_hours": 24,
  "api_key": {
    "id": 42,
    "label": "ci-bot",
    "rpm_limit": 60,
    "tpm_limit": 100000,
    "max_ratio_pct": 80,
    "budget_usdt": null,
    "budget_remaining_usdt": null,
    "spent_usdt": 0,
    "calls": 318,
    "in_tokens": 905120,
    "out_tokens": 221004,
    "settled_usdt": 184230,
    "list_usdt": 240310
  }
}
  • balance / frozen / payable / debt 跟錢包頁面上是同一組數字,單位是 micro-USDT。
  • recent_consumption 是這個帳號最近 24 小時內已結算的請求,最多 200 筆——不按這一把金鑰過濾,所以跟你翻這段時間帳號自己的歷史記錄看到的是同一批。
  • api_key 是這把金鑰自己的狀態:設在它上面的限頻、有沒有花費上限,以及它付過的每一筆請求累計下來的總量。

這是給腳本看的一次性快照,不是分頁列表——它回答的是「現在是什麼狀態」,不是「列出我最近 N 次呼叫」。金鑰不存在、過期或被停用時,回報方式跟閘道一樣:401/403,對應上面錯誤表裡的 code。