BazaarLink 文件
BazaarLink 是台灣的統一 AI API 閘道器 — 透過單一、與 OpenAI 相容的 API 端點,提供對 OpenAI、Anthropic、Google、Meta 等數百個模型的存取。
Read https://bazaarlink.ai/skill.md and follow the instructions to integrate BazaarLink into your app.收費標準
BazaarLink 的模型用量採零加成計價(與上游供應商官方牌價相同);平台費用於「加值(入金)」時收取:10% 交易費,台幣渠道另計 5% 營業稅。以美元記帳、提供台幣報價與電子統一發票。支援自助式 pay as you go 儲值,企業亦可洽談月結帳務(Net-30,可議)。
運作方式
- 消耗(扣款):每一次 API 呼叫按實際 token 用量,以上游供應商的官方美元牌價從您的帳戶餘額扣款;模型零加成、消耗端不再加收任何費用。
- 充值(入金):以當下「台幣兌美元即時賣出匯率」將新台幣換算成美元存入餘額;入金時收取 10% 交易費。
- • 付款方式與各渠道手續費:以即時結帳頁顯示為準。
- • 符合資格的台幣渠道:適用營業稅與台灣電子統一發票條件會在付款前顯示。
- • 銀行電匯:大額或企業儲值請聯繫我們安排電匯與客製發票。
- 發票:以 OEN(信用卡)儲值會直接開立台灣電子統一發票並寄送到您的 Email,可填統編。需要採購或月結的公司請聯絡業務(Net-30 可議)。
關於匯率
外幣換算採即時匯率;月結以報帳(結算)時匯率為準,儲值入金則以入金當下匯率換算為帳戶餘額。匯率與時間隨帳務留存以供查核。
失敗請求不收費(Zero Completion Insurance)
如果上游請求失敗,而且沒有可結算的用量資料,BazaarLink 會自動退回整筆預扣款。就算串流已經開始、途中才中斷,該次仍扣款 0 美元。
- 上游無法連線、拒絕請求,或沒有回傳可用結果
- 串流在收到最終用量資料前中斷,即使先前已回傳部分內容
- 回應沒有 usage,或 usage 是所有數值皆為 0 的空資料
output tokens 為 0,不代表一定免費
usage.cost 是此請求收取的美元金額。即使 output tokens 為 0,input tokens 仍可能產生費用;請查看 usage.cost 或「活動」紀錄確認最終金額。
快速入門
三種整合方式
五分鐘內開始使用。BazaarLink 與 OpenAI SDK 完全相容 — 只需更改
超過 100 秒的長請求建議使用 stream:true。非串流請求約 12 秒後(預設值,可由部署設定調整)會先回應 200 並開始傳送 keepalive 空白;之後若出錯,會以 200 + error JSON 回傳。keepalive 是 JSON 本文前的空白,標準 JSON 解析器會忽略。
基礎 URL
https://api.bazaarlink.ai/v1api.bazaarlink.ai 是 API 專用入口,與網站分開部署。先前的基礎網址 https://bazaarlink.ai/api/v1 仍完全支援,既有整合無需變更。
使用 OpenAI SDK
BazaarLink 與 OpenAI SDK 完全相容。只需更改 base URL 和 API 金鑰 — 所有其他程式碼保持不變。
sk-bl-.自帶上游金鑰(BYOK)
將上游 API 金鑰綁定至個人帳戶或組織。符合條件的請求會優先使用您的金鑰。上游發生錯誤時,請求可以改試其他可用來源;若沒有可用來源,請求會回傳錯誤。個人金鑰在金鑰頁管理,組織金鑰在組織設定中管理。 前往 BYOK 設定 →
內容過濾
為你的 API 流量啟用雙向內容防護:偵測到提示注入的請求會被擋下(400),請求與回應中的敏感資料(API 金鑰、信用卡號、身分證字號等)會被自動遮蔽。規則與豁免清單可自訂,並提供使用統計。 前往內容過濾設定 →
網路搜尋(:online)
讓模型在回答前先搜尋網路,並把搜尋結果當作參考資料一起提供給模型。適合需要最新資訊的問題,例如新聞、價格、近期發布的政策或產品。
支援的端點
POST /api/v1/chat/completionsPOST /api/v1/messagesPOST /api/v1/responses
串流(stream: true)與非串流都支援。
使用方式
方式一:在模型名稱後加上 :online
curl https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini:online",
"messages": [{ "role": "user", "content": "台灣今天有哪些 AI 相關新聞?" }]
}'方式二:使用 plugins 參數
方式三:使用 web_search_options
{
"model": "gpt-5.4-mini",
"messages": [{ "role": "user", "content": "..." }],
"web_search_options": { "search_context_size": "high", "query_source": "conversation" }
}以上三種方式任選其一即可,也可以混用。
搜尋參數
以下參數可放在 plugins 的 web 項目或 web_search_options 中;兩處都有指定且值不同時,以 plugins 為準。
search_prompt任意文字—直接指定搜尋查詢。有指定時,優先於 query_source。query_sourcelast_user、conversationlast_user沒有 search_prompt 時,搜尋查詢的來源。last_user:只用最後一則使用者訊息;conversation:用整段對話(不含 system 訊息)。country小寫英文國名(例如 taiwan、japan、united states)不限地區優先搜尋指定國家的來源。不帶就不限地區。指定 country 時,搜尋類型固定為一般搜尋(general);若同時指定 topic: "news" 會回傳 400。topicgeneral、newsgeneral搜尋類型。不帶時使用一般搜尋(general);需要新聞類結果時,請明確指定 topic: "news"。search_queries字串陣列,1–5 條—一次指定多條搜尋查詢,每條各搜尋一次、各收一次搜尋費;結果合併並去除重複網址後提供給模型。與 search_prompt 不可同時使用。部分查詢失敗時,會用成功的結果繼續回答,只收成功條數的搜尋費;全部失敗才回傳 503 且不收費。time_rangeday、week、month、year(亦接受 d/w/m/y、past_day、24h、7d、30d、365d 等常見寫法;參數名也可用 recency 或 search_recency_filter)不限只搜尋指定期間內的內容。languageISO 639-1 語言代碼(如 zh、en、ja),單一或陣列不限優先搜尋指定語言的內容。傳入陣列時,目前只採用第一個語言。include_domains網域字串陣列,支援萬用字元(例如 *.gov.tw)—只搜尋這些網域,最多 300 個,每個網域最長 253 字元。exclude_domains網域字串陣列,支援萬用字元—排除這些網域,最多 150 個。max_results1–10依等級回傳的參考來源數量。也可寫成 num_results。enginebasic、fast、ultra-fast、advanced依等級直接指定搜尋深度,優先序最高。其他值(包含其他平台的搜尋引擎名稱)一律改用預設深度,不會報錯。(僅 plugins)modeturbo、instant、fast、basic、advanced、deep—另一種指定深度的方式:turbo/instant → 極速、fast → 快速、basic → 標準、advanced/deep → 進階。無法辨識的值會被忽略。search_context_sizelow、medium、high、fastmedium搜尋等級,見下表。(僅 web_search_options)深度的優先序:engine(上表四個值)> mode > search_context_size > 預設 medium。
plugins 與 web_search_options 的參數格式與 OpenRouter 相容,既有的請求可以直接使用。
也相容 Vercel AI Gateway 的搜尋工具寫法
Chat Completions 的 tools 也接受以下搜尋工具格式,會視同一次網路搜尋,由本平台的網路搜尋處理,計費與引用格式同上:
- 可接受的
type:vercel:perplexity_search、vercel:exa_search、vercel:parallel_search、vercel:tako_search。這幾種type的行為與費用完全相同。 config.query視同search_prompt;config.max_results(或num_results)、config.country等對應到上方同名參數;無法辨識的欄位會被忽略。- 這些搜尋工具不會轉送給模型。
- 同一個請求帶有多個搜尋工具時,只採用第一個。
也接受 `web_search_preview` 工具
在 Responses 等端點的 tools 中帶入 { "type": "web_search_preview" },同樣會視同一次網路搜尋,由本平台的網路搜尋處理,計費與引用格式同上。這個工具不會轉送給模型。
同時使用多種寫法時
:online、plugins、web_search_options、搜尋工具(包含 web_search_preview)可以同時出現,但每個請求只會執行一次搜尋、收一次搜尋費(使用 search_queries 時依條數計算)。搜尋查詢的優先序為:search_queries > 搜尋工具的 config.query > search_prompt > query_source。其他參數依上方各參數的優先序合併。
只有參數型別錯誤(例如 engine 傳數字、include_domains 不是字串陣列)或值超出範圍時,才會回傳 400 invalid_web_search_options。
搜尋等級
low標準最多 5 筆較精簡medium標準最多 10 筆預設等級high進階最多 10 筆搜尋較深入,單價較高fast快速最多 10 筆回應較快未指定等級時使用 medium。
回應中的引用來源
搜尋到的來源會以 annotations 回傳,採業界通用的 url_citation 格式:
- 每個參考來源都會有一筆引用。
- 模型回答中若標註了對應的來源(例如
[source-1]),start_index與end_index會指出該標註在回答文字中的位置;若沒有標註,兩者皆為0。
各端點的位置:
- Chat Completions:非串流在
choices[].message.annotations;串流時會在[DONE]之前多送一個只含delta.annotations的區塊。 - Responses:在
output_text內容的annotations,串流時隨response.output_text.done等完成事件送出。 - Messages:附在文字內容區塊的
annotations;串流時在結束前的text_delta事件送出。
計費方式
- 每次請求的費用 = 模型費用 + 網路搜尋費用。
- 網路搜尋按次計費,單價依平台定價;進階深度(
high等級,或以engine/mode指定為進階)的單價較高。 - 免費模型也會收取網路搜尋費用,模型本身仍然免費。
- 每個請求預設搜尋一次;使用
search_queries時,搜尋次數等於查詢條數,費用也按條數計算。即使系統在後端切換到其他路由重試,也不會重複搜尋、重複收費。 - 以下情況不收網路搜尋費用:
- 搜尋本身失敗(會回傳 503,見下方)。
- 使用
search_queries時失敗的那幾條(只收成功條數)。 - 搜尋成功,但模型最後沒有成功產生回應。
- 預扣餘額時會包含搜尋費用。實際扣款金額會反映在回應的
usage.cost與帳務記錄中。
錯誤與限制
web_search_unavailable網路搜尋服務暫停,請稍後再試。不收費,也不會呼叫模型insufficient_credits餘額不足以支付這次請求(含搜尋費用),系統會在搜尋前就擋下。不收費web_search_rate_limited網路搜尋請求過於頻繁,請稍後再試。不收費invalid_web_search_options搜尋參數不合法,例如 country 不在支援清單內、include_domains 不是字串陣列、search_queries 與 search_prompt 同時指定。不收費- 一般請求的限流、模型權限、內容審核等檢查都會在搜尋之前完成;被這些檢查擋下的請求不會進行搜尋。
- 搜尋相關參數與工具(
:online後綴、plugins的 web 項目、web_search_options、上述搜尋工具與web_search_preview)只由本平台處理,不會轉送給模型。
從 OpenRouter 遷移
BazaarLink 的 API 與 OpenRouter 相容 — 大多數整合只需改兩個值即可切換:base URL 換成 https://api.bazaarlink.ai/v1、API 金鑰換成 sk-bl- 開頭的 BazaarLink 金鑰。
- base URL:https://openrouter.ai/api/v1 → https://api.bazaarlink.ai/v1
- API 金鑰:sk-or-... → sk-bl-...(於 /keys 建立)
- 模型 ID:同樣使用 provider/model 格式(例如 anthropic/claude-sonnet-4.6);完整清單見 GET /v1/models
- models 候選清單、串流、工具呼叫、結構化輸出的 request 形狀相同
身份驗證
所有 API 請求都需要在 Authorization 標頭中提供您的 API 金鑰。
Authorization: Bearer sk-bl-YOUR_API_KEY從 儀表板取得您的 API 金鑰。請妥善保管金鑰 — 請勿在用戶端程式碼中暴露它。
選填標頭
設計原則
BazaarLink 圍繞三個核心原則設計:
1. 統一介面
一個 API、一個 SDK、數百個模型。只需更改模型 ID,無需修改程式碼,即可在 OpenAI、Anthropic、Google Gemini、Meta Llama 等之間切換。
2. 價格優化
BazaarLink 自動路由到您所選模型最具成本效益的供應商。您只需為實際使用量付費,以美元計費並提供完整發票支援。
3. 請求處理方式
上游來源發生問題時,請求可以改試其他可用來源;若沒有可用來源,請求會回傳錯誤。
多模態
BazaarLink 支援多模態輸入 — 將圖片、音訊和檔案與文字一起傳送至支援的模型。內容會直接傳送至上游供應商。
支援的模態
範例:
傳送圖片
使用 content 陣列格式搭配 image_url 部分。支援格式:PNG、JPEG、WebP 及 GIF(包含動態 GIF)。單一訊息可包含多張圖片,每張為獨立的 image_url 部分:
限制
BazaarLink 有兩種獨立限制:依請求頻率計算的速率限制,以及依帳戶花費計算的點數限制。超過速率限制會收到 HTTP 429;點數用罄則會收到 HTTP 402。
速率限制
速率限制以使用者為單位(非金鑰),以每分鐘請求數(RPM)計算。無每日上限。等級由帳戶點數餘額自動決定。
超過速率限制時,您會收到附有 Retry-After 標頭的 429 回應。重試時請使用指數退避策略。
Response Headers
回應可能包含 x-request-id、非串流回應的 x-generation-id、x-ratelimit-*、適用時的 retry-after,以及 auto 或 auto:free 路由的 x-auto-resolved-model。
x-request-id: 85e6f35c71a31f19-SJC
x-generation-id: 85e6f35c71a31f19-SJC
x-ratelimit-limit: 200
x-ratelimit-remaining: 198
x-ratelimit-reset: 1740000060
retry-after: 5
x-auto-resolved-model: openai/gpt-4o點數限制
收到 402 代表帳戶餘額或金鑰花費上限已歸零,而非請求過於頻繁。這類回應不會帶速率限制標頭;若在串流過程中觸發,會以 SSE 錯誤事件回傳,而非直接改變 HTTP 狀態碼。
IP 白名單
每把 API 金鑰都可以設定獨立的 IP 白名單,只有來自指定來源 IP 的請求能使用這把金鑰。
什麼情況適合使用
適合部署在具有固定出口 IP 的正式環境伺服器或企業內網服務。若應用程式從家用網路、行動網路或其他會變動的位址發出請求,請先確認出口 IP 穩定,否則可能把自己鎖在外面。
如何設定
前往 /keys ,打開該把金鑰的「⋯」選單,選擇「IP 白名單」,輸入項目後儲存。
也可以使用 PATCH /api/v1/keys/:id,搭配登入 session 或 Management API key 設定:
項目格式
在 UI 中每行輸入一個值;使用 API 時,將相同值放進 `allowedCidrs` 陣列。可接受裸 IPv4 位址、IPv4 CIDR,或 IPv6 字面值(僅精確比對)。
203.0.113.7
198.51.100.0/24
2001:db8::1運作方式
留空(送出空的 [] 陣列)代表允許所有來源 IP。這是預設值,現有金鑰行為維持不變。
來源 IP 取自 `cf-connecting-ip` 標頭。
名單非空但解析不到來源 IP 時,請求會被拒絕(fail-closed)。
個人緊急煞車
針對您所有 API 金鑰套用的固定 1 分鐘 / 1 小時 USD 支出上限。當時間窗口的門檻被觸及時,新的請求將收到 HTTP 429;窗口於整點邊界自動重置。
帳號安全
除了帳號密碼,BazaarLink 也支援兩步驟驗證,為登入多加一層保護。
啟用兩步驟驗證(TOTP)
- 前往「設定」頁面,找到「兩步驟驗證(TOTP)」區塊,點擊「啟用兩步驟驗證」。
- 用驗證器 App(例如 Google Authenticator)掃描畫面上的 QR code,或手動輸入下方顯示的密鑰。
- 輸入驗證器產生的 6 位數驗證碼並確認,即完成啟用。
啟用後系統會顯示 8 組備援碼(僅顯示這一次),每組 10 碼、限用一次;請立即抄下或複製,保存在手機以外的安全地方,手機遺失或無法使用驗證器時可用備援碼登入。
其他帳號防護
搭配下列功能,可以進一步降低金鑰外洩或誤用造成的損失:
- IP 白名單 — 將 API 金鑰限制在指定的來源 IP 才能使用。
- 個人緊急煞車 — 對單一分鐘與單一小時的花費各自設定上限,超過即自動暫停。
- 金鑰花費上限 — 建立或更新 API 金鑰時,設定每日、每週或每月的花費上限。
圖片生成
透過 /v1/chat/completions 帶 modalities:["image"],或 OpenAI DALL·E 相容的 /v1/images/generations 生成圖片。
curl -N https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-5.4-image-2","messages":[{"role":"user","content":"a red cat on a sofa"}],"modalities":["image","text"],"stream":true}'影片生成
非同步三步驟流程(submit → poll → content)。影片生成需要 30 秒到 5 分鐘。
curl https://api.bazaarlink.ai/v1/videos \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"bytedance/seedance-2.0","prompt":"a bird flying over mountains","duration":3}'
# → 202 { "id": "vjob_xxx", "status": "pending" }PDF 輸入
直接在訊息中傳送 PDF 文件,給原生支援 PDF 輸入的模型(例如 Claude、Gemini)分析、摘要或回答問題。BazaarLink 會把檔案直接轉送給模型 — 算一般 input tokens,不額外收費、不額外處理。
支援的格式
- PDF 文件(含文字、圖片、表格、掃描件)
- Base64 資料 URL(`data:application/pdf;base64,...`)
- 多頁文件
- 僅限無密碼保護的 PDF
影片輸入
傳送影片檔案給支援影片輸入的模型,用來分析內容、生成說明或回答場景與事件相關問題。可用直接 URL 或 base64 資料 URI — URL 適合公開可存取的影片;base64 用於本機檔案或私有影片。
支援的格式
MP4(H.264)MPEGMOVWebM管理 API 金鑰
管理金鑰(Management Key)專用於程式化管理 API 金鑰:可建立、列出、更新、停用與刪除標準金鑰,但無法呼叫 AI 模型。
建立管理金鑰
前往「Management API Keys」頁面,點擊「Create」即可 — 這是獨立頁面,不是在一般 API 金鑰頁面裡選類型。
列出金鑰
建立子金鑰
更新金鑰
撤銷金鑰
DELETE https://api.bazaarlink.ai/v1/keys/:id
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# Returns 204 No Content on success查詢餘額
查詢用量
GET https://api.bazaarlink.ai/v1/usage?period=month
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# period: day | week | month | year應用程式識別
透過請求標頭識別您的應用程式,讓系統追蹤使用量、顯示在儀表板上,並在未來提供更細緻的分析。
可用標頭
| Header | Description |
|---|---|
| HTTP-Referer | 您的網站 URL,用於使用量追蹤與分析(選填) |
| X-Title | 您的應用程式名稱,顯示在儀表板中(選填) |
錯誤代碼
錯誤回應格式
錯誤 envelope 依端點而異。若有 error.type,請搭配 HTTP 狀態碼判斷;error.code 可能是字串或數字狀態碼,也可能省略;error.message 僅供顯示。
{
"error": {
"message": "Insufficient credits. Please top up to continue.",
"type": "invalid_request_error",
"code": "insufficient_credits"
}
}HTTP 狀態與 error.code
錯誤 envelope 依端點而異。若有 error.type,請搭配 HTTP 狀態碼判斷;error.code 可能是字串或數字狀態碼,也可能省略;error.message 僅供顯示。
機器可讀的帳務代碼
同樣是 402,也可能代表不同的帳務控制。請依下列穩定代碼顯示正確的處理方式。
詳細錯誤代碼
API 請求失敗時,error.code 會告訴你更具體的原因。即使兩個錯誤都是 HTTP 400,處理方式也可能不同:例如 unknown_model 表示模型名稱有誤,image_too_large 則表示圖片太大。請依下表找到原因與對應的處理方向。
內容審查
所有請求在送往模型端之前,都會先經過自動化內容審查。不符合使用規範的請求會被拒絕,不會送達模型,並回傳 403 錯誤。
會被攔截的內容類別
審查依據我們的使用規範(Acceptable Use Policy)進行,主要攔截以下類別的內容:
- 性剝削內容
- 暴力威脅
- 違法行為的操作指導
- 生物危害相關內容
403 回應格式
請求被審查攔截時,會收到以下格式的錯誤回應:
{
"error": {
"message": "Your prompt was blocked by content moderation.",
"type": "invalid_request_error",
"code": "content_filter"
}
}被攔截的請求不會計費——你不會為被拒絕的請求付費。
誤判申訴
如果你認為某次請求被誤判攔截,請聯繫支援團隊並附上請求時間與(如方便的話)request id,我們會協助複查。
隱私說明
每一筆請求都會經過自動化內容審查。
判定為違規的請求,我們會保留其內容作為合規舉證之用。
其他請求不會保留完整提示詞內容。
速率限制、預算與緊急煞車
這些控制可能拒絕原本有效的請求。它們與供應商錯誤不同,也需要不同的復原方式。
錯誤 envelope 依端點而異。若有 error.type,請搭配 HTTP 狀態碼判斷;error.code 可能是字串或數字狀態碼,也可能省略;error.message 僅供顯示。
影片與媒體資源狀態
影片驗證通常回傳數字 code 400;工作不存在為 404、模型退役為 410、影片內容尚未完成為 409、影片 byte range 無效為 416。重試前請先輪詢至完成,或修正 Range 標頭。
重試策略
只有在不修改請求也可能恢復的錯誤才應重試。若有 Retry-After,請依指定秒數等待;否則使用帶 jitter 的指數退避。限制重試次數,也不要同時疊加 SDK 自動重試與手動重試。
錯誤處理
串流錯誤格式
在任何 token 串流之前發生的錯誤,會以標準 HTTP 錯誤回應(JSON body)回傳。
串流一旦開始,HTTP 回應已經是 200。用戶端必須解析每個 SSE data frame;只要出現頂層 error,或 choices[0].finish_reason === "error",就應視為失敗且回應不完整。
???????????BazaarLink ????????? error ??????? SSE ?????? data: [DONE]??????????????????????????
data: {"error":{"message":"The request could not be completed.","type":"upstream_error","code":502}}
data: [DONE]
// Branch on error.code; error.type can vary by failure path.工具呼叫
工具呼叫(也稱為函式呼叫)讓模型可以呼叫您定義的外部函式。模型會決定何時呼叫工具並產生結構化參數 — 您的程式碼負責執行函式並將結果回傳以繼續對話。
支援的模型
大多數前沿模型都支援工具呼叫。以下是一些熱門選擇:
定義工具
每個工具是一個描述模型可呼叫函式的 JSON 物件。parameters 欄位使用 JSON Schema。
tool_choice 選項
完整流程
工具呼叫是一個多輪流程:(1) 帶工具發送請求 → (2) 模型回傳 tool_calls → (3) 執行函式 → (4) 回傳結果 → (5) 模型生成最終回應。
平行工具呼叫
某些模型可以在單一回應中呼叫多個工具。處理每個工具呼叫並回傳所有結果:
串流中的工具呼叫
串流時,工具呼叫會拆成多個 delta 依序送出——用每個片段的 index 把參數字串組合起來,等 finish_reason 變成 "tool_calls" 才代表這次工具呼叫已經收完整。
簡易 Agent 迴圈
只要模型還在要求工具就持續呼叫,直到它回傳最終答案為止的通用模式——用 max_iterations 避免無限迴圈。
函式定義最佳實務
- 函式命名要具體:用 get_weather_forecast,不要只寫 weather。
- description 要寫清楚函式的用途與適用時機——模型只靠這段文字判斷該不該呼叫。
- 參數盡量用 enum 限制可能值,並在 description 附上範例,降低模型生成錯誤參數的機率。
- 只把真正必要的欄位標記為 required,選填欄位應該真的可以省略。
結構化輸出
強制模型返回符合 Schema 的有效 JSON。這對於建立需要程式化解析模型輸出的可靠應用程式至關重要。
方法 1:response_format(JSON Schema)
以強制嚴格的 JSON Schema 合規性:
提示
- 使用清晰、描述性的屬性名稱 — 模型會將其作為上下文。
- 為 Schema 屬性添加描述來引導模型。
- 設定 strict: true 以保證 Schema 合規(可能略微增加延遲)。
- 保持 Schema 簡單 — 深度巢狀的 Schema 可能降低輸出品質。
- 使用不同模型測試 — 某些模型處理複雜 Schema 的能力更強。
助手預填
在訊息陣列最後加入一則未完成的 assistant 訊息,向相容的模型路由要求接續生成。
訊息轉換
The client-supplied transforms field is ignored and removed before an upstream request. It cannot enable or disable message transformations. BazaarLink may apply context handling under its own server-side rules; shorten the input or select a model with a larger context window when needed.
transforms values such as middle-out; they do not change how this request is routed or processed.零資料保留
BazaarLink 預設不儲存您的訊息內容。本頁說明您的資料處理方式,適用於處理敏感資料的應用程式。
目前的資料處理方式
- 訊息內容:預設不儲存,在記憶體中處理後立即丟棄
- 計費元資料:token 數量、時間戳記、模型 ID
- 使用日誌:請求統計,不含訊息內容
- 上游轉發:訊息轉發至上游供應商,受其隱私政策約束
提示快取
提示快取可以重用之前計算過的 prompt tokens,顯著降低成本並減少延遲,特別適合有大量重複系統提示的應用程式。
運作方式
是否需要額外設定取決於供應商。OpenAI 系列模型的長重複前綴會自動快取,不需要改請求內容。Claude(Anthropic)模型只有在請求裡帶明確的 cache_control 標記時才會快取——BazaarLink 不會替你加這個標記,沒帶就永遠不會被快取。BazaarLink 會原封不動轉發你送出的快取標記,並在使用量回應中回報實際的快取讀寫 token 數。
推理 Tokens
推理模型(如 DeepSeek R1、o1 系列)在生成最終答案之前,會先在內部進行思考。這些思考過程消耗的 tokens 稱為推理 tokens,會分開計費。
在回應中讀取推理 Tokens
思考模式控制
部分模型支援切換「思考」模式。思考模式在輸出最終答案前產生內部推理 token,以更多 token 為代價提升輸出品質。
| 模型系列 | 參數 | 預設值 |
|---|---|---|
| qwen3-* | enable_thinking: boolean | false(平台預設值) |
| openai/gpt-5.5, gpt-5.6-sol, gpt-5.4 | reasoning_effort: "low" | "medium" | "high" | medium |
| deepseek/deepseek-r1 | — | 永遠啟用(無法關閉) |
統一 reasoning 物件(新格式)
BazaarLink 也支援統一的 reasoning 物件,以單一一致的 API 適用所有模型系列:
| 欄位 | 數值 | 適用模型 |
|---|---|---|
| reasoning.effort | "xhigh" | "high" | "medium" | "low" | "none" | OpenAI o-series, Grok |
| reasoning.max_tokens | integer | Anthropic Claude, Gemini |
| reasoning.exclude | boolean | 從回應中隱藏思考內容(模型仍會推理) |
延遲與效能
優化 AI API 的回應延遲對用戶體驗至關重要。以下是 BazaarLink 架構中影響延遲的關鍵因素及最佳化建議。
影響延遲的因素
- 模型大小:較大的模型(70B+)通常生成速度較慢
- 提供商負載:不同時段不同供應商的負載有所差異
- Token 數量:max_tokens 越大,完成時間越長
- 串流 vs 非串流:串流(stream: true)可更快取得第一個 token
- 上下文長度:超長 context 會增加前置處理時間
最佳化建議
- 優先使用串流(stream: true)以改善感知延遲
- 對延遲敏感的場景選擇較小的模型(flash/mini/haiku)
- 啟用提示快取以降低重複請求的延遲
可用性優化
上游發生錯誤時,請求可以改試其他可用來源;若沒有來源可處理,請求會回傳錯誤。熔斷器會限制重複嘗試,平台也會監測供應來源狀態。
可用性機制
- 熔斷器:自動偵測並隔離故障供應商
- 上游來源發生問題時,請求可以改試其他可用來源;若沒有可用來源,請求會回傳錯誤。
- 供應商健康監控:持續追蹤各供應商的錯誤率和延遲
- 重試邏輯:暫時性錯誤(5xx)自動重試
熔斷器配置
安全護欄
為 API 請求加上內容安全機制,過濾有害內容、執行合規政策。BazaarLink 目前只在組織(Organization)層級提供可自訂的內容過濾防護;個人(非組織)API 金鑰沒有對應設定,內容安全完全依賴各上游模型供應商自己內建的安全系統。
規劃中功能(尚未提供,個人與組織金鑰皆無)
目前行為
個人 API 金鑰:所有上游供應商都有自己的內容安全系統,觸發內容過濾的模型回應會回傳 finish_reason: "content_filter",BazaarLink 不做額外過濾。組織 API 金鑰:org_admin 可以在「內容過濾防護」設定自訂規則(阻擋/遮蔽/記錄),套用在文字送到模型之前。
Cursor IDE 整合
把 BazaarLink 設成 Cursor 的 OpenAI Override URL,立即在 Cursor 內呼叫所有模型。支援 Responses API 自動轉換、工具格式正規化,並用 bz- 前綴規避 Cursor 對 Claude 模型的攔截。
快速設定
在 Cursor 打開 設定 → 模型,然後:
- 把 Override OpenAI Base URL 設為 https://api.bazaarlink.ai/v1
- 把 Override OpenAI API Key 設為你的 sk-bl-... BazaarLink 金鑰
- 輸入你想用的 model 名稱 — Claude 模型請看下方 bz- 前綴規則。
bz- 前綴(用於 Claude 模型)
Cursor 在 client side 看到 claude- 開頭的模型名稱會強制走它自己的 Anthropic 整合,完全略過你的 Override URL。要讓 Cursor 把請求送到 BazaarLink,在模型名稱前面加 bz-。我們的 server 會去掉前綴後再用 alias map 解析剩下的部分。
點號和連字號的版本都會被正規化:bz-claude-sonnet-4.6 和 bz-claude-sonnet-4-6 會解析到同一個模型。
CURSOR_MODEL_MAP 環境變數(運營者覆寫)
如果你是自架 BazaarLink,設這個環境變數可以把任何 Cursor 端的模型名稱重新映射到目錄的 canonical id:
CURSOR_MODEL_MAP=gpt-claude-sonnet:anthropic/claude-sonnet-4.6,gpt-opus:anthropic/claude-opus-4.7這樣 Cursor 端輸入的 gpt-claude-sonnet 會在 server 端被映射成 anthropic/claude-sonnet-4.6。當你想讓 Cursor 以為某個模型是 GPT 家族(才會走 Override URL),實際上你想用 Claude 提供服務時很有用。
自動處理的事項
當請求送到 /v1/chat/completions 時,BazaarLink 會自動套用以下相容性轉換 — 你的 client 端不用做任何事:
- 自動偵測 Responses API body — 如果 body 有 input 而沒有 messages,會自動轉成 Chat Completions 格式(Cursor 對 GPT 家族模型會送 Responses API 格式)。
- 包裝扁平的 tool 定義 — Cursor Agent 送的是 { name, description, parameters } 沒有 function 包裝。我們會包好,避免 Anthropic 回 Tool '' not found in provided tools。
- 矯正錯誤格式的 tool_choice — Cursor 送的是 { type: "auto" }(物件形式,沒 function)。OpenAI 規範要求 auto/none/required 用字串形式,所以我們強制轉換。
- 送到非 OpenAI 供應商時剝除 OpenAI 專用欄位 — parallel_tool_calls、logprobs、top_logprobs、logit_bias、service_tier、user 在轉發前會被移除(否則 Anthropic 會回 400)。
- 把 max_output_tokens 對應成 max_tokens,同時移除 Responses-API 專用欄位(previous_response_id、truncation、background、store)。reasoning 欄位在原生 Chat Completions body 會保留。
Cursor Agent 模式
工具呼叫走的是標準 Chat Completions tool-call 流程。Cursor 送 tools(Shell、Read、Write、Grep 等)和 tool_choice: "auto";BazaarLink 轉發給你選的供應商,由供應商決定要不要呼叫工具。工具呼叫以標準 OpenAI tool_calls deltas 形式回傳;Cursor 在本地執行並繼續對話。不管你選 gpt-4o(原生 OpenAI)還是 bz-claude-sonnet-4.6,運作方式都一樣。
模型路由
BazaarLink 使用 provider/model-name 格式將請求路由到正確的上游供應商。這讓您可以透過單一 API 端點存取主流模型。
模型 ID 格式
{provider}/{model-name}
# Examples
openai/gpt-5.4-mini
anthropic/claude-sonnet-4.6
google/gemini-3-flash-preview
deepseek/deepseek-v4.1-flash路由優先順序
當您發送請求時,BazaarLink 依以下順序解析上游供應商:
- 精確匹配 — 尋找與完整模型 ID 匹配的模型路由
- 供應商萬用字元 — 回退至 provider/* 路由(例如 openai/*)
- 全域萬用字元 — 回退至 * 萬用字元路由
- 預設供應商金鑰 — 僅限已收錄模型,使用已啟用且標記為預設的供應商金鑰
在 模型頁面瀏覽所有可用模型。
自動路由
Auto Router v3 會先把請求評分為 14 個任務層級之一,再使用該層級目前設定的主要模型與備援鏈。付費與免費路由表可在後台分開管理。
- auto — 使用付費路由表;成功完成請求的實際模型會依公開價格計費。
- auto:free — 使用免費路由表;免費額度內扣款為 0。額度用完後,有餘額的帳戶可能轉為付費 auto,除非關閉付費 fallback。
如何使用
將 model 設為 "auto"(付費)或 "auto:free"(免費)以啟用自動路由:
curl https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"Review this TypeScript function"}]}'v3 如何選擇 tier
通用 tier 為 simple、standard、complex、reasoning;專用 tier 為 coding、vision、image、video、data、search、social、email、calendar、trading。若分數落在低信心邊界,系統會往上一級,避免低估任務難度。
- 層級評分:依 messages、tools、長度、關鍵字與結構特徵,選出 14 個 tier 之一
- 硬規則覆寫:圖片輸入、形式推理及特定專用任務可直接指定 tier
- 查詢路由:依模式讀取該 tier 目前的 primary 與最多 5 個 fallback;停用的 tier 直接回傳 503
- 執行順序:先嘗試 primary,再依後台設定順序嘗試 fallback
- 回應追蹤:解析後的模型會在回應本體和 X-Auto-Resolved-Model 標頭中回傳
目前實際使用的模型表
下表直接讀取推論服務與後台使用的同一份即時設定。管理員可隨時調整每個 tier 的主要模型、備援順序與啟用狀態,不需重新部署。
auto
auto:free
部分模型提供受限速的免費額度。免費資格由平台按模型授予 — 直接用原本的模型 ID 呼叫即可;:free 後綴只是可選別名(對付費模型自行加上 :free 不會變免費)。
模型變體
獨立模型 ID
:free、:extended 和 :thinking 等目錄變體可代表具有不同能力或目錄價格的項目。上游路由與客戶價格由 BazaarLink 目錄及伺服器端規則決定。
:free
:extended
:thinking:nitro
:floor
:exacto:online免費模型
部分模型提供受限速的免費額度。免費資格由平台按模型授予 — 直接用原本的模型 ID 呼叫即可;:free 後綴只是可選別名(對付費模型自行加上 :free 不會變免費)。
- 直接呼叫原模型 ID(例如 deepseek/deepseek-v4-flash),免費額度內的請求自動免費。
- 免費用量按用戶限制每分鐘請求數(RPM)與每日上限,額度隨帳戶等級(未儲值 / 已儲值)調整。
- 超過免費額度且帳戶有餘額時,請求會自動以列出的付費價格繼續。送出 X-Free-Fallback: false 可關閉自動轉付費、改收 429。無餘額時,超額請求回 429。
- GET /v1/models 會為每個提供免費額度的模型列出 :free 條目;auto:free 永遠路由到免費模型。
目前提供免費額度的模型
直接用這些模型 ID 呼叫即可享有免費額度。清單隨上架調整,建議以 API 查詢為準。
qwen/qwen3.7-flash
deepseek/deepseek-v4-flash-0731free免費額度上限
每日額度 = 上表每日請求額度 × 你的帳戶等級倍率,各免費模型分開計算;auto:free 另有以 IP 為單位的平行上限。個別模型可由平台單獨設定更嚴或更寬的限制,實際值以模型頁的「免費額度」區塊為準。 免費額度以「單位」計算,並非單純的請求次數:單次請求消耗的單位數會隨 prompt 的 context 長度增加。因此在相同的每日額度下,長 context 請求的實際可用次數會明顯少於短 prompt。
超出免費額度之後
免費額度用完後,帳戶仍有餘額時,超額請求會依該模型付費價格計費;若希望超額時收到 429,請傳送 X-Free-Fallback: false 標頭或在金鑰設定中關閉付費轉換。餘額不足時,超額請求會回傳 429。
當請求真的被這樣降級時,回應會帶上 x-bl-free-fallback: daily 或 x-bl-free-fallback: rpm 標頭,標示是哪個上限觸發的,讓你在請求當下就能偵測到這次轉換,而不必等到帳單才知道。沒有降級的請求不會帶這個標頭。
# Return 429 instead of switching to paid routing
-H "X-Free-Fallback: false"組織管理
如果多人共用 BazaarLink,可以建立一個組織,把成員分到不同 Team,統一管理 API 金鑰、可用模型、預算與帳務。組織持有共用餘額,Team 和成員可以另外設定每月花費上限。
三層預算系統
每次 API 請求都會檢查個人、Team 與組織限制。達到每月預算或餘額不足時,請求會被擋下並回傳 HTTP 402;支出緊急煞車則回傳 HTTP 429。
- 成員月度預算(OrgMember.monthlyBudget)
- Team 月度預算(Team.monthlyBudget)
- 組織 Credits 餘額(Organization.credits)
費用報表
進入某個組織的管理後台後,打開「報表」即可查看四種每月費用分析:
- 總覽:月度總花費、毛利率、每日趨勢折線圖
- 按 Team:各 Team 花費、佔比、模型明細、預算使用率
- 按模型:各 AI 模型花費、平均單價($/1M tokens)
- 按成員:各成員花費(僅 org_admin 可看)
所有維度均支援 CSV 匯出,含 BOM(Excel 直接開啟不亂碼)。
建立與管理組織
- 前往「設定」,在組織區塊建立新組織
- 建立後點選組織名稱,進入該組織的管理後台
- 在管理後台建立 Team,並視需要設定成本中心代碼和每月預算
- 邀請成員(填入 email、指定角色與 Team)
- 為成員建立 API 金鑰,金鑰的用量自動歸屬到對應的 Team / 成員
- 到「報表」查看組織、Team、模型與成員的每月花費
成員角色
組織還能管理什麼?
除了成員和 Team,組織管理後台還集中提供以下功能:
- API 金鑰:依組織、Team 或成員建立金鑰,查看歸屬並限制可用模型
- 內容過濾防護:在文字送到模型前阻擋、遮蔽或記錄敏感內容
- Allowed Models:限制整個組織、特定 Team、成員或 API 金鑰可呼叫的模型
- 預算與緊急煞車:設定每月上限,以及分鐘/小時支出保護
- 報表與帳務:查看花費、模型用量、Team 分攤、餘額、信用額度與付款資料
- 變更與安全紀錄:追蹤設定異動、內容過濾命中及其他安全事件
- 機構方案:教育類組織可另外管理學生 Session 與配額
內容過濾防護
這是一道組織自己的文字檢查規則。使用組織 API 金鑰送出請求時,系統會先檢查文字,再決定是否送到模型。org_admin 可在「設定 → 內容過濾防護」啟用、編輯及測試規則。
- block(阻擋):整個請求回 HTTP 403,不會送到模型
- redact(遮蔽):把符合的文字替換成 [REDACTED],再把處理後內容送到模型
- flag(記錄):請求照常送出,但把命中項目寫入組織稽核紀錄
- 可使用內建的敏感資料與 Prompt Injection 範本,也可新增關鍵字或正則規則
- 最多 100 條規則;正則規則會先檢查安全性,也可用測試文字預覽結果
Management API (v1)
Management API 適合用程式管理組織,例如列出組織、建立 Team、加入成員或調整預算,不必手動操作網頁。`/v1/orgs` 是組織與成員管理;費用報表則使用下方獨立的 `/api/orgs/:orgId/reports/*` 路徑。
組織(Organizations)
/v1/orgs列出呼叫者所屬的所有組織,包含角色與加入時間。
/v1/orgs/:orgId取得組織詳細資訊,含團隊與成員數量。
curl https://api.bazaarlink.ai/v1/orgs \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY"Teams
/v1/orgs/:orgId/teams列出所有團隊及其成員數,依名稱排序。
/v1/orgs/:orgId/teams/v1/orgs/:orgId/teams/:teamId部分更新 — 只需傳入要變更的欄位。
/v1/orgs/:orgId/teams/:teamId# Create a team
curl https://api.bazaarlink.ai/v1/orgs/{orgId}/teams \
-X POST \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Engineering", "costCenterCode": "ENG-001", "monthlyBudget": 500}'成員(Members)
/v1/orgs/:orgId/members列出所有成員,含巢狀 user 資訊(id/name/email)與所屬團隊。
/v1/orgs/:orgId/members若 email 無對應 BazaarLink 帳號則回傳 404;已是成員則回傳 409。預設角色:member。
/v1/orgs/:orgId/members/:memberId部分更新 role、teamId 或 monthlyBudget。
/v1/orgs/:orgId/members/:memberId若移除對象為最後一位 org_admin,回傳 400。
Reports API
Reports API 是組織報表頁實際使用的資料來源,也可供內部儀表板、每月對帳或自動下載 CSV 使用。org_admin 可查看所有報表;billing_viewer 可查看總覽、Team 與模型資料,但不能查看逐一成員的花費。支援登入 Session 或 Bearer Management Key。
請傳入 year 與 month(1–12)。overview 與 by-team 未提供時會使用目前月份;by-model、by-member 與 export 則要求兩者都必須提供。為避免結果因端點而異,建議每次都明確傳入 year 和 month。
錯誤回應對照
允許模型(白名單)
限制您的組織、團隊或個別成員可呼叫哪些模型。適用於阻擋昂貴或未經審核的模型、強制執行模型規範,或將某個團隊限縮到單一供應商。
運作原理
- 三個獨立層級 — 組織、團隊、成員 — 各自維護一份清單(資料庫中為 String[])。
- 當三個層級皆為空時,所有模型都允許(預設行為)。
- 當其中一個或多個層級非空時,實際生效的清單是所有非空層級的交集 — 模型必須在每個受限層級都被允許才能通過。
- 變更會在數秒內生效(記憶體快取 60 秒 + Redis 快取 5 分鐘;更新時兩者皆會清除)。
Pattern 格式
- 完全比對 — 例如 openai/gpt-4o(僅限這個確切的模型)。
- 供應商萬用字元 — 例如 openai/*(任何 openai/ 前綴下的模型)。
- 僅接受小寫。每份清單最多 200 筆,每筆最多 100 字元。
管理位置
Org Portal → Allowed Models。org_admin 可編輯組織 / 團隊 / 成員清單;team_admin 可編輯自己的團隊以及團隊內的成員。
被阻擋時的錯誤回應
呼叫不被允許的模型會回傳 HTTP 403,body 如下:
管理 API
所有 endpoint 均接受 Web Session 或 Bearer Management Key(sk-bl-...)。PATCH 會整份取代清單;傳入 [] 即清空。
支出煞車(Spend Kill Switch)
雙視窗支出上限,當上游成本飆升時阻擋後續請求。設計用來在失控腳本、無窮迴圈或金鑰外洩濫用造成實際金額損失之前及時遏止。
運作原理
- 每個 scope 在 Redis 中追蹤兩個固定視窗:1 分鐘與 1 小時的上游成本(USD)。
- 若任一視窗的支出達到門檻,該 scope 後續所有請求都會被拒絕,直到該視窗於整點邊界重置為止。
- 預設值:每分鐘 $5、每小時 $20;預設為不啟用,需自行開啟。
- 計數器存放於 Redis 並設有 TTL — 自動恢復,組織 / 團隊 / 成員的觸發無需手動重置。
Scope(成員覆蓋團隊,團隊覆蓋組織)
每個層級可設定自己的門檻。解析順序為 member → team → org → 平台預設值 — 每個欄位(cbEnabled、cbMinuteUsd、cbHourlyUsd)取第一個非 null 的值。
- 組織層級 — 套用至該組織下的所有金鑰。於 Org Portal → Circuit Breaker 設定。
- 團隊層級 — 套用至標記給該團隊的所有金鑰。對這些金鑰會覆蓋組織層級的設定。
- 成員層級 — 僅套用於標記給該成員的金鑰。覆蓋團隊與組織層級。
觸發後的行為
觸發時請求會立即失敗(不會打到上游)。回應為 HTTP 429,body 如下:
稽核記錄
所有觸發事件以及所有設定變更都會記錄下來:
- 觸發事件 — actions org.cb.tripped / team.cb.tripped / org_member.cb.tripped。同一 scope+window 在每小時內去重為一筆,避免持續觸發時把記錄洗掉。
- 設定變更 — actions org.cb.update / team.cb.update / org_member.cb.update。記錄變更前後的值與操作者。
管理 API
Org admin 可透過 API 讀取與更新設定。所有 endpoint 均接受 Web Session 或 Bearer Management Key(sk-bl-...)。PATCH body 可傳入任意欄位子集;null 表示清除該欄位並回退至上一層。
API 金鑰輪換
定期更換 API 金鑰有助於安全。請先建立新金鑰、更新並驗證應用程式,再撤銷舊金鑰;此流程不保證零停機。
輪換步驟
- 建立新的 API 金鑰
- 更新您的應用程式或環境變數使用新金鑰
- 確認新金鑰正常運作
- 停用或刪除舊金鑰
活動匯出
將完整 API 使用歷史下載為 CSV,用於財務審計、成本分析或合規報告。
CSV 匯出
登入後前往「使用記錄」頁面,點擊右上角的「Export CSV」按鈕,即可下載完整歷史記錄為 CSV 檔案。無需呼叫 API。
CSV 欄位
JSON 用量查詢(API)
如需程式化存取,可透過 API 查詢按期間、模型或金鑰分組的聚合統計:
用量統計
透過 API 查詢詳細的使用量統計,包括 token 消耗、成本分析和請求歷史記錄。
回應欄位說明
| Field | Type | Description |
|---|---|---|
| model | string | Model ID used (e.g., openai/gpt-4o) |
| provider | string | 固定值:bazaarlink(BazaarLink) |
| prompt_tokens | number | Input tokens consumed |
| completion_tokens | number | Output tokens generated |
| total_tokens | number | Total tokens (prompt + completion) |
| reasoning_tokens | number | Reasoning tokens (for thinking models) |
| cached_tokens | number | Prompt tokens served from cache |
| cost | number | 此請求向客戶收取的美元金額 |
| duration_ms | number | End-to-end latency in milliseconds |
| throughput | number | Generation speed in tokens/sec |
| finish_reason | string | stop | length | content_filter | error |
| status | number | BazaarLink 回應狀態碼 |
| app_name | string | null | Application name (X-Title header) |
| key_name | string | API key name used for the request |
機構臨時方案 (Institution Plan)
「機構臨時方案」讓機構(學校、企業、研討會、政府單位等)能透過一把組織金鑰,發放短效 session token 給成員使用,成員不需建立平台帳號。組織以 email 網域(例 nthu.edu.tw)控管哪些成員可以申請 token,所有用量計入該組織帳戶。本頁以教育場景為例說明,相同機制適用於任何需要短期、多人臨時存取的單位。
架構概覽
- 機構 Key — 以 sk-edu- 開頭,由 org_admin 在組織金鑰頁建立。不能直接當 Bearer token 打 API(會收到 403)。
- Member Session Token — 以 edu-sess- 開頭,成員透過 email 驗證後取得,預設 24 小時有效,可被組織管理員撤銷。
- Allowed Domains — 組織設定哪些 email 網域 (精確比對,無 suffix 繞過) 可申請 session。
- 用量歸屬 — 所有成員請求都計入組織帳戶餘額;可按 session、email 在組織後台檢視用量。
步驟 1 — 申請開通機構臨時方案
聯絡 BazaarLink 業務或客服(sales@bazaarlink.ai / support@bazaarlink.ai),告知貴組織需要啟用機構臨時方案,並提供允許的 Email 網域清單(例如 nthu.edu.tw)。我們會為貴組織開通此功能:
步驟 2 — Org Admin 建立 機構 Key
進入組織 API Keys 頁,建立新金鑰時選擇「Education」類型(這是機構金鑰的內部代號)。系統會產生一把 sk-edu-... 金鑰,只在建立當下顯示一次,請保存好並透過官方管道分發給該組織成員。
步驟 3 — 成員申請驗證碼
成員可透過兩種方式申請驗證碼。(a) 前往 /access 頁面,輸入機構金鑰與機構 Email,由前端代為呼叫 API;(b) 直接呼叫 API:
/api/edu/request-code步驟 4 — 成員輸入驗證碼換 session token
/api/edu/verify步驟 5 — 用 session token 呼叫 API
把 edu-sess-... 當 Bearer token 打任何 chat / completions / embeddings 端點即可:
curl -X POST https://api.bazaarlink.ai/v1/chat/completions \
-H "Authorization: Bearer edu-sess-827d11a1ec67d175cfd4f67f929261f4" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Hello"}]
}'403 — Education keys cannot be used directly. Visit /access to exchange for a session.這是設計上的反向閘門,避免機構把長效 key 外流給成員個人保存。
組織後台 — 監控與撤銷
Education 類型組織的側邊欄會出現 Education 分頁,提供:
- Settings — 調整 allowed domains、TTL、每 email session 上限、每 session 請求 / Token / USD 配額。
- Sessions — 列出所有有效 / 已過期 / 已撤銷的 session,可按 email 篩選,逐筆撤銷。
- 用量統計 — 每個 session 的呼叫次數、token 消耗、累計費用。
安全性與限制
| 項目 | 預設 | 說明 |
|---|---|---|
| Session TTL | 24 小時 | session token 有效期,過期需重新驗證。 |
| 驗證碼 TTL | 15 分鐘 | email 驗證碼有效期。 |
| 驗證碼長度 | 6 位數字 | HMAC-SHA256 雜湊存於 Redis,不存明文。 |
| 猜測上限 | 5 次 | 超過則該驗證碼立即失效。 |
| request-code 冷卻 | 60 秒 | 同一 (key, email) 重複申請的最短間隔。 |
| 每 IP 限流 | 10 次 / 15 分 | 防 spam。 |
| 每 key 限流 | 100 次 / 小時 | 防大量發信。 |
| 每 email session 上限 | 5 | 可在 eduConfig 調整,避免單一信箱囤積 token。 |
| 撤銷生效 | ≤ 60 秒 | L1/L2 cache TTL;DB 撤銷後最多 60 秒內全節點生效。 |
計費與用量歸屬
所有成員透過 session token 產生的請求,費用 100% 計入該機構金鑰所屬組織的餘額,與 OpenAI / Anthropic 等供應商實際計費一致(按 token 計算)。組織後台可逐 session、逐 email、逐 key 查詢用量。
回報問題
透過回報問題、錯誤或建議幫助我們改善 BazaarLink。我們積極監控所有回饋管道。
如何回報
應包含的資訊
- 請求 ID(來自回應 id 欄位)
- 使用的模型和傳送的參數
- 預期行為與實際行為
- 時間戳記和問題頻率
- 錯誤訊息或 HTTP 狀態碼
社群資料(
:social)當問題與 X、Instagram、Threads、TikTok、抖音、小紅書、YouTube 或 Reddit 等社群平台有關時,在模型名稱後加上
:social。模型回答前,BazaarLink 會先取得該平台上相符的貼文、個人檔案或留言,作為參考資料提供給模型。若平台資料未能及時取得,請求會退回一般網路搜尋,確保您仍能得到回答。範例
curl https://bazaarlink.ai/api/v1/chat/completions \ -H "Authorization: Bearer $BAZAARLINK_API_KEY" \ -H "Content-Type: application/json" \ --max-time 60 \ -d '{ "model": "gpt-5.4-mini:social", "messages": [{ "role": "user", "content": "X 上最近有哪些關於 GPT-6 的貼文?" }] }'注意事項
:social請求可能需要 20 至 40 秒才開始回答;超過 40 秒會退回網路搜尋。請將用戶端逾時設定為至少 60 秒。:online為一般網路搜尋,速度不受影響。:online共用同一份每日免費搜尋額度(沒有餘額時每天 5 次,有餘額或訂閱時每天 10 次,於 UTC 00:00 重置)。超過額度後,每次查詢會依 Data API 價格表(見GET /v1/data/catalog)計費,並加上模型本身的 token 費用。退回網路搜尋的查詢,計費方式與:online相同。GET /v1/data/catalog所列的平台。與這些平台無關的查詢,會由網路搜尋回答。POST /api/v1/chat/completions、/api/v1/messages與/api/v1/responses,串流與非串流皆可,引用來源與:online相同。:online與:social不能同時用在同一個模型名稱上(會回傳 400invalid_web_search_options)。