SUB&SUB · 文件
語言
佈景

API 參考

SUB&SUB 在 https://api.subnsub.com/v1 提供多供應商中轉。OpenAI 用戶端打 /v1/chat/completions;Anthropic 用戶端打 /v1/messages。同一把 sk-cf-... Key 兩邊通用 —— 在請求主體中挑選模型,中轉就會挑選對應的上游。

服務可用範圍

僅限現有帳戶 API 存取目前僅向在 2026 年 6 月 8 日(北京時間)之前建立的帳戶開放。新註冊使用者可以使用統一帳戶及 SUB&SUB Tools,但不能進入 API 控制台、建立 API Key、儲值 API 餘額或呼叫中轉服務。重新開放 API 註冊後,我們會更新本節。

快速上手

對於已開通 API 的現有帳戶,你需要準備三項內容:

  1. Base URLhttps://api.subnsub.com/v1(OpenAI 用戶端)或 https://api.subnsub.com(Anthropic 用戶端 —— SDK 會自行附加 /v1/messages
  2. API Key:從 主控台 發行的 sk-cf-...
  3. 模型16 個支援的模型之一,例如 gpt-5.4-miniclaude-sonnet-5

驗證

每個請求都必須帶上 Authorization: Bearer sk-cf-... 標頭。Key 從主控台發行,並以 SHA-256 雜湊儲存 —— 一旦離開建立畫面,明文就永遠消失,所以請立即儲存。

提示 請為每個整合(聊天機器人、IDE 外掛、批次工作)各自產生一把 Key。在主控台撤銷外洩的 Key 會在數秒內生效。

端點

穩定的公共介面範圍見下文及機器可讀的 OpenAPI 3.1 文件。未在這裡列出的欄位可能會透傳給上游,但不會自動成為 SUB&SUB 的相容性承諾。

POST /v1/chat/completions

POST/v1/chat/completions

送出一個 chat completion 請求。請求格式與 OpenAI Chat Completions API 相同 —— OpenAI SDK 無需修改即可運作。

參數型別說明
modelstring已驗證模型 ID 之一。
messagesarray對話歷史。每一項:{role, content},其中 rolesystem / user / assistant
streamboolean若為 true,回應會以 SSE 區塊送出。見 串流
stream_optionsobject選用。中轉一律對上游強制 {include_usage: true},讓最後一個區塊帶上 token 用量區塊 —— 覆寫它不會有任何效果。
max_tokensinteger限制 completion 長度。預設為模型的最大值。
temperaturenumber0 – 2。越高 = 越隨機。

POST /v1/responses

POST/v1/responses

OpenAI Responses API —— OpenAI 較新的請求格式(client.responses.create(...))。支援目錄中的所有模型:gpt-* 原生支援,claude-* 則透過與 chat/completions 相同的相容橋接層。計費方式相同:輸入與輸出 token 均按模型級距單價計費。

參數型別說明
modelstring任一目錄模型 ID
inputstring | array提示詞,可以是純文字,也可以是 Responses API 定義的結構化項目清單。
max_output_tokensinteger限制回應總長度(推理與可見輸出合計)。
reasoningobject{"effort": "..."},可用值與 reasoning_effort 相同,共五級。
streamboolean設為 true 時,傳回標準 Responses SSE 事件串流:response.createdresponse.output_text.delta、…、response.completed
backgroundboolean不支援。background: true 會傳回 400 unsupported_background_mode;中轉僅支援同步請求。
注意 :online 聯網搜尋後綴對此端點無效:後綴會被移除,但不會注入搜尋內容(查詢詞取自 messages,而 Responses 請求不含此欄位)。如需聯網搜尋,請使用 /v1/chat/completions/v1/messages

可直接執行的 Responses 範例:

curl https://api.subnsub.com/v1/responses \
  -H "Authorization: Bearer sk-cf-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.4-mini",
    "input": "Explain exponential backoff in two sentences."
  }'

POST /v1/messages

POST/v1/messages

claude-* 模型使用的 Anthropic 原生端點 —— Anthropic SDK(anthropic-sdk-python@anthropic-ai/sdkclaude-code)無需修改即可對此路徑運作。將你的 base URL 指向 https://api.subnsub.com,並透過 x-api-key 標頭驗證(若你的用戶端偏好,Authorization-Bearer 形式也可以)。

參數型別說明
modelstring一個 claude-* 模型 ID(見 可用模型)。在此傳入 OpenAI 模型會回傳 400 invalid_request_error
max_tokensintegerAnthropic 要求必填 —— 限制 assistant 回覆長度。
messagesarray對話歷史,Anthropic 格式:{role, content},其中 roleuser / assistant
streamboolean若為 true,回傳標準的 Anthropic SSE 事件序列:message_startcontent_block_deltamessage_deltamessage_stop
thinkingobject原樣轉送給 Anthropic。支援時請使用 {"type":"adaptive"};Fable 5 即使省略此欄位,也會始終啟用自適應思考。不存在合成的 -thinking 模型 ID。
cache_controlobject支援 prompt caching。快取寫入 token 以 1.25× 計費,快取讀取 token 以該級距輸入價的 0.10× 計費。
注意 Claude 請求由 Anthropic 官方帳戶直接提供服務。請使用下方列出的正確官方模型 ID。

可直接執行的 Anthropic Messages 範例:

curl https://api.subnsub.com/v1/messages \
  -H "x-api-key: sk-cf-xxxxxxxxxxxx" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

POST /v1/messages/count_tokens

POST/v1/messages/count_tokens

在傳送 Anthropic 格式的提示詞前計算 token 數。請使用與 /v1/messages 相同的 x-api-keyanthropic-version、model、system、messages 和 tools 欄位。此介面不計費。:online 後綴會被移除,但不會取得或計入搜尋結果。

curl https://api.subnsub.com/v1/messages/count_tokens \
  -H "x-api-key: sk-cf-xxxxxxxxxxxx" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "messages": [{"role": "user", "content": "Count this prompt."}]
  }'

GET /v1/models

GET/v1/models

列出你實際可用的模型。中轉會對兩類上游執行健康檢查,並傳回 16 個已驗證的公開 ID;POST 端點執行的是同一份白名單,因此清單不會顯示呼叫時必然傳回 400 的模型。若上游目錄無法使用,此端點會傳回 502 models_unreachable,而不是容易誤解的空清單。

# sample response (truncated)
{
  "object": "list",
  "data": [
    { "id": "gpt-5.4-mini",      "type": "model", ... },
    { "id": "gpt-5.4",           "type": "model", ... },
    { "id": "claude-sonnet-5",     "type": "model", ... },
    { "id": "claude-fable-5",      "type": "model", ... },
    ...
  ]
}

相容性約定

相容 OpenAI 並不表示每個上游模型的所有欄位都能在每條路由上得到保證。我們將支援範圍分為三級:

狀態細節
已記錄且穩定透過上述四個介面產生文字;同步和串流回應;文件列明的 reasoning 控制項;Anthropic 提示快取;Chat Completions 和 Messages 的 :online;身分驗證、用量計量及文件列明的錯誤格式。
透傳(取決於模型)工具/函式呼叫、strict tools、結構化輸出/JSON Schema、取樣控制、停止序列、包含圖片或文件的多段內容,以及模型的上下文/輸出限制。邊緣層會在不做本機驗證的情況下透傳這些欄位,但上游支援情況和準確回應格式可能因模型及協定而異。投入正式環境前請測試你的確切模型和 payload;我們不承諾跨供應商正規化。
暫不提供背景 Responses 任務;Responses 的 :online;OpenAI 的圖片生成、Audio、Realtime、Batch、Files、Embeddings 和 Moderation API;合成的 Claude -thinking 別名;以及 OpenAI 的 minimal reasoning effort。
提示 請將 openapi.json 與本頁共同視為支援範圍約定。上游目前接受的欄位以後仍可能被撤回,並不會因此成為 SUB&SUB 的永久保證。

可用模型

共有兩類上游:7 個 OpenAI 模型路由到共享的 ChatGPT 級帳戶,9 個 Claude 模型由 Anthropic 官方帳戶提供服務。每 token 單價取決於級距(見定價),同一把 Key 兩邊通用。

OpenAI

模型 ID家族級距備註
gpt-5.4-mini GPT-5.4Mini 快速又便宜。聊天與寫程式的推薦預設。
gpt-5.4 GPT-5.4Standard完整尺寸的 GPT-5.4 —— 較慢,但推理更強。
gpt-5.4-2026-03-05GPT-5.4Standardgpt-5.4 的日期標記快照。
gpt-5.5 GPT-5.5Premium 更新的旗艦。
gpt-5.6-luna GPT-5.6Luna 輕量級 GPT-5.6,定位介於 Mini 與 Standard 之間。
gpt-5.6-terra GPT-5.6Standard中型 GPT-5.6,費率與 gpt-5.4 相同。
gpt-5.6-sol GPT-5.6Premium 最高級 GPT-5.6,費率與 gpt-5.5 相同。

Anthropic

模型 ID家族級距備註
claude-fable-5 Fable 5 Fable Anthropic 已廣泛發布的最強模型,始終啟用自適應思考。
claude-haiku-4-5-20251001 Haiku 4.5 Mini 最小的 Claude —— 與 gpt-5.4-mini 同樣的每 token 費率。
claude-sonnet-4-5-20250929 Sonnet 4.5 Standard中階 Claude —— 與 gpt-5.4 同樣的每 token 費率。
claude-sonnet-4-6 Sonnet 4.6 Standard更新的 Sonnet 調校 —— Standard 級距,與 sonnet-4.5 同費率。
claude-sonnet-5 Sonnet 5 Sonnet 5 Intro最新 Sonnet;優惠價有效至 2026 年 8 月 31 日。
claude-opus-4-5-20251101 Opus 4.5 Ultra 前沿 Claude。以 Anthropic 的標價計費 —— 不加價(見 定價)。
claude-opus-4-6 Opus 4.6 Ultra 更新的 Opus 調校。
claude-opus-4-7 Opus 4.7 Ultra 前一個 Opus 快照。
claude-opus-4-8 Opus 4.8 Ultra 最新的 Opus 快照。
注意 Claude 目錄使用 Anthropic 官方模型 ID,並支援提示詞快取:快取寫入按級距輸入價的 1.25 倍計費,快取讀取按 0.10 倍計費(見定價)。
Fable 拒答 Fable 5 的安全分類器可能傳回 HTTP 200stop_reason: "refusal" 與空內容陣列。用戶端應依據 stop_reason 分支處理,不能只看 HTTP 狀態,並可改用 claude-opus-4-8 重試。透過 OpenAI 協定端點呼叫時,相同結果會表示為 finish_reason: "content_filter"(chat/completions),或 status: "incomplete"incomplete_details.reason: "content_filter"(responses)。提示詞階段的拒答不會扣除餘額;已經輸出部分內容後在串流過程中拒答,則照常計費。
不可用 以下模型無法使用:已停用的 OpenAI ID(gpt-5.2*gpt-5.3-codex*)、不帶後綴的 gpt-5.6 別名(請改用上方具名版本)、OpenAI Pro/影像/音訊/即時版本、點號格式 ID(如 claude-sonnet-4.5),以及合成的 -thinking 模型 ID。請使用上方正確 ID;Claude 的思考功能請使用 Anthropic 原生 thinking 欄位。

推理強度

上方所有 OpenAI 模型都屬於推理模型:後端可以在輸出可見內容前使用更多或更少的「思考」token。在 OpenAI /v1/chat/completions 請求主體中設定 reasoning_effort(或在 /v1/responses 中設定 reasoning: {"effort": ...})即可控制預算。Claude 請使用 Anthropic 原生的 thinkingoutput_config.effort 欄位,詳見 /v1/messages。OpenAI 模型均接受以下五級:

行為
none 不思考 —— 直接給答案。最便宜也最快。
low 一次簡短的推理。
medium 不傳此欄位時的預設。均衡。
high 更深入的推理。建議用於非平凡的寫程式 / 多步驟問題。
xhigh 最大強度。最慢也最貴;保留給你真正需要的困難分析。
# Two equivalent forms — pick whichever your SDK supports
{
  "model": "gpt-5.4-mini",
  "reasoning_effort": "high",
  "messages": [ ... ]
}

{
  "model": "gpt-5.5",
  "reasoning": { "effort": "xhigh" },
  "messages": [ ... ]
}
費用 思考 token 在計費上算作輸出 token —— 強度越高 = 輸出 token 越多 = 同一個提示的帳單越大。每 token 費率不會改變。
注意 OpenAI 協定也定義了 'minimal',但本中轉上的模型會拒絕它:「'minimal' is not supported with this model」。請固定使用上面五個值。

串流

設定 "stream": true 以接收 Server-Sent Events。最後一個區塊會帶上 usage 區塊(我們對上游強制 stream_options.include_usage,讓 token 計數一律輸出),接著一個字面的 data: [DONE] 關閉串流。

# Streaming format (line by line)
data: {"id":"resp_...","choices":[{"delta":{"content":"Hi"}}]}

data: {"id":"resp_...","choices":[{"delta":{"content":"!"}}]}

data: {"id":"resp_...","choices":[],"usage":{"prompt_tokens":18,"completion_tokens":11,"total_tokens":29}}

data: [DONE]

可直接執行的 Python 串流範例:

from openai import OpenAI

client = OpenAI(
    api_key="sk-cf-xxxxxxxxxxxx",
    base_url="https://api.subnsub.com/v1",
)

stream = client.chat.completions.create(
    model="gpt-5.4-mini",
    messages=[{"role": "user", "content": "Hello"}],
    stream=True,
)
for chunk in stream:
    text = chunk.choices[0].delta.content if chunk.choices else None
    if text:
        print(text, end="", flush=True)

在端點所支援的任何模型 ID 後附加 :online,中轉就會在轉發給模型之前先執行一次網路搜尋,把結果預先附加到對話中,讓答案以最新資料為基礎。此後綴在 /v1/chat/completions/v1/messages 上皆可運作(後者仍需要 claude-* 基底);不需要任何搜尋專屬的請求欄位。

# Same call as before — just :online on the model
curl https://api.subnsub.com/v1/chat/completions \
  -H "Authorization: Bearer sk-cf-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.4-mini:online",
    "messages": [
      {"role": "user", "content": "What did Anthropic ship this week?"}
    ]
  }'

運作方式:中轉去掉 :online,取最近一則使用者訊息作為查詢(上限 400 個字元),呼叫 Tavily 取得至多 3 筆結果(可取得時附帶擷取的頁面文字),外加一份選用的 Tavily 生成摘要,然後在送出請求到上游之前,把它們以明確界定的 <search_results> 區塊預先附加到同一個使用者回合上。搜尋呼叫有 8 秒逾時。結果是刻意注入到 user 角色 —— 絕不放進系統提示 —— 如此一來不受信任的片段就無法被提升為系統優先等級的指令。

<search_results> 區塊長這樣。它前面有一行指示,告訴模型把這個區塊視為不受信任的外部資料,並以編號項目在行內引用:

<search_results query="What did Anthropic ship this week?" retrieved="2026-05-21">
Summary: <short LLM-generated synthesis of the result set>

[1] Anthropic launches Opus 4.8
URL: https://www.anthropic.com/news/opus-4-8
<extracted page text, or short snippet if extraction failed — up to ~2000 chars>

[2] ...
</search_results>
行為細節
費用目前不另外收費 —— 你只付模型的正常每 token 費率;搜尋呼叫由中轉吸收。注入的 <search_results> 區塊確實會算作輸入 token,所以可預期比同樣問題不加 :online 時有更高的提示 token 帳單。
失敗模式軟性。若 Tavily 逾時或出錯,請求會在沒有搜尋脈絡的情況下繼續送往模型(你仍會得到答案,只是沒有基礎依據)。唯一的硬性失敗是當中轉根本未設定搜尋時的 503 search_unavailable
count_tokens/v1/messages/count_tokens 會去掉後綴但絕不呼叫 Tavily —— 計數反映的是你原始的提示,而非增補後的版本。
多回合只有最後一個使用者回合會被查詢與增補;先前的回合不受影響。要再次搜尋,請在模型仍帶 :online 的情況下送出一則新的使用者訊息。

何時使用 :online

中轉每個請求只做一次 Tavily 呼叫並注入結果 —— 它不是一個能自主行動的搜尋迴圈。模型不會像 Perplexity Sonar 或 ChatGPT 瀏覽工具那樣,根據看到的內容自行決定重新搜尋。請圍繞這個限制來規劃:

適合不適合
時效性事實(新聞、價格、版本號、發行日期)不在公開網路上的私有或貼上的程式碼 —— 只會增加提示雜訊而沒有依據
尋找官方文件或公告數學、推理、翻譯、創意寫作 —— 沒有可依據的對象
任何你原本會用 Google 查證的事情已在訓練資料中的穩定知識(「什麼是二元樹」)

把最後一則使用者訊息寫成一個可獨立成立的搜尋查詢。搜尋是針對你最近一個使用者回合的字面文字執行的(上限 400 字元),所以像 「那最新版本呢?」 這類對話式追問,會變成沒有脈絡的無用查詢。在多回合對話中,加上 :online 時請重述主題 —— 例如 「Anthropic Python SDK 的最新版本」,而不是 「最新的那個」

對於需要多步驟綜合的問題(比較對照、深度研究),請把它們拆成多個回合,並對每個回合加上 :online。模型會讀取每個回合的最新結果;你手動引導下一個查詢。請注意注入的 <search_results> 區塊只會送往上游 —— 它不會回傳給你的用戶端,也不會保留到下一個請求,所以若後續回合需要依賴先前來源的細節,請要求模型在其可見回覆中摘要它們。不支援一次到位的研究模式。

提示 搭配高推理強度(reasoning_effort: "high"),讓模型真正權衡回傳的來源,而不是只仰賴第一筆結果。注入的指示會要求模型在行內以 [1][2] 引用編號來源,所以輸出通常會帶有這類引用 —— 不過模型並不嚴格受該格式約束。

錯誤

外層信封取決於你呼叫的是哪個端點 —— 中轉會以符合呼叫端 SDK 的協定回傳錯誤,而上游錯誤會原樣傳遞。

OpenAI 路徑/v1/chat/completions/v1/responses/v1/models)—— OpenAI 信封:

{ "error": { "message": "...", "type": "...", "code": "..." } }

Anthropic 路徑/v1/messages/v1/messages/count_tokens)—— Anthropic 信封:

{ "type": "error", "error": { "type": "...", "message": "..." } }

Anthropic 信封使用不同的結構 —— 沒有 code 欄位,而判別用的 type: "error" 位於最上層(由內層的 error.type 給出類別,例如 authentication_errorinvalid_request_errorpermission_errorapi_error)。Anthropic SDK 已能解析這個結構;原生的 OpenAI SDK 錯誤處理器則不行,所以請用 Anthropic SDK 呼叫 /v1/messages(或直接做原始 HTTP)。

狀態碼在兩種協定間都是標準的 HTTP 代碼:

狀態OpenAI code / Anthropic error.type意義
401invalid_api_key / authentication_error缺少或未知的 sk-cf-... Key。
402insufficient_balance / permission_error帳戶餘額為負。請在 主控台帳單分頁 儲值。
403key_revoked / permission_error該 Key 已被撤銷。
403account_closed / permission_error此帳戶未開通 API 權限:2026 年 6 月 8 日服務截止日期之後註冊的帳戶不包含 API 服務。
400model_not_available / invalid_request_error你送出的 model 不在已驗證目錄中,或對該端點而言錯誤(例如在 /v1/messages 上用了 OpenAI 模型)—— 請查看 可用模型
400unsupported_background_mode / —/v1/responses 中使用 background: true;中轉僅支援同步請求。僅適用於 OpenAI 回應格式。
429rate_limit_exceeded / rate_limit_error共享上游容量暫時受到限流。如有 retry-after,請遵循該值,然後使用帶隨機抖動的指數退避重試。
503目前沒有任何上游帳號能服務該請求 —— 通常是短暫的池範圍速率限制時段,稍候重試即可。
503search_unavailable / api_error你用了 :online,但此中轉未設定網路搜尋。見 網路搜尋
502upstream_unreachable / api_error中轉無法連到後端。請在短暫退避後重試。
500server_error / api_error中轉服務在聯絡上游之前或之後失敗。僅在操作可以安全重複時重試;否則請先查看用量記錄。

重試與可靠性

請限制重試次數。中轉服務使用共享上游容量,生成請求不具備冪等性。

定價與帳單

按量付費,以微美元(micro)按 token 計費(1 micro = $0.000001 = 一分錢的 1/10,000),以準確追蹤不到一分錢的請求。費率以每 1M tokens 計、依級距區分 —— 見 模型表 了解各模型對應到哪個級距。

級距模型輸入 / 1M輸出 / 1M
Mini gpt-5.4-mini, claude-haiku-4-5-20251001 $0.20$1.60
Luna gpt-5.6-luna $0.30$2.40
Standardgpt-5.4, gpt-5.4-2026-03-05, gpt-5.6-terra, claude-sonnet-4-5-20250929, claude-sonnet-4-6$0.75$6.00
Premium gpt-5.5, gpt-5.6-sol $1.10$8.80
Sonnet 5 Introclaude-sonnet-5 $2.00$10.00
Ultra claude-opus-4-5-20251101, claude-opus-4-6, claude-opus-4-7, claude-opus-4-8$5.00$25.00
Fable claude-fable-5 $10.00$50.00

Fable 與 Ultra 級距的費率與 Anthropic 公布的標價一致。Sonnet 5 在 2026 年 8 月 31 日前採用 Anthropic 的 $2/$10 優惠價;該日期之後公布的標準價為 $3/$15。其餘級距由共享訂閱資源支援,因此低於上游標價。

推理 token(即在 OpenAI 中設定 reasoning_effort,或在 Claude 中使用 Anthropic 原生 thinking 欄位)按模型級距單價計為輸出 token。高推理強度沒有額外附加費,但深度推理請求可能輕易產生無推理請求 10–50 倍的輸出 token,因此費用也會相應增加。

Anthropic prompt caching 以獨立明細計費:快取寫入為該級距輸入價的 1.25×快取讀取0.10×。所以一次 haiku-4.5 快取命中的成本是 0.20 × 0.10 = $0.02 per 1M tokens,一次 sonnet-4.5 快取命中的成本是 0.75 × 0.10 = $0.075 per 1M tokens。每筆請求的帳單紀錄都會單列快取 token,主控台可查看明細。

餘額會在每個請求回傳時即時扣除 —— 對串流請求而言,結算會在 [DONE] 區塊落地後執行。在 /console#billing 查看你的即時餘額與每個請求的結算。

儲值 主控台支援 Stripe Checkout —— 信用卡、Link、Alipay、WeChat Pay。Credit 永不過期。

速率限制

目前沒有每把 Key 的速率限制。共享的上游容量與供應方伺服器端的節流仍會適用;若你碰上這些,中轉會回傳 429 並附帶 retry-after 標頭。每把 Key 的 RPM / TPM 限制已在規劃中。

狀態與支援

文件最後審核日期:2026 年 7 月 14 日。