BestPrivateAI API — リファレンス
OpenAI互換エンドポイント1つ、モデル1つ、key1つ。すでに/v1/chat/completionsと通信しているコードなら、base URLとkeyを差し替えるだけで当社と通信できる。
base URLと認証
Base URL: https://api.bestprivateai.com/v1
Header: Authorization: Bearer sk-…
keyはkeyページで作成する。keyは作成時に一度だけ表示され、こちら側ではそのハッシュと末尾6文字を保存する。keyは必ずHTTPS経由、Authorizationヘッダーでのみ送信すること — URLには絶対に含めない。
すべてJSON(Content-Type: application/json)。レスポンスはOpenAIのスキーマに従うため、公式のopenai SDKやOpenAI互換のクライアントはそのまま動作する。
モデル
GET /v1/models
{ "object": "list",
"data": [ { "id": "notrack-uncensored", "object": "model", "owned_by": "notrack" } ] }
モデルはnotrack-uncensoredの1つのみ — 当社独自のコンパニオンチューン、当社独自のハードウェアで稼働している。modelに何を渡してもこのモデルにルーティングされる。ログを当社側と一致させるため、公開idを使うこと。
Chat completions
POST /v1/chat/completions
{
"model": "notrack-uncensored",
"messages": [
{ "role": "system", "content": "You are Mira, a wry bartender in 1920s Berlin." },
{ "role": "user", "content": "Evening. What's good tonight?" }
],
"max_tokens": 400,
"temperature": 0.9
}
レスポンス — 標準の形式で、usageに実際のトークン数が入る(課金の基準はこの値)。
{
"id": "chatcmpl-…", "object": "chat.completion", "model": "notrack-uncensored",
"choices": [ { "index": 0, "finish_reason": "stop",
"message": { "role": "assistant", "content": "…" } } ],
"usage": { "prompt_tokens": 41, "completion_tokens": 118, "total_tokens": 159 }
}
会話を統制するのはあなたのsystem promptだ。 こちらが先頭に追加するのは正確に1行のみ — モデルの正体(BestPrivateAI製のnotrack-uncensoredであること)— それ以外は何も付けない。ルールもトピックフィルタもない。あなたのsystem messageがそれに続き、ペルソナ、スタイル、その他すべてを決める。唯一の例外はコンテンツポリシーにある。
ストリーミング
"stream": trueを設定し、OpenAIと同じようにserver-sent eventsを読む。最後のチャンクにはusageが含まれる(stream_optionsをリクエストしたかどうかにかかわらず常に含める)、続いてdata: [DONE]。
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Ev"}}]}
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"ening"}}]}
…
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":41,"completion_tokens":118,"total_tokens":159}}
data: [DONE]
パラメータ
| フィールド | 備考 |
|---|---|
messages | 必須。system、user、assistantのロール。現時点ではテキストのみ — 画像パーツは拒否される。 |
model | notrack-uncensoredを使う。 |
stream | SSEにはtrue。stream_options.include_usageは常にオン。 |
max_tokens | completionの上限。prompt + completionは64,000トークンのウィンドウに収まる必要がある。 |
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, n | OpenAIと同様にモデルへそのまま渡される。temperatureを送らない場合、当社のチャットと同じ0.85を使う。n > 1はoutputコストを倍率で増やす。 |
tools, tool_choice | 対応: auto、none、required、または名前付き関数。返信にはtool_callsとfinish_reason: "tool_calls"が含まれる。結果はrole: "tool"メッセージとして送り返すこと。tool使用時、ストリーミングの返信はトークン単位ではなく呼び出しごとに1チャンクで届く。 |
response_format | {"type": "json_object"}は対応している(欲しいJSONの形をpromptで指定する)。json_schemaと旧来のfunctionsフィールドは対応していない。 |
上限とレスポンスヘッダー
| 上限 | 値 | 超えた場合 |
|---|---|---|
| key単位の同時リクエスト数 | 8 | 429 concurrency |
| key単位の1分あたりリクエスト数 | 300 | 429 rate_limit |
| コンテキストウィンドウ(prompt + completion) | 64,000トークン | 400 context_limit — 履歴を削って再試行する |
| key単位の日次支出上限(任意) | keyページで自分で設定 | 402 key_daily_cap UTC 00:00まで |
成功したレスポンスには必ず以下が含まれる。
| ヘッダー | 意味 |
|---|---|
X-Request-Id | サポートに問い合わせる際はこれを提示すること。当社がリクエストについて保持する唯一の情報である。 |
X-NoTrack-Balance-USD | このリクエストで課金される課金前のクレジット残高(ドル単位)。 |
X-RateLimit-Limit-Requests | このkeyに許可された1分あたりのリクエスト数。 |
X-RateLimit-Limit-Concurrency | このkeyに許可された並列リクエスト数。 |
X-NoTrack-Content-Flag | コンテンツ拒否の場合のみ: minor_in_sexual_contextまたはchild_safety。 |
エラー
エラーは安定したtypeを持つJSONであり、messageは人間向けで変更されることがある。
{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
| HTTP | type | 対処法 |
|---|---|---|
| 400 | body | JSONが無効、またはmessagesがない。 |
| 400 | context_limit | 64,000トークンのウィンドウに対してpromptが長すぎる。古いターンを削除する。 |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | シーンが性的で、かつ登場人物が未成年と読み取れる。登場人物を明確に成人にして再送すること。課金されない。 |
| 401 | auth, invalid_key, key_revoked, key_expired | keyを修正または差し替える。 |
| 402 | no_credit | 残高がゼロ。チャージすればリクエストは即座に再開する。 |
| 402 | key_daily_cap | このkeyが設定した日次上限に達した。上限を上げるか、UTC 00:00まで待つ。 |
| 403 | content_policy + X-NoTrack-Content-Flag: child_safety | 拒否され、課金もされていない。コンテンツポリシーを参照。 |
| 429 | rate_limit, concurrency | 速度を落として再試行すること。2つのX-RateLimit-*ヘッダーに従うこと。 |
| 502 | upstream | モデルが応答しなかった。バックオフして再試行すること。課金されない。 |
| 503 | billing, safety | 当社側の依存先がダウンしている。数秒後に再試行すること。課金されない。 |
課金
前払いクレジットで、各レスポンスの実際のusageに基づいてトークンごとに課金される: input 100万トークンあたり$0.25、output 100万トークンあたり$1.00。inputは送信するすべて(system prompt、履歴、新しいメッセージ)、outputはモデルが書いたもの。
- 最初のkeyには$0.50分の無料クレジットが付き、7日間有効 — 導入とテストには十分な量。keyには確認済みメールアドレスが必要(「クレジットが残り少ない」の通知先になる)。有料クレジットは失効しない。
- クレジットは失効せず、サブスクリプションもなく、自動更新もされない。keyページでカードまたはUSDT/USDCでチャージできる。
- 拒否されたリクエスト(
4xx)や失敗したリクエスト(5xx)には課金されない。リクエストはレスポンス後に、そのX-Request-Idをキーとして一度だけ課金される。 - 残高がなくなると→チャージするまで
402 no_credit。keyが漏洩してもアカウントを空にされないよう、各keyに日次上限を設定すること。 - クレジットは、購入から24時間以内で未使用であれば返金できます。それ以降はプランに充当することもできます。詳しくはクレジットと返金をご覧ください。
ペルソナ — 素のモデルか、BestPrivateAIのキャラクターか
各keyにはスタイルがあり、keyページで選択し、いつでも切り替えられる。
- 素(デフォルト) — system promptがそのままプロンプト全体になる。こちらが追加するのは正体を示す1行のみで、他には何もない。
- BestPrivateAIペルソナ — bestprivateai.comのチャットと同じキャラクターとスタイル: 直接的で、フィルタなし、説教なし、ユーザーの言語で回答する。モデル、価格、コンテンツポリシーはすべて同じ。変わるのはメッセージの前に置かれるpromptだけ。あなた自身のsystem messageはそれに続き、調整することもできる。
リクエストはkeyの設定を、フィールドで上書きすることも、モデル名しか設定できないクライアント向けにモデルのsuffixで上書きすることもできる。
{ "model": "notrack-uncensored", "notrack": { "persona": "notrack" }, "messages": [ … ] }
{ "model": "notrack-uncensored:notrack", "messages": [ … ] } // same thing, by model name
{ "model": "notrack-uncensored:bare", "messages": [ … ] } // force the bare model on a persona key
ペルソナ名: notrack(普通のキャラクター)、concise、detailed、creative(チャットが提供するのと同じバリエーション)、bare。レスポンスヘッダーのX-NoTrack-Personaが、どれが適用されたかを示す。
コンテンツポリシー
system promptは追加せず、トピックフィルタも動かさない。成人向けフィクション、ダークなテーマ、強い言葉、フィクション内の暴力 — モデルは書かれたとおりに答える。1つのルールはコードで強制され、無効化できない: 未成年が関わる性的な内容はすべて拒否される。
403 child_safety— リクエストが子どもが関わる性的なコンテンツを求めていた。拒否され、課金されず、安全性イベントとして記録される。400 minor_in_sexual_context— シーンが性的で、登場人物が18歳未満と読み取れる(年齢の明示、学校という設定、「少女/少年」という描写など)。永久的な禁止ではない: 年齢と描写を明確に成人にして再送すること。
同じkeyで403が繰り返されると、そのkey、続いてアカウントが閉鎖される。全文はAcceptable Use policyにある。
プライバシー
promptとcompletionはディスクに書き込まれない — ゲートウェイでも、モデルサーバーでも。リクエストごとに保持するのはリクエストid、keyのid、トークン数、価格のみで、これは請求の根拠だからだ。安全性による拒否はテキストを含めずカテゴリ単位で記録される。第三者のモデルプロバイダーがトラフィックを見ることは一切ない: モデルは当社が自前で借り、管理するハードウェア上で動いている。
クライアントとSDK
BestPrivateAIのウェブサイトとBestPrivateAIアプリは当社自身のチャットであり、API key用の入力欄はなく、今後も設けない。keyはその他のプログラム向けであり、以下のクライアントのいずれか、または自分のコードに貼り付けて使う。
Python
from openai import OpenAI
client = OpenAI(base_url="https://api.bestprivateai.com/v1", api_key="sk-…")
stream = client.chat.completions.create(model="notrack-uncensored",
messages=[{"role": "user", "content": "Hello"}], stream=True)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.bestprivateai.com/v1", apiKey: process.env.API_KEY });
const r = await client.chat.completions.create({ model: "notrack-uncensored",
messages: [{ role: "user", content: "Hello" }] });
console.log(r.choices[0].message.content);
SillyTavern
API Connections → API: Chat Completion → Source: Custom (OpenAI-compatible) → Custom Endpoint https://api.bestprivateai.com/v1 → Custom API Key → Connect → Model notrack-uncensored。Streamingはオン。コンテキストサイズは64,000トークン以下に保つこと。
Chatbox
Settings → Model Provider → Add → Add Custom Provider、モードOpenAI API Compatible → base URLとkeyを貼り付け、続いてnotrack-uncensoredをモデルとして追加する。
NextChat
Settings → Custom Endpoint(OpenAI互換)をオンにする → base URLとkeyを入力し、モデル欄にモデル名を直接入力する。
Cherry Studio
Settings → Model Providers → Add Provider → OpenAIと入力 → base URLとkeyを入力し、続いて「Add model」→ notrack-uncensored。
LobeChat
Settings → AI Service Provider → OpenAI → custom API endpointを有効化し、base URLとkeyを貼り付け、モデルをモデル一覧に追加する。
その他のクライアント
LangChain、LlamaIndex、Open WebUI、Continue、JanitorAIのproxy設定、curl — 「OpenAI互換」または「カスタムbase URL」の選択肢を持つあらゆるクライアント。
上記のメニュー表記はアプリのバージョンによって変わる。ラベルが完全に一致しない場合は、「custom」「OpenAI-compatible」「base URL」のいずれかに言及する設定を探すこと。
クライアントが接続できない場合
- 401 / 「invalid API key」 — keyが届いていない。クライアントがprefixを含む完全なkeyを
Authorization: Bearer sk-…で送信しているか確認すること。 - 404 / 未知のエンドポイント — クライアントによって
/v1を自分で付加するかどうかが異なる。https://api.bestprivateai.com/v1で404になる場合は、代わりにhttps://api.bestprivateai.comをbase URLとして試すこと(またはその逆)。 - 「The Responses API is not supported yet」 — 一部の新しいクライアントはデフォルトでOpenAIのResponses APIを使う。当社が提供するのはChat Completionsのみなので、クライアントをそのモードに切り替えること。
- モデル一覧が空 — 一部のクライアントは有効なkeyの確認後にしか一覧を表示しない。
notrack-uncensoredを手動で入力すること。 - Ollama / llama.cppクライアントで何も起きない — これらは独自プロトコルを話し、OpenAI互換ではない。代わりに上記のクライアントのいずれかを使うこと。
key
- 1アカウントにつき最大20個のアクティブkey。アプリごとに専用のkeyと日次上限を用意すること。
- 有効期限の設定は任意。keyの取り消しは即時に有効になり、元に戻せない — 新しいkeyを発行すること。
- keyページには、key単位の支出、最終使用日時、アカウントの30日間の合計が表示される。
質問や確認したいリクエストidがある場合: サポート・bestprivateai.com/support。