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% の台湾営業税。米ドル建てで記帳し、台湾ドル見積りと電子統一発票を提供します。セルフサービスの従量課金チャージに対応し、企業は月次請求(Net-30、応相談)も手配できます。
仕組み
- 消費(引き落とし):各 API コールは実際のトークン使用量に基づき、プロバイダーの公式米ドル定価で残高から差し引かれます。ゼロ加算で、消費時に追加費用はかかりません。
- チャージ(入金):台湾ドルはリアルタイム売りレートで米ドルに換算され残高に加算されます。チャージ時に 10% の取引手数料が徴収されます。
- • クレジットカード:別途 US$0.60 の定額手数料がかかり、領収書が発行されます。
- • 台湾ドル決済:5% の台湾営業税が加算され、台湾の電子統一発票が発行されます。
- • 銀行電信送金:大口・法人のチャージについては、お問い合わせのうえ送金と個別請求書の手配をいたします。
- 発票:電子統一発票に対応し、台湾の経費精算フローに適合します。調達手続きや月次請求が必要な企業は、企業向け条件(Net-30、応相談)を手配できます。
為替レートについて
Foreign-exchange conversion uses the real-time rate; monthly billing uses the rate at billing (statement) time, while prepaid top-ups convert at the top-up-time rate. The rate and timestamp are retained with billing records.
失敗したリクエストの課金保護
アップストリームのリクエストが失敗し、精算可能な使用量データがない場合、BazaarLink は予約額を全額自動返金します。ストリーム開始後に中断した場合でも、その試行の請求額は 0 ドルです。
- アップストリームに接続できない、リクエストが拒否される、または利用可能な結果が返らない場合
- 一部の内容が返った後でも、最終使用量データを受け取る前にストリームが中断した場合
- usage がない、またはすべて 0 の空の usage オブジェクトだけが返った場合
出力トークンが 0 でも必ず無料とは限りません
リクエストが正常に完了し、プロバイダーが有効な usage を返した場合、BazaarLink はその使用量を精算します。出力トークンだけで無料かどうかを判断しないでください。出力トークンが 0 でも、入力トークンまたは有効なアップストリーム報告コストがあれば課金されることがあります。最終請求額は usage.cost またはアクティビティ記録で確認してください。
クイックスタート
3つの統合方法
5分以内に始められます。BazaarLinkはOpenAI SDKと完全互換です —
ベースURL
https://bazaarlink.ai/api/v1OpenAI SDKの使用
BazaarLinkはOpenAI SDKと完全互換です。ベースURLとAPIキーを変更するだけで、他のコードはそのままです。
sk-bl-.✗ gpt-4.1 claude-sonnet-4.6 gemini-2.5-flash
上流キーの持ち込み(BYOK)
ご自身の上流プロバイダーAPIキー(OpenAIまたはAnthropic互換インターフェース)を個人アカウントや組織に紐付けると、対象リクエストはあなたのキーで上流に直接接続されます。シームレス(seamless)と厳格(strict)の2つのフォールバックモードを選択可能。個人はキーページのBYOKタブで、組織は組織設定で一元管理します。 BYOK設定へ →
コンテンツフィルタリング
APIトラフィックの双方向コンテンツ保護:プロンプトインジェクションを含むリクエストはブロック(400)され、リクエスト・レスポンス内の機密データ(APIキー、カード番号、身分証番号など)は自動的にマスクされます。ルールと除外リストはカスタマイズ可能で、使用統計も確認できます。 コンテンツフィルター設定へ →
OpenRouterからの移行
BazaarLinkのAPIはOpenRouter互換です — ほとんどの統合は2つの値を変更するだけで切り替えられます:ベースURLを https://bazaarlink.ai/api/v1 に、APIキーを sk-bl- で始まるBazaarLinkキーに変更します。
- ベースURL:https://openrouter.ai/api/v1 → https://bazaarlink.ai/api/v1
- APIキー:sk-or-... → sk-bl-...(/keys で作成)
- モデルID:同じ provider/model 形式(例:anthropic/claude-sonnet-4.6);全カタログは GET /api/v1/models で取得
- models[] フォールバック、プロバイダールーティング設定、ストリーミング、ツールコール、構造化出力は同じリクエスト形式を使用します
認証
すべてのAPIリクエストには、APIキーを含むAuthorizationヘッダーが必要です。
Authorization: Bearer sk-bl-YOUR_API_KEYAPIキーは ダッシュボードから取得できます。キーを安全に保管し、クライアントサイドのコードに公開しないでください。
オプションヘッダー
設計原則
BazaarLinkは3つのコア原則に基づいて設計されています:
1. 統一インターフェース
1つのAPI、1つのSDK、数百のモデル。OpenAI、Anthropic、Google Gemini、Meta Llamaなどをコード変更なしで切り替え — モデルIDを変更するだけ。
2. 価格最適化
BazaarLinkは選択したモデルに対して最もコスト効率の良いプロバイダーに自動ルーティング。使った分だけ支払い、米ドルで請求、完全な発票サポート。
3. 高可用性
自動フェイルオーバーにより、プロバイダーがダウンしてもリクエストはシームレスに再ルーティング。コード変更もダウンタイムもなし。
マルチモーダル
BazaarLinkはマルチモーダル入力をサポート — 対応モデルにテキストとともに画像、音声、ファイルを送信できます。コンテンツはアップストリームプロバイダーにそのまま転送されます。
対応モダリティ
例:
画像の送信
image_urlパーツを含むコンテンツ配列形式を使用します。対応フォーマット:PNG、JPEG、WebP、GIF(アニメーション含む)。1つのメッセージに複数の画像を含めることができます — それぞれ別のimage_urlパーツとして:
制限
BazaarLinkには2種類の独立した制限があります。リクエスト頻度によるレート制限と、アカウントの支出によるクレジット制限です。レート制限を超えるとHTTP 429、クレジットが尽きるとHTTP 402が返されます。
レート制限
レート制限はユーザーごと(キーごとではない)で、1分あたりのリクエスト数(RPM)で測定されます。日次上限はありません。ティアはアカウントのクレジット残高によって自動決定されます。
レート制限を超過すると、Retry-Afterヘッダー付きの429レスポンスが返されます。リトライ時にはエクスポネンシャルバックオフを実装してください。
レスポンスヘッダー
成功レスポンスにはクライアント側追跡用のレート制限ヘッダーが必ず含まれる:
X-RateLimit-Limit: 200 # Max requests per minute for your tier
X-RateLimit-Remaining: 198 # Remaining requests in current window
X-RateLimit-Reset: 1740000060 # Unix timestamp when the window resets
X-Request-Id: chatcmpl-abc123 # Unique request ID for debuggingクレジット制限
402レスポンスは、アカウント残高またはキーの支出上限が0に達したことを意味し、リクエストが速すぎるという意味ではありません。このレスポンスにはレート制限ヘッダーが含まれず、ストリーミング中に制限に達した場合はHTTPステータスの変化ではなくSSEエラーイベントとして返されます。
個人サーキットブレーカー
すべてのAPIキーに適用される、1分間・1時間の固定USD支出上限です。ウィンドウの閾値に達すると新規リクエストはHTTP 429を受け取り、時刻境界でウィンドウが自動リセットされます。
画像生成
modalities:["image"] を付けた /v1/chat/completions、または OpenAI DALL·E 互換の /v1/images/generations で画像を生成します。
curl -N https://bazaarlink.ai/api/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}'動画生成
非同期の3ステップフロー(submit → poll → content)。動画生成には30秒〜5分かかります。
curl https://bazaarlink.ai/api/v1/videos \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"alibaba/wan2.7-t2v","prompt":"a bird flying over mountains","duration":3}'
# → 202 { "id": "vjob_xxx", "status": "pending" }PDF入力
PDFをネイティブサポートするモデル(Claude、Geminiなど)に、メッセージで直接PDF文書を送信できます。BazaarLinkはファイルをそのままモデルに転送します — 通常のinput tokensとして課金、追加料金や追加処理はありません。
対応フォーマット
- PDFドキュメント(テキスト、画像、表、スキャン)
- Base64エンコードされたデータURL(`data:application/pdf;base64,...`)
- 複数ページドキュメント
- パスワードなしPDFのみ
動画入力
動画入力に対応するモデルに動画ファイルを送信し、分析、キャプション生成、シーンやイベントに関する質問への回答をさせます。直接URLまたはbase64データURIが使えます — URLは公開アクセス可能な動画に効率的、base64はローカルファイルや非公開動画向けです。
対応フォーマット
MP4 (H.264)MPEGMOVWebM管理APIキー
管理キーはプログラマティックなキー管理用に設計されています。標準APIキーの作成、一覧表示、更新、無効化、削除ができますが、AIモデルの呼び出しはできません。
管理キーの作成
Management API Keys ページに移動し、「Create」をクリックしてください — 通常の API Keys ページ内のタイプ選択ではなく、専用の別ページです。
キー一覧
サブキーの作成
キーの更新
キーの取り消し
DELETE https://bazaarlink.ai/api/v1/keys/:id
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# Returns 204 No Content on success残高照会
使用量照会
GET https://bazaarlink.ai/api/v1/usage?period=month
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# period: day | week | month | yearアプリ帰属
リクエストヘッダーでアプリケーションを識別して、使用量追跡、ダッシュボード表示、詳細な分析を有効にします。
利用可能なヘッダー
| Header | Description |
|---|---|
| HTTP-Referer | サイトURL、使用状況の追跡と分析用(任意) |
| X-Title | アプリ名、ダッシュボードに表示(任意) |
エラーコード
Error response format
Model inference endpoints return an OpenAI-compatible error envelope. The type field can vary or be omitted; use the HTTP status and error.code instead of parsing the message.
{
"error": {
"message": "Insufficient credits. Please top up to continue.",
"type": "invalid_request_error",
"code": "insufficient_credits"
}
}HTTP status and error.code
Before streaming, the HTTP status identifies the broad failure class. error.code is either that number or a stable string for a specific remedy. Prefer the string code when present, otherwise use the HTTP status.
Machine-readable billing codes
A 402 can represent different controls. Use these stable codes to choose the correct action.
Stable error.code catalog
These string codes are emitted by public inference and media paths. Branch on the string code when present; the HTTP status remains the broad failure class.
Rate limits, budgets, and emergency brakes
These controls can reject an otherwise valid request and require different recovery actions.
Compatibility note: rate-limit and emergency-brake paths currently emit numeric error.code values. Use HTTP status, Retry-After, and the documented response message.
Video and media resource state
Video validation commonly returns numeric code 400. Missing jobs return 404, retired models 410, unfinished video content 409, and invalid video byte ranges 416.
Retry policy
Retry only failures that may recover without changing the request. Honor Retry-After or use exponential backoff with jitter. Do not stack SDK and manual retries.
エラー処理
ストリーミングエラー形式
トークンがストリーミングされる前に発生したエラーは、JSONボディを持つ標準のHTTPエラーレスポンスを返します。
After a stream starts, the HTTP response is already 200. Parse each SSE data frame and treat a top-level error or choices[0].finish_reason === "error" as a failed, incomplete response.
ストリームが途中で失敗した場合、BazaarLink はトップレベルの error オブジェクトを含む最後のSSEイベントを送信し、その後に data: [DONE] が続きます。一部のアップストリームからそのまま転送されるチャンクでは、エラーが choice 側に載ることがあります(choices[0].finish_reason === "error")— 両方に対応してください。
ツールコール
ツールコール(ファンクションコールとも呼ばれる)は、定義した外部関数をモデルが呼び出せるようにします。モデルがツールを呼び出すタイミングを判断し、構造化された引数を生成します — コードが関数を実行し、結果を返して会話を続けます。
対応モデル
ほとんどのフロンティアモデルがツールコールをサポートしています。人気のある選択肢:
ツールの定義
各ツールはモデルが呼び出せる関数を記述するJSONオブジェクトです。parametersフィールドはJSON Schemaを使用します。
tool_choiceオプション
完全なフロー
ツールコールはマルチターンプロセスです:(1) ツール付きリクエストを送信 → (2) モデルがtool_callsを返す → (3) 関数を実行 → (4) 結果を送り返す → (5) モデルが最終レスポンスを生成。
並列ツールコール
一部のモデルは1つのレスポンスで複数のツールを呼び出せます。各ツールコールを処理し、すべての結果を返します:
ストリーミング中のツールコール
ストリーミング時、ツールコールは位置でインデックスされた部分的なデルタとして届きます——各デルタの引数文字列をインデックスごとに蓄積し、finish_reasonが"tool_calls"になった時点で呼び出しが完了したことを示します。
シンプルなAgentループ
モデルがツールを要求し続ける限り呼び出しを続け、最終的な回答を返したら停止する汎用パターン——無限ループを防ぐためmax_iterationsを使用します。
関数定義のベストプラクティス
- 具体的で説明的な名前を使う——単に weather ではなく get_weather_forecast のように。
- 関数の目的と使用すべきタイミングを明確に記述する——モデルは呼び出すかどうかをこのテキストのみで判断します。
- 可能な限り enum で値を制限し、description に例を含めて誤った引数の生成を減らす。
- 本当に必須のフィールドのみ required とし、任意フィールドは実際に省略可能にする。
構造化出力
モデルにスキーマに一致する有効なJSONを返させます。モデル出力をプログラムで解析する信頼性の高いアプリケーション構築に不可欠です。
方法1:response_format(JSON Schema)
で厳密なJSON Schemaへの準拠を強制:
ヒント
- 明確でわかりやすいプロパティ名を使用 — モデルはそれをコンテキストとして使用します。
- スキーマプロパティに説明を追加してモデルを導きましょう。
- strict: trueを設定するとスキーマ準拠が保証されます(レイテンシがわずかに増加する場合があります)。
- スキーマはシンプルに — 深くネストされたスキーマは出力品質を低下させる可能性があります。
- 異なるモデルでテスト — モデルによって複雑なスキーマの処理能力が異なります。
アシスタントプリフィル
メッセージ配列の最後に未完成の assistant メッセージを追加し、互換性のあるモデルルートに続きを生成するよう要求します。
メッセージ変換
モデルのコンテキスト制限に収まるようにメッセージを自動変換。メッセージがモデルのコンテキストウィンドウを超えた場合、変換が中間のメッセージを除去して会話を効率的に圧縮します。
使い方
変換タイプ
デフォルト動作
≤8kコンテキストのモデルではmiddle-outが自動的に有効。より大きなコンテキストモデルでは明示的に有効化してください。Anthropic Claudeモデルはtransforms設定に関係なく、1,000メッセージ制限を自動的に適用します。
ゼロデータ保持
BazaarLinkはデフォルトでメッセージ内容を保存しません。このページではデータの取り扱い方法を説明します。機密データを処理するアプリケーションに適しています。
現在のデータ取り扱い
- メッセージ内容:デフォルトでは保存されず、処理後にメモリから破棄
- 課金メタデータ:トークン数、タイムスタンプ、モデルID
- 使用ログ:リクエスト統計のみ、メッセージ内容なし
- アップストリーム転送:メッセージはアップストリームプロバイダーに転送 — 各プロバイダーのプライバシーポリシーに従う
プロンプトキャッシング
プロンプトキャッシングは以前に計算されたプロンプトトークンを再利用し、コストとレイテンシを大幅に削減します — 特に大きな繰り返しシステムプロンプトを持つアプリケーションに効果的です。
仕組み
設定が必要かどうかはプロバイダーによります。OpenAI系モデルは長く繰り返されるプロンプトプレフィックスを自動でキャッシュします — リクエストの変更は不要です。Claude(Anthropic)モデルはリクエストに明示的な cache_control ブレークポイントが含まれる場合のみキャッシュされます。BazaarLink はこれを代わりに追加しないため、マーカーがない Claude リクエストは決してキャッシュされません。BazaarLink は送信されたキャッシュマーカーをそのまま転送し、使用量レスポンスで実際のキャッシュ読み書きトークン数を報告します。
推論トークン
推論モデル(DeepSeek R1、o1シリーズなど)は最終回答を生成する前に内部で思考します。これらの内部トークンは推論トークンと呼ばれ、別途課金されます。
レスポンスからの推論トークンの読み取り
思考モード制御
一部のモデルは「思考」モードの切り替えをサポートしています。思考モードは最終回答の前に内部推論トークンを生成し、トークン消費が増加する代わりに品質が向上します。
| モデルファミリー | パラメータ | デフォルト |
|---|---|---|
| qwen3-* | enable_thinking: boolean | false(プラットフォームデフォルト) |
| openai/o1, o3, o4-mini | 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+)は一般に生成が遅い
- プロバイダーの負荷:プロバイダーや時間帯によって変動
- トークン数:max_tokensが高いほどコンプリーション時間が長い
- ストリーミング vs 非ストリーミング:stream: trueは最初のトークンをより速く配信
- コンテキスト長:非常に長いコンテキストは前処理時間を増加
最適化のヒント
- 体感レイテンシを改善するにはストリーミング(stream: true)を推奨
- 高スループットプロバイダーを選択するには:nitroバリアントを使用
- レイテンシに敏感なシナリオではより小さなモデル(flash/mini/haiku)を選択
- 最低レイテンシのプロバイダーを自動選択するにはprovider.sort: "latency"を使用
- 繰り返しリクエストのレイテンシを削減するにはプロンプトキャッシングを有効化
稼働率最適化
BazaarLinkは複数のレイヤーでAPI可用性を最大化:自動フェイルオーバー、サーキットブレーカー、プロバイダーヘルスモニタリング。
可用性メカニズム
- サーキットブレーカー:障害の発生したプロバイダーを自動検出して隔離
- 自動フェイルオーバー:バックアッププロバイダーにシームレスに切り替え — コード変更不要
- プロバイダーヘルスモニタリング:プロバイダーごとのエラーレートとレイテンシを継続的に追跡
- リトライロジック:一時的なエラー(5xx)は自動リトライ
サーキットブレーカー
ガードレール
APIリクエストにコンテンツ安全機構を追加し、有害なコンテンツをフィルタリングしてコンプライアンスポリシーを施行します。BazaarLinkが現在提供するカスタマイズ可能なコンテンツフィルターガードレールは組織(Organization)レベルのみです。個人(非組織)APIキーには対応する設定がなく、コンテンツ安全は各アップストリームモデルプロバイダー自身の組み込み安全システムに完全に依存します。
計画中の機能(個人・組織キーいずれにも未提供)
現在の動作
個人APIキー:すべてのアップストリームプロバイダーには独自のコンテンツ安全システムがあり、コンテンツフィルターをトリガーしたモデルレスポンスはfinish_reason: "content_filter"で返され、BazaarLinkは追加のフィルタリングを行いません。組織APIキー:org_adminは「コンテンツフィルターガードレール」でカスタムルール(ブロック/編集/記録)を設定でき、テキストがモデルに到達する前に適用されます。
Cursor IDE Integration
BazaarLink を Cursor の OpenAI Override URL に設定し、即座に Cursor 内ですべてのモデルを呼び出せます。Responses API の自動変換、ツール形式の正規化、Claude モデル向けの bz- プレフィックス規約をサポートします。
クイックセットアップ
Cursor で 設定 → モデル を開き、次の手順を行います:
- Override OpenAI Base URL を https://bazaarlink.ai/v1 に設定
- Override OpenAI API Key を sk-bl-... の BazaarLink キーに設定
- 使いたいモデル名を入力 — Claude モデルは下記の bz- プレフィックスを参照。
bz- プレフィックス(Claude モデル用)
Cursor のクライアント側バリデーションは claude- で始まるモデル名を Cursor 自身の Anthropic 連携に転送し、Override URL を経由しません。Cursor のリクエストを BazaarLink に送らせるには、モデル名の前に bz- を付けます。サーバーがプレフィックスを取り除き、残りを 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 と入力すると、サーバー側で anthropic/claude-sonnet-4.6 にマッピングされます。Cursor にあるモデルが GPT ファミリーだと思わせて Override URL を経由させつつ、実際は Claude を提供したい場合に便利です。
自動的に処理される内容
リクエストが /api/v1/chat/completions に届くと、BazaarLink は以下の互換性変換を透過的に適用します — クライアント側で何もする必要はありません:
- Responses API ボディを自動検出 — body に messages の代わりに input がある場合、Chat Completions 形式に変換されます(Cursor は GPT ファミリーのモデルに対して Responses API 形式を送信)。
- フラットなツール定義をラップ — Cursor Agent は function ラッパーなしの { name, description, parameters } を送信します。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 ネイティブのボディでは保持されます。
Cursor Agent モード
ツール呼び出しは標準の Chat Completions ツール呼び出しフローで動作します。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-v3.2ルーティング優先度
リクエストを送信すると、BazaarLinkは次の順序でアップストリームプロバイダーを解決します:
- 完全一致 — 完全なモデルIDに一致するモデルルートを検索
- プロバイダーワイルドカード — provider/*ルートにフォールバック(例:openai/*)
- グローバルワイルドカード — *ワイルドカードルートにフォールバック
- デフォルトプロバイダーキー — カタログ登録済みモデルに限り、有効でデフォルト指定されたキーを使用
利用可能なすべてのモデルは モデルページで閲覧できます。
オートルーター
Auto Router v3 はリクエストを14個のタスク tier のいずれかに評価し、その tier に現在設定されている primary と fallback チェーンを使用します。有料表と無料表は管理画面で別々に管理できます。
- auto — 有料ルーティング表を使用し、成功した実モデルの公開価格で課金されます。
- auto:free — 無料ルーティング表を使用し、無料枠内は 0 ドルです。枠を超えると、残高のあるアカウントは有料 fallback を無効にしていない限り有料 auto に切り替わる場合があります。
使い方
モデルを"auto"(有料)または"auto:free"(無料)に設定して自動ルーティングを有効化:
curl https://bazaarlink.ai/api/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 です。信頼度が低い境界では難易度を一段上げます。
- tier 評価:messages、tools、長さ、キーワード、構造的特徴から14 tier の1つを選択
- 強制ルール:画像、形式推論、専門タスクは tier を直接指定可能
- ルート参照:現在の primary と最大5件の fallback を読み、無効な tier は503を返す
- 実行:primary の後、設定順に fallback を試行
- レスポンス追跡:解決されたモデルはレスポンスボディとX-Auto-Resolved-Modelヘッダーで返される
現在のモデル表
以下は推論と管理画面が使用する同じライブ設定です。各 tier の primary、fallback 順序、有効状態は再デプロイなしで変更できます。
auto
auto:free
一部のモデルはレート制限付きの無料枠を提供しています。無料資格はプラットフォームがモデル単位で付与します — 通常のモデルIDでそのまま呼び出せます。:free サフィックスは任意のエイリアスです(有料モデルに付けても無料にはなりません)。
モデルバリアント
任意のモデルIDにサフィックスを追加してルーティング動作を変更。BazaarLinkは7種類のバリアントをサポート。
独立モデルID
これらのバリアントは独自の料金と機能を持つ別々のモデルとして存在します。BazaarLinkは最初にサフィックス付きの完全なモデルIDを試し、次にベースモデルにフォールバックします。
:free
:extended
:thinking
:exactoルーティングショートカット
これらのサフィックスはモデルのアイデンティティを変更せずにプロバイダー選択を変更します。サフィックスはルートマッチング前に除去されます。
:floor # lowest listed input price first
:nitro # throughput-oriented shortcut
:online # enable web-search routingマルチプロバイダー動作
バリアントをサポートするアップストリームでは、サフィックスはそのまま転送されます。直接プロバイダー(直接OpenAI、Fireworksなど)では、サフィックスが除去され、BazaarLinkがローカルでルーティングを処理します。
無料モデル
一部のモデルはレート制限付きの無料枠を提供しています。無料資格はプラットフォームがモデル単位で付与します — 通常のモデルIDでそのまま呼び出せます。:free サフィックスは任意のエイリアスです(有料モデルに付けても無料にはなりません)。
- 通常のモデルID(例: deepseek/deepseek-v4-flash)で呼び出してください。無料枠内のリクエストは自動的に無料で処理されます。
- 無料利用はユーザーごとに毎分リクエスト数(RPM)と1日の上限で制限されます。上限はアカウント階層(未入金 / 入金済み)に応じて変動します。
- 無料枠を超過してもクレジット残高があれば、リクエストは表示価格の有料枠で自動的に継続されます。X-Free-Fallback: false を送ると自動フォールバックを無効化し、代わりに429が返ります。残高がない場合、超過リクエストは429を返します。
- GET /api/v1/models は無料枠のあるモデルごとに :free エントリを一覧します。auto:free は常に無料モデルへルーティングされます。
現在無料枠があるモデル
これらのモデル ID をそのまま指定すると無料枠が適用されます。ラインナップは随時変わるため、最新の一覧は API で取得してください。
deepseek/deepseek-v4-flash無料枠の上限
1日あたりの枠 = 上表のリクエスト枠 × アカウント階層倍率で、無料モデルごとに個別に計算されます。auto:free にはさらに IP 単位の並行上限があります。個々のモデルにはプラットフォーム側でより厳しい/緩い上限が設定される場合があり、実効値はモデルページの「無料枠」ブロックに表示されます。
無料枠を使い切った後
枠を使い切っても、残高があればリクエストはそのモデルの有料価格で自動的に継続され(サービスは中断しません)、通常の有料呼び出しと同じ料金が発生します。課金より失敗を望む場合は X-Free-Fallback: false ヘッダーを送るか、キー設定で自動切替を無効にしてください。その場合は 429 が返ります。残高がない場合、超過リクエストは常に 429 を返します。
# Return 429 instead of switching to paid routing
-H "X-Free-Fallback: false"組織管理
BazaarLinkの組織は3階層アーキテクチャを使用:組織→チーム→メンバー。クレジットは組織レベルで保管され、各チームとメンバーに月次支出上限を設定可能。APIリクエストはメンバー→チーム→組織のクレジットを順に確認します。
3階層予算システム
すべてのAPIリクエストで3つの予算レイヤーが順に確認されます。いずれかのレイヤーを超過するとHTTP 429が返されます:
- メンバー月次予算(OrgMember.monthlyBudget)
- チーム月次予算(Team.monthlyBudget)
- 組織クレジット残高(Organization.credits)
使用量レポート
組織ポータルのレポートページでは、4つのディメンションにわたる月次支出分析を提供:
- 概要:総支出、マージン率、日次トレンドチャート
- チーム別:チームごとの支出、シェア%、モデル内訳、予算稼働率
- モデル別:モデルごとの支出、平均価格($/1Mトークン)
- メンバー別:メンバーごとの支出 — org_adminのみ
すべてのビューがBOMプレフィックス付きCSVエクスポートをサポートしており、Excel直接互換です。
組織の作成と管理
- 設定→組織→新しい組織を作成
- 組織名を選択して管理エリアを開く
- 組織ポータルでチームを作成(オプション:コストセンターコードと月次予算)
- メールでメンバーを招待し、ロールとチームを割り当て
- メンバー用のAPIキーを発行 — 使用量は正しいチーム/メンバーに自動タグ付け
- レポートページでチーム、モデル、メンバー別の月次支出を確認
メンバーロール
What else can an organization manage?
Beyond members and teams, the organization management area provides:
- APIキー:組織、チーム、メンバー用のキーを作成し、利用可能なモデルを制限
- コンテンツフィルタリング:モデルへ送信する前に機密テキストをブロック、編集、または記録
- 許可モデル:組織、チーム、メンバー、個別APIキーごとにモデルを制限
- 予算と緊急停止:月間上限と分・時間単位の支出保護を設定
- レポートと請求:支出、モデル利用、チーム配賦、残高、与信限度、支払いを確認
- 変更・セキュリティログ:設定変更、コンテンツフィルター検知、セキュリティイベントを追跡
- 教育機関向けプランでは、学生セッションとクォータも管理できます
Content filtering
Organization-owned rules inspect text before it reaches a model. An org_admin can enable, edit, and test them in Settings.
- block: reject with HTTP 403
- redact: replace matches with [REDACTED]
- flag: send unchanged and record an audit event
- Built-in sensitive-data and prompt-injection templates plus custom keyword or regex rules
- Up to 100 safety-checked rules with a test preview
管理API(v1)
/api/v1/orgs/エンドポイントはBearer管理キー(sk-bl-...)とセッションCookieの両方を受け付け、ブラウザセッションなしでサーバー間の組織管理を可能にします。
組織
/api/v1/orgs呼び出し元が所属するすべての組織を、role と joinedAt 付きで一覧する。
/api/v1/orgs/:orgIdteam および member 数を含む組織の詳細を取得する。
curl https://bazaarlink.ai/api/v1/orgs \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY"チーム
/api/v1/orgs/:orgId/teamsメンバー数付きでチームを一覧する。name 順。
/api/v1/orgs/:orgId/teams/api/v1/orgs/:orgId/teams/:teamId部分更新 — 変更するフィールドのみを含めること。
/api/v1/orgs/:orgId/teams/:teamId# Create a team
curl https://bazaarlink.ai/api/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}'メンバー
/api/v1/orgs/:orgId/membersネストされた user (id/name/email) と team 情報を含む全メンバーを一覧する。
/api/v1/orgs/:orgId/membersメールアドレスにBazaarLinkアカウントがない場合は404。既にメンバーの場合は409。デフォルトロール:member。
/api/v1/orgs/:orgId/members/:memberIdrole、teamId、または monthlyBudget の部分更新。
/api/v1/orgs/:orgId/members/:memberId対象が最後のorg_adminの場合は400を返します。
レポートAPI
月次支出データをプログラムで照会。org_adminとbilling_viewerがアクセス可能。ウェブセッションとBearer管理キーの両方を受け付け。
クエリパラメータ:year(デフォルト:現在の年)、month(デフォルト:現在の月、1〜12)。
エラーレスポンス対応表
許可モデル (ホワイトリスト)
組織・チーム・個人メンバーが呼び出せるモデルを制限する。高コストモデルや未検証モデルのブロック、モデル標準の強制、チームを単一プロバイダーに限定する用途に有用。
動作の仕組み
- 3 つの独立したレイヤー (組織・チーム・メンバー) がそれぞれ独自のリスト (DB 内では String[]) を保持する。
- 3 レイヤーすべてが空の場合、全モデルが許可される (デフォルト動作)。
- 1 つ以上のレイヤーが非空の場合、実効リストは非空レイヤーの積集合 — 制限のかかった全レイヤーで許可されたモデルのみ通過する。
- 変更は数秒以内に反映される (60 秒の in-memory + 5 分の Redis キャッシュ。更新時に両方クリア)。
パターン形式
- 完全一致 — 例: openai/gpt-4o (この厳密なモデルのみ)。
- プロバイダーワイルドカード — 例: openai/* (openai/ プレフィックス配下の任意のモデル)。
- 小文字のみ。1 リスト最大 200 件、1 件あたり最大 100 文字。
管理場所
Org Portal → Allowed Models。org_admin は組織 / チーム / メンバーのリストを編集可能。team_admin は自身のチームとその配下メンバーのみ編集可能。
ブロック時のエラーレスポンス
許可されていないモデルへの呼び出しは HTTP 403 と以下の body を返す:
管理 API
全エンドポイントは Web Session または Bearer Management Key (sk-bl-...) を受け付ける。PATCH はリスト全体を置換する。クリアするには [] を渡す。
サーキットブレーカー (Spend Kill Switch)
Upstream コストが急増した際に後続リクエストをブロックする、デュアルウィンドウ方式の消費上限。暴走スクリプト、無限ループ、漏洩キーの不正利用が実損になる前に封じ込める設計。
動作の仕組み
- スコープごとに 2 つの固定ウィンドウ (1 分 / 1 時間の upstream コスト USD) を Redis で追跡。
- いずれかのウィンドウがしきい値に達すると、当該スコープの後続リクエストはウィンドウがリセットされるまで全て拒否される。
- デフォルト: $5 / 分、$20 / 時間、デフォルトで有効。
- カウンタは TTL 付きで Redis に保持される — 復旧は自動で、組織 / チーム / メンバーのトリップに手動リセットは不要。
スコープ (member > team > org の順で上書き)
各レイヤーは独自のしきい値を設定できる。解決順序は member → team → org → プラットフォームデフォルト — フィールドごとに最初の non-null 値が採用される (cbEnabled / cbMinuteUsd / cbHourlyUsd)。
- Org レベル — 組織配下の全キーに適用。Org Portal → Circuit Breaker で設定。
- Team レベル — そのチームにタグ付けされた全キーに適用。当該キーに対して org を上書きする。
- Member レベル — そのメンバーにタグ付けされたキーのみに適用。team と org を上書きする。
トリップ時の挙動
トリップ中はリクエストが fail fast (upstream は呼び出されない)。レスポンスは HTTP 429 と以下の body:
監査ログ
全てのトリップイベントと全ての設定変更が記録される:
- トリップイベント — action は org.cb.tripped / team.cb.tripped / org_member.cb.tripped。スコープ + ウィンドウごとに 1 時間 1 件に重複排除されるため、継続トリップでログが氾濫しない。
- 設定変更 — action は org.cb.update / team.cb.update / org_member.cb.update。変更前後の値と実行者を記録する。
管理 API
Org admin は API 経由で設定の取得 / 更新が可能。全エンドポイントは Web Session または Bearer Management Key (sk-bl-...) を受け付ける。PATCH の body には任意のサブセットを送ればよく、null を渡すとそのフィールドはクリアされ親レイヤーにフォールバックする。
APIキーローテーション
APIキーの定期的なローテーションはセキュリティのベストプラクティスです。BazaarLinkはダウンタイムゼロのキーローテーションをサポート — 新しいキーを先に作成し、移行してから古いキーを取り消します。
ローテーション手順
- 新しいAPIキーを作成
- アプリケーションまたは環境変数を新しいキーに更新
- 新しいキーが正常に動作していることを確認
- 古いキーを無効化または削除
アクティビティエクスポート
財務監査、コスト分析、コンプライアンスレポート用に、完全なAPI使用履歴をCSVでダウンロード。
CSVエクスポート
ログインしてログページに移動。右上のCSVエクスポートボタンをクリックして、完全な履歴をCSVファイルとしてダウンロード。API呼び出しは不要です。
CSVカラム
JSON使用量API
プログラマティックアクセスには、期間、モデル、キー別にグループ化された集計統計を照会:
使用量会計
トークン消費量、コスト分析、リクエスト履歴を含む詳細な使用統計をAPIで照会。
レスポンスフィールドリファレンス
| Field | Type | Description |
|---|---|---|
| model | string | Model ID used (e.g., openai/gpt-4o) |
| provider | string | Upstream provider name |
| 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 | Total cost in USD credits |
| 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 | HTTP status code from upstream |
| app_name | string | null | Application name (X-Title header) |
| key_name | string | API key name used for the request |
Institution プラン (機構臨時方案)
Institution プランでは、あらゆる機関(学校、企業、カンファレンス、政府機関など)が組織レベルの 1 つのキーから所属メンバーに短命のセッショントークンを発行できる。メンバーがプラットフォームのアカウントを作成する必要はない。組織はメールドメイン(例:nthu.edu.tw)でトークン発行可能なメンバーを制御し、すべての利用は組織アカウントに課金される。本ページは教育シナリオを例として説明していますが、同じ仕組みは短期間・複数ユーザーの一時アクセスを必要とするあらゆる機関に適用できる。
アーキテクチャ概要
- 機関 Key — sk-edu- で始まる。組織のキーページで org_admin が作成する。Bearer トークンとして API を直接呼び出すことはできない — 直接呼び出しは 403 を返す。
- Member Session Token — edu-sess- で始まる。学生がメール認証後に取得する。デフォルト有効期限は 24 時間で、組織管理者が取り消せる。
- Allowed Domains — セッションをリクエストできるメールドメインを組織が設定する(完全一致、サフィックスバイパス不可)。
- Usage attribution — 学生のすべてのリクエストは組織アカウントに課金される。利用状況は組織ダッシュボードでセッションごと・メールごとに確認できる。
ステップ 1 — プラットフォーム管理者が組織タイプを Education に設定
sales@bazaarlink.ai / support@bazaarlink.ai から対象の組織を見つけ、「Org Type」タブに切り替えて Education を選択し、許可するメールドメインを設定する:
ステップ 2 — 組織管理者が 機関 Key を作成
組織の API Keys ページで、新しいキーを作成する際にキータイプとして「Education」を選択する。システムは sk-edu-... キーを生成し、一度だけ表示する — 保存して、その組織の学生に公式チャネル経由で配布する。
ステップ 3 — 学生が認証コードをリクエスト
学生は /access に行き edu キー + 学校のメールアドレスを入力する。または直接 API を呼び出す:
/api/edu/request-codeステップ 4 — 学生がコードを送信してセッショントークンと交換
/api/edu/verifyステップ 5 — セッショントークンで API を呼び出す
edu-sess-... トークンを Bearer トークンとして、任意の chat / completions / embeddings エンドポイントに対して使用する:
curl -X POST https://bazaarlink.ai/api/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.これは意図的な逆ゲートであり、学校が長命のキーを個々の学生に漏らすことを防ぐ。
組織ダッシュボード — モニタリングと取り消し
Education タイプの組織はサイドナビに Education タブが表示され、次の機能を提供する:
- Settings — 許可ドメイン、TTL、キーごと・メールごとの最大セッション数、セッションごとのリクエスト / トークン / USD クォータを調整する。
- Sessions — アクティブ / 期限切れ / 取り消し済みのすべてのセッションをリスト表示。メールでフィルタ可能。個別セッションを取り消せる。
- Usage stats — セッションごとの呼び出し回数、トークン消費量、累積コスト。
セキュリティと制限
| 項目 | デフォルト | 説明 |
|---|---|---|
| Session TTL | 24 時間 | セッショントークンの有効期限。期限切れのセッションは再認証が必要。 |
| 認証コード TTL | 15 分 | メール認証コードの有効期限。 |
| 認証コード長 | 6 桁 | Redis に HMAC-SHA256 ハッシュとして保存。平文では保存しない。 |
| 推測回数制限 | 5 回 | これを超えるとコードは即座に無効化される。 |
| request-code クールダウン | 60 秒 | 同じ (key, email) に対する繰り返しリクエストの最小間隔。 |
| IP ごとのレート制限 | 10 / 15 分 | スパム対策。 |
| キーごとのレート制限 | 100 / 時間 | 大量メール送信を防ぐ。 |
| メールごとの最大セッション数 | 5 | eduConfig で設定可能。1 つのメールアドレスがトークンを抱え込むのを防ぐ。 |
| 取り消しの伝播 | ≤ 60 秒 | L1/L2 キャッシュ TTL。DB での取り消し後、すべてのノードに伝播するまで最大 60 秒かかる。 |
課金と利用帰属
セッショントークン経由のすべてのリクエストは、edu キーを所有する組織に 100% 課金される。これは上流プロバイダ(OpenAI / Anthropic 等)の課金方式(トークン単位)に沿ったもの。組織ダッシュボードはセッション別、メール別、キー別のドリルダウンに対応する。
フィードバック報告
問題、バグ、提案を報告してBazaarLinkの改善にご協力ください。すべてのフィードバックチャネルを積極的に監視しています。
報告方法
含めるべき情報
- リクエストID(レスポンスのidフィールドから)
- 使用したモデルと送信したパラメータ
- 期待される動作と実際の動作
- タイムスタンプと問題の発生頻度
- エラーメッセージまたはHTTPステータスコード