BestPrivateAI API — справочник

Один эндпоинт, совместимый с OpenAI, одна модель, один ключ. Если ваш код уже работает с /v1/chat/completions, поменяйте базовый URL и ключ — и он будет работать с нами.

Базовый URL и авторизация

Base URL:  https://api.bestprivateai.com/v1
Header:    Authorization: Bearer sk-…

Ключи создаются на странице ключей. Ключ показывается один раз, при создании; мы храним его хеш и последние шесть символов. Отправляйте его только по HTTPS и только в заголовке Authorization — никогда в URL.

Всё в формате JSON (Content-Type: application/json). Ответы используют схему OpenAI, поэтому официальные SDK openai и любой совместимый с OpenAI клиент работают без изменений.

Модели

GET /v1/models

{ "object": "list",
  "data": [ { "id": "notrack-uncensored", "object": "model", "owned_by": "notrack" } ] }

Есть одна модель, notrack-uncensored: наша собственная версия компаньона, работающая на нашем собственном оборудовании. Всё, что вы передадите в 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 }
}

Ваш системный промпт управляет разговором. Мы добавляем в начало ровно одну строку — идентификацию модели (что это notrack-uncensored, созданная BestPrivateAI) — и ничего больше: никаких правил, никакого фильтра тем. Ваше системное сообщение идёт после неё и определяет персону, стиль и всё остальное. Единственное исключение — в Политика контента.

Стриминг

Установите "stream": true и читайте server-sent events, точно как в OpenAI. Последний фрагмент содержит 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.
streamtrue для SSE. 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". При наличии инструментов потоковый ответ приходит одним фрагментом на вызов, а не токен за токеном.
response_format{"type": "json_object"} поддерживается (укажите в промпте, какой JSON вам нужен). json_schema и устаревшее поле functions — нет.

Лимиты и заголовки ответа

ЛимитЗначениеПри превышении
Одновременные запросы на ключ8429 concurrency
Запросов в минуту на ключ300429 rate_limit
Окно контекста (prompt + completion)64,000 токенов400 context_limit — сократите историю и повторите
Дневной лимит трат на ключ (опционально)устанавливается вами на странице ключей402 key_daily_cap до 00:00 UTC

Каждый успешный ответ содержит:

ЗаголовокЗначение
X-Request-IdУказывайте его при обращении в поддержку; это единственное, что мы храним о запросе.
X-NoTrack-Balance-USDВаш баланс до списания за этот запрос, в долларах.
X-RateLimit-Limit-RequestsЗапросов в минуту, разрешённых для этого ключа.
X-RateLimit-Limit-ConcurrencyПараллельных запросов, разрешённых для этого ключа.
X-NoTrack-Content-FlagТолько при отказе по контенту: minor_in_sexual_context или child_safety.

Ошибки

Ошибки — это JSON со стабильным type; message предназначен для людей и может меняться.

{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
HTTPtypeЧто делать
400bodyНекорректный JSON или отсутствует messages.
400context_limitPrompt слишком длинный для окна 64,000 токенов. Удалите более старые сообщения.
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_contextСцена читается как сексуальная, а персонаж — как несовершеннолетний. Сделайте персонажей однозначно взрослыми и отправьте повторно; не оплачивается.
401auth, invalid_key, key_revoked, key_expiredИсправьте или замените ключ.
402no_creditБаланс равен нулю. Пополните; запросы возобновляются немедленно.
402key_daily_capЭтот ключ достиг дневного лимита, который вы установили. Увеличьте его или подождите до 00:00 UTC.
403content_policy + X-NoTrack-Content-Flag: child_safetyОтказано и не оплачено. См. Политика контента.
429rate_limit, concurrencyСнизьте частоту и повторите; соблюдайте два заголовка X-RateLimit-*.
502upstreamМодель не ответила. Повторите с задержкой; не оплачивается.
503billing, safetyОдна из наших зависимостей недоступна. Повторите через несколько секунд; не оплачивается.

Оплата

Предоплаченный кредит, списывается за токен на основе реального usage каждого ответа: $0.25 за 1M входных токенов, $1.00 за 1M выходных токенов. Input — это всё, что вы отправляете (системный промпт, история, новое сообщение); output — то, что пишет модель.

Персона — чистая модель или персонаж BestPrivateAI

У каждого ключа есть стиль, выбираемый на странице ключей и переключаемый в любой момент:

Запрос может переопределить настройку ключа — либо полем, либо суффиксом в названии модели (для клиентов, которые могут задать только имя модели):

{ "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 указывает, какая была применена.

Политика контента

Мы не добавляем никакого системного промпта и не запускаем никакого фильтра тем. Взрослая художественная литература, тёмные темы, грубый язык, насилие в вымысле — модель отвечает так, как написано. Одно правило закреплено в коде и не может быть отключено: любой сексуальный контент с участием несовершеннолетнего отклоняется.

Повторяющиеся 403 на ключе приводят к закрытию ключа, а затем и аккаунта. Полный текст — в Политике допустимого использования.

Приватность

Промпты и ответы не записываются на диск — ни шлюзом, ни серверами модели. Что мы храним по каждому запросу — это id запроса, id ключа, число токенов и цена, потому что именно это формирует счёт. Отказы по безопасности логируются по категории, без текста. Ни один сторонний провайдер модели никогда не видит ваш трафик: модель работает на оборудовании, которое мы арендуем и контролируем.

Клиенты и SDK

Сайт BestPrivateAI и приложение BestPrivateAI — это наш собственный чат: у них нет поля для API-ключа и никогда не будет. Ключ предназначен для других-программ: вставьте его в один из клиентов ниже или в свой собственный код.

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 → вставьте базовый URL и ключ, затем добавьте notrack-uncensored как модель.

NextChat

Settings → включите Custom Endpoint (совместимый с OpenAI) → базовый URL и ключ, затем введите название модели в поле модели.

Cherry Studio

Settings → Model Providers → Add Provider → введите OpenAI → базовый URL и ключ, затем «Add model» → notrack-uncensored.

LobeChat

Settings → AI Service Provider → OpenAI → включите custom API endpoint, вставьте базовый URL и ключ, и добавьте модель в список моделей.

Что-то другое

LangChain, LlamaIndex, Open WebUI, Continue, настройки proxy JanitorAI, curl — любой клиент с опцией «OpenAI-compatible» или «custom base URL».

Формулировки меню выше отличаются между версиями приложения — если название не совпадает точно, ищите настройку, где упоминается «custom», «OpenAI-compatible» или «base URL».

Если клиент не подключается

Ключи

Вопросы или id запроса для проверки: поддержка · bestprivateai.com/support.