BYOK ── Bring Your Own Key
Sonzai のホストインフラを使いつつ、プロバイダのトークン課金は自社アカウントに集約する。プロジェクト × プロバイダ単位で保管され、保存時暗号化。
BYOK は、Sonzai のチャット/セッション/抽出スタックをそのまま 利用しながら、裏側のプロバイダ呼び出しを 自社の API キー に 通すための仕組みです。トークン課金は自社のプロバイダ請求に乗り、 それ以外(メモリ、人格、後処理モデル、Sonzai プラットフォームの 請求)はこれまで通り動作します。
Custom LLM (BYOM) とは別物です。 BYOK は Sonzai が直結している既存のプロバイダ統合に、自社の課金キー だけを差し込みます。BYOM はチャット補完エンドポイント自体を 自分でホストしている別のエンドポイント に丸ごと置き換えます。
スコープ
BYOK キーは (プロジェクト × プロバイダ) 単位で保存されます。 1 プロジェクト 1 プロバイダにつきキーは 1 本だけで、エージェント 単位/セッション単位/呼び出し単位の BYOK キーはありません。 モデルの理解は単純です ── あるプロジェクトのチャット ターンが あるプロバイダに着地した場合、そのプロジェクトの該当プロバイダ用 BYOK キー経由で呼び出されます(どのエージェント・どのセッションが 発火源かに依りません)。
| 対象 | スコープ |
|---|---|
| 保存 | (project_id, provider) 単位 ── テーブルの主キー |
| リクエスト時の解決 | チャット呼び出しの project_id から、解決済みプロバイダのキーを参照 |
| 暗号化 | 保存時 AES-256、リクエストパス内でのみ復号 |
| API アクセス | テナント レベルの API キーは配下プロジェクトを自由に管理可。プロジェクト スコープのキーは要求された project_id と完全一致が必要 |
同じプロジェクト内で エージェント別に違うキーを使い分けたい 場合、 プロジェクトを分けてください ── 調整できるノブはこれだけです。
セットアップ経路
ワイヤ上は等価な 2 通りがあります。
1. ダッシュボード
単発のセットアップやローテーションには最速。
- platform.sonz.ai を開き、対象プロジェクトを選びます。
- Settings → BYOK を開きます。
- サポート対象の 4 プロバイダごとにカードが並びます。設定したい プロバイダのカードを開きます。
- プロバイダ(OpenAI、Google AI Studio for Gemini、xAI コンソール、 OpenRouter ダッシュボード)の API キーを貼り付けます。
- Save を押します。API と同じ同期プローブが走り、上流が キーを拒否した場合は保存自体が失敗してプロバイダのエラー メッセージがそのまま表示されます。不正キーは決して永続化 されません。
- 保存後はカードが「設定済み」状態に切り替わります ── 冒頭数文字
のプレフィックス、ヘルス バッジ(
healthy/unhealthy/unknown)、そして Replace / Test / Disable / Delete の ボタンが並びます。
ダッシュボードは SDK が叩くのと同じエンドポイントを呼んでいるので、 ここでできることは全部スクリプト化できます。
2. API / SDK
IaC、新規テナントの CI ブートストラップ、キー ローテーションの cron、自動テナント オンボーディング中のプロビジョニングなど。 エンドポイントは下に列挙します。
載せられるプロバイダ
プラットフォームがネイティブで話す 4 つです。
openaigeminixaiopenrouter(内部フォールバック経路 ── ここにキーを置くと、 プラットフォームが OpenRouter に落ちた時の呼び出しもカバー)
custom の BYOM エンドポイントは BYOK プロバイダではありません。
Custom LLM で設定してください。
保管とセキュリティ
- キーは 保存時に暗号化 され、復号はプラットフォームの
リクエスト パス内でのみ。API レスポンスでキー本体が返ることは
ありません ── List / Get は
api_key_prefix(先頭数文字)だけを 返すので、どのキーがどれかは識別できます。 - 書き込み時に 同期プローブ が走ります。Sonzai が上流に no-op 呼び出しを投げ、不正なキーは PUT が 400 で失敗します。 設定ミスは初回ユーザ チャットではなく セットアップ時点で 浮上 します。
- キーごとに ヘルス情報を追跡 します。読み取りのたびに
health_status、last_health_error、last_health_check_atを 返すので、ローテーションされた/無効化されたキーをユーザより 先に検知できます ── 監視に流して、チャット トラフィックが 失敗し始める前にアラートを上げてください。
エンドポイント
プロジェクト単位、(project_id, provider) で索引されます。一覧、
セット、無効化、削除、再テスト ── これだけです。
| Method | Path | 用途 |
|---|---|---|
GET | /api/v1/projects/{projectId}/byok-keys | 全キーを一覧(マスク済) |
PUT | /api/v1/projects/{projectId}/byok-keys/{provider} | プロバイダ用のキーをセット/ローテート(保存前にプローブ) |
PATCH | /api/v1/projects/{projectId}/byok-keys/{provider} | キーは触らず is_active を true/false に切替 |
POST | /api/v1/projects/{projectId}/byok-keys/{provider}/test | 保存済みキーを上流に対して再プローブ |
DELETE | /api/v1/projects/{projectId}/byok-keys/{provider} | キーを削除 |
リクエスト/レスポンスの完全な形は リファレンス → API → BYOK を参照。
プロジェクト API キーのスコープ
ダッシュボードまたは POST /api/v1/projects/{project_id}/api-keys で作成した
プロジェクト API キーは scopes 配列を持ちます。SDK 経由で BYOK をプログラム的に
操作するには、以下のスコープが必要です。
read:byok— プロバイダの一覧確認とヘルス状態の取得。write:byok— キーの登録/無効化/削除/再テスト。
テナント レベルの認証情報(Clerk ダッシュボード セッション、["*"] を持つ
デフォルト API キー)はすべての BYOK 操作に自動的にアクセスできます。
スコープ文字列は大文字・小文字を区別し、動詞を先頭に置く小文字形式です
(read:byok、BYOK:Read ではありません)。
キーをセットする
import { Sonzai } from "@sonzai-labs/agents";
const client = new Sonzai({ apiKey: process.env.SONZAI_API_KEY! });
const key = await client.byok.set("project_xyz", "openai", process.env.MY_OPENAI_KEY!);
console.log(key.api_key_prefix); // 例 "sk-..." ── キー本体は決して返らない
console.log(key.health_status); // 同期プローブ通過後は "healthy"一覧と確認
const keys = await client.byok.list("project_xyz");
for (const k of keys) {
console.log(k.provider, k.api_key_prefix, k.health_status, k.last_used_at);
}有効化/無効化/削除
PATCH はキーを差し替えずに is_active を切り替えます ── 一時的に
止めたいがキー本体は残しておきたい時に。DELETE はキーと履歴を
完全に消します。
// この BYOK キーを一時停止(以後の呼び出しはプラットフォーム課金に戻る)
await client.byok.setActive("project_xyz", "openai", false);
// 再テスト
const fresh = await client.byok.test("project_xyz", "openai");
// 完全に削除
await client.byok.delete("project_xyz", "openai");キャッシュと無効化
プラットフォームは性能のため、解決済みの BYOK キーを
(project_id, provider) 単位でプロセス内にキャッシュします。
Set / Patch / Delete のたびに無効化が走るので、ローテートしたキーは
再起動なしで次回呼び出しから反映されます。
BYOK が適用されないケース
そのチャット呼び出しが落ち着いたプロバイダに対し、プロジェクトに BYOK キーが存在しない場合、Sonzai はプラットフォーム自身のキーで 普通に課金します ── UX も SLA も同じです。BYOK は 加算的 な 機能で、キーをセットするとそのプロバイダだけを引き取り、消すと プラットフォーム キーに戻ります。
リファレンス
- Custom LLM (BYOM) ── プロバイダ パススルーではなく、エンドポイント自体を自分で持つ。
- Reference → API → BYOK ── すべてのエンドポイントの REST スキーマ。
モデル
Mind Layer が動かすモデル ── プロバイダ ルーティング、後処理モデル マップ、独自 LLM の持ち込み。
Custom LLM
Bring your own model while keeping the full managed experience — built-in tools, streaming, per-message extraction, personality evolution, and all behavioral systems. Sonzai calls your OpenAI-compatible endpoint instead of the default provider.