介面總覽
一個閘道,三種相容協定。把 OpenAI、Anthropic 或 Gemini 用戶端指向 Asale,改掉 base URL 和金鑰,其餘程式碼原封不動。
Asale 閘道同時以三種協定應答。你的用戶端已經會說哪一種,就繼續用哪一種——SDK、請求主體、串流解析全部保留,只改兩行:base URL 和金鑰。
本頁的內容三種協定通用。各自的介面清單與可直接執行的範例見:
- OpenAI 相容 ——
chat/completions、responses - Anthropic 相容 ——
messages - Gemini 相容 ——
generateContent
Base URL
三種協定的 base URL 截斷深度不同,因為各家用戶端往後串接的路徑不同。用你手上那個 SDK 對應的那一行。
| 協定 | Base URL | 實際請求的介面 |
|---|---|---|
| OpenAI | https://gw.asale.ai/v1 | POST /v1/chat/completions |
| Anthropic | https://gw.asale.ai | POST /v1/messages |
| Gemini | https://gw.asale.ai | POST /v1beta/models/{model}:generateContent |
gw.asale.ai 是推論閘道;api.asale.ai 是主控台介面(工作階段、錢包、行情),它不接受 sk-asale- 金鑰,把推論請求送過去只會拿到 404。
驗證
三個請求標頭,各對應一種協定,好讓各家 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 | 怎麼處理 |
|---|---|---|
| 401 | unauthorized | 金鑰缺失、格式不對或不存在。檢查請求標頭與金鑰。 |
| 403 | forbidden | 金鑰已停用,或帳號被限制交易。 |
| 402 | payment_required | 到錢包儲值。 |
| 429 | rate_limited | 退避重試,Retry-After 說明要等多久。 |
| 503 | no_supply | 這一刻沒人在賣這個模型。稍後重試,或換一個模型。 |
| 502 | upstream | 承接請求的上游失敗了,可以安全重試。 |
金鑰過期回傳 401 且 key 為 errors.apiKey.expired,被停用回傳 403 且為 errors.apiKey.disabled——兩者的修復方式不同,所以狀態碼也不同。
頻率限制
每把金鑰各有自己的每分鐘請求數與每分鐘 token 數上限,超過任一項回傳 429 並帶 Retry-After。上限是依金鑰計算的,所以把工作量拆到兩把金鑰上,額度也會跟著拆開。