ドキュメント
NextChat
セルフホスト版 NextChat は、OpenAI 用にすでに用意されている変数を使って Kunavo に接続します。OPENAI_API_KEY にキー、BASE_URL にオリジン、CUSTOM_MODELS にモデル ID を設定します。フォークもパッチも必要ありません。
3つの環境変数 — OPENAI_API_KEY、BASE_URL(ベアオリジン)、CUSTOM_MODELS — で、セルフホストNextChatから1つのキーを通じてClaudeとGPTを利用できます。
CODE=your-access-password
OPENAI_API_KEY=sk-kn-...
BASE_URL=https://api.kunavo.com
HIDE_USER_API_KEY=1
CUSTOM_MODELS=-all,+claude-sonnet-5@OpenAI,+claude-opus-5@OpenAI,+claude-haiku-4-5@OpenAI,+gpt-5-6-sol@OpenAI,+gpt-5-6-terra@OpenAIBASE_URL には オリジンだけを指定し、末尾に /v1 を付けません。ドキュメントのページにはこの末尾に関する説明はありませんが、記載されたデフォルト値が https://api.openai.com/v1 ではなく https://api.openai.com であることから分かります。パスの残りは NextChat が追加します。手動で /v1 を追加すると /v1/v1/chat/completions になり、404 が返されます。これは単なる誤入力ではなく、エンドポイント自体が壊れているように見えます。OPENAI_API_KEY を設定すると、サーバーは あなたのキーを使って Kunavo を呼び出し、CODE を通過した人は誰でもあなたの残高を消費します。HIDE_USER_API_KEY=1 には「ユーザーに独自の API キーを入力させたくない場合は、この値を 1 に設定してください」と記載されています。これを未設定にしておくと、各訪問者は設定画面で自分のキーを入力できます。共有インスタンスで必要なのはこの設定です。-all のプレフィックスと @OpenAI のサフィックスは、+、-、name=displayName だけを扱うドキュメントの一覧には記載されていません。同日に確認した NextChat 独自のモデル一覧コードに由来します。-all は組み込みリストを消去するため、ピッカーに Kunavo が受け付けない ID が表示されなくなります。@OpenAI は新しい ID をそれぞれ OpenAI プロバイダーに固定し、BASE_URL に送信します。サフィックスを付けずに ID を記述すると、その ID を名前とするプロバイダーが指定され、設定した経路を通りません。大文字と小文字は記載どおりです。ENABLE_BALANCE_QUERY も設定しないでください。残高確認では OpenAI 独自のダッシュボード課金ルートが呼び出されますが、これらは OpenAI 互換 API の範囲に含まれません。残高は /app/billing で確認できます。sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、NextChat設定が表示されます。手順
/app/keysでキーを作成してコピーします。キーは一度だけ表示されます。OPENAI_API_KEYにそのキーを設定し、BASE_URLにhttps://api.kunavo.comを設定します。Vercel ではプロジェクトの環境変数、Docker では-eフラグ、ローカル環境では.env.localに設定します。CODEにアクセス用パスワードを設定してください。設定しないと URL を知っている人なら誰でもアクセスでき、その利用料金はあなたのキーに請求されます。- 使用する ID を
CUSTOM_MODELSに列挙します。それぞれに@OpenAIサフィックスを付け、組み込み ID を除外するために-allから始めてください。 - 再デプロイしてください。環境変数はサーバーが読み込むため、Vercel プロジェクトでは新たなデプロイが必要で、コンテナでは再起動が必要です。実行中のインスタンスでは、変数を編集しただけでは何も変わりません。
- アプリを開き、モデルセレクターで指定した ID を選んでメッセージを送信します。返信が届けば、3つの変数は正しく設定されています。
NextChat の環境変数ページで2026年9月21日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。
クライアントをデバッグする前に確認すること
1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがNextChatで機能します。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."フィールドに入力するモデルID
すべてのテキストモデルにはモデルIDでアクセスできます。現在の一覧はGET /v1/models、価格付きのカタログはモデルページにあります。料金は100万トークンあたりのUSDで、入力 / 出力の順です。
| モデル ID | Kunavo 入力 / 出力 | NextChatでの位置付け |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 残高を気にせず続ける日常のスレッド、長い会話に |
claude-opus-5 | $3.50 / $17.50 | 週に一度の、上位モデルを使う価値がある質問に |
claude-haiku-4-5 | $0.70 / $3.50 | 要約、チャット名の変更、共有インスタンスで大半を占める短いやり取りに |
gpt-5-6-sol | $2.00 / $12.00 | 同じピッカー、同じキーで選べる2つ目のモデルファミリー |
gpt-5-6-terra | $0.70 / $4.20 | コンテキストウィンドウが決め手となる、長文書の貼り付けに |
よくある質問
NextChat をカスタム API エンドポイントに接続するにはどうすればよいですか?
セルフホスト環境の環境変数として、BASE_URL にエンドポイントのオリジンを、OPENAI_API_KEY に発行されたキーを設定します。NextChat 独自の環境変数ページでは BASE_URL を「OpenAI API リクエストのベース URL を上書き」と説明しています。パッチは不要です。アプリは引き続き OpenAI のワイヤ形式で通信し、送信先だけが変わります。その後、再デプロイしてください。値はサーバーで読み込まれるため、実行中のインスタンスには反映されません。
NextChatのBASE_URLの末尾に/v1は必要ですか?
いいえ。NextChatがバージョン部分とルートを付加するため、BASE_URLのデフォルト値として記載されているのは https://api.openai.com/v1 ではなく、オリジンのみの https://api.openai.com です。https://api.kunavo.com だけを指定してください。自分でサフィックスを追加するとパスが二重になり、404が返ります。エンドポイントが停止していると誤解しやすい状態です。
NextChatのモデル一覧にカスタムモデルを追加するには?
CUSTOM_MODELSにはカンマ区切りのリストを指定します。+はモデルの追加、-は非表示、name=displayNameは名前の変更を表します。NextChatが認識していないIDもその場で作成されるため、+claude-sonnet-5@OpenAIと指定すると、そのIDがモデル選択欄に追加されます。正確に反映すべき点は2つあります。リストの先頭を-allにして、組み込みのOpenAI IDを選んだときに失敗しないよう非表示にすること。そして、@OpenAIサフィックスを残し、IDがモデル名のプロバイダーではなくBASE_URL経由でルーティングされるようにすることです。
NextChatではサーバーのAPIキーを使うべきですか?それとも各ユーザーが自分のキーを入力できるようにすべきですか?
どちらも利用できます。選択の基準は、誰が支払うかです。OPENAI_API_KEYに設定したキーはサーバーのキーです。そのため、CODEパスワードを通過したすべての訪問者が、その1つの残高を消費します。非公開のインスタンスには適していますが、共有リンクでは費用がかさみます。HIDE_USER_API_KEYを未設定のままにすると、訪問者はSettingsで自分のキーを入力し、自分で支払えます。1に設定すると、その入力欄は非表示になります。いずれの場合も、ユーザーがブラウザー上で入力しない限り、キーがブラウザーに渡ることはありません。