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のロール。現時点ではテキストのみ — 画像パーツは拒否される。
modelnotrack-uncensoredを使う。
streamSSEにはtrue。stream_options.include_usageは常にオン。
max_tokenscompletionの上限。prompt + completionは64,000トークンのウィンドウに収まる必要がある。
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, nOpenAIと同様にモデルへそのまま渡される。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単位の同時リクエスト数8429 concurrency
key単位の1分あたりリクエスト数300429 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" } }
HTTPtype対処法
400bodyJSONが無効、またはmessagesがない。
400context_limit64,000トークンのウィンドウに対してpromptが長すぎる。古いターンを削除する。
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_contextシーンが性的で、かつ登場人物が未成年と読み取れる。登場人物を明確に成人にして再送すること。課金されない。
401auth, invalid_key, key_revoked, key_expiredkeyを修正または差し替える。
402no_credit残高がゼロ。チャージすればリクエストは即座に再開する。
402key_daily_capこのkeyが設定した日次上限に達した。上限を上げるか、UTC 00:00まで待つ。
403content_policy + X-NoTrack-Content-Flag: child_safety拒否され、課金もされていない。コンテンツポリシーを参照。
429rate_limit, concurrency速度を落として再試行すること。2つのX-RateLimit-*ヘッダーに従うこと。
502upstreamモデルが応答しなかった。バックオフして再試行すること。課金されない。
503billing, safety当社側の依存先がダウンしている。数秒後に再試行すること。課金されない。

課金

前払いクレジットで、各レスポンスの実際のusageに基づいてトークンごとに課金される: input 100万トークンあたり$0.25、output 100万トークンあたり$1.00。inputは送信するすべて(system prompt、履歴、新しいメッセージ)、outputはモデルが書いたもの。

ペルソナ — 素のモデルか、BestPrivateAIのキャラクターか

各keyにはスタイルがあり、keyページで選択し、いつでも切り替えられる。

リクエストは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つのルールはコードで強制され、無効化できない: 未成年が関わる性的な内容はすべて拒否される。

同じ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」のいずれかに言及する設定を探すこと。

クライアントが接続できない場合

key

質問や確認したいリクエストidがある場合: サポート・bestprivateai.com/support。