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. |
stream | true для 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 — нет. |
Лимиты и заголовки ответа
| Лимит | Значение | При превышении |
|---|---|---|
| Одновременные запросы на ключ | 8 | 429 concurrency |
| Запросов в минуту на ключ | 300 | 429 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" } }
| HTTP | type | Что делать |
|---|---|---|
| 400 | body | Некорректный JSON или отсутствует messages. |
| 400 | context_limit | Prompt слишком длинный для окна 64,000 токенов. Удалите более старые сообщения. |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | Сцена читается как сексуальная, а персонаж — как несовершеннолетний. Сделайте персонажей однозначно взрослыми и отправьте повторно; не оплачивается. |
| 401 | auth, invalid_key, key_revoked, key_expired | Исправьте или замените ключ. |
| 402 | no_credit | Баланс равен нулю. Пополните; запросы возобновляются немедленно. |
| 402 | key_daily_cap | Этот ключ достиг дневного лимита, который вы установили. Увеличьте его или подождите до 00:00 UTC. |
| 403 | content_policy + X-NoTrack-Content-Flag: child_safety | Отказано и не оплачено. См. Политика контента. |
| 429 | rate_limit, concurrency | Снизьте частоту и повторите; соблюдайте два заголовка X-RateLimit-*. |
| 502 | upstream | Модель не ответила. Повторите с задержкой; не оплачивается. |
| 503 | billing, safety | Одна из наших зависимостей недоступна. Повторите через несколько секунд; не оплачивается. |
Оплата
Предоплаченный кредит, списывается за токен на основе реального usage каждого ответа: $0.25 за 1M входных токенов, $1.00 за 1M выходных токенов. Input — это всё, что вы отправляете (системный промпт, история, новое сообщение); output — то, что пишет модель.
- Ваш первый ключ идёт с $0.50 бесплатного кредита, действующего 7 дней — достаточно для интеграции и тестирования. Для получения ключа нужен подтверждённый e-mail (именно на него приходит уведомление «кредит заканчивается»). Оплаченный кредит никогда не истекает.
- Кредит не истекает, подписки нет, и ничего не продлевается само по себе. Пополняйте картой или в USDT/USDC на странице ключей.
- За отклонённые запросы (
4xx) или неудачные (5xx) плата не взимается. Запрос оплачивается один раз, после ответа, по егоX-Request-Id. - Баланс закончился →
402 no_creditдо пополнения. Установите дневной лимит на каждом ключе, чтобы утёкший ключ не мог опустошить счёт. - Кредиты можно вернуть, если они не использованы в течение 24 часов после покупки, либо позже зачесть в счёт тарифа. См. Кредиты и возвраты.
Персона — чистая модель или персонаж BestPrivateAI
У каждого ключа есть стиль, выбираемый на странице ключей и переключаемый в любой момент:
- Чистая (по умолчанию) — ваш системный промпт — это весь промпт. Мы добавляем одну строку идентификации и ничего больше.
- Персона BestPrivateAI — персонаж и стиль чата на bestprivateai.com: прямой, без цензуры, без морализаторства, отвечает на языке пользователя. Та же модель, та же цена, та же политика контента; меняется только промпт перед вашими сообщениями. Ваше собственное системное сообщение всё так же идёт после него и может его корректировать.
Запрос может переопределить настройку ключа — либо полем, либо суффиксом в названии модели (для клиентов, которые могут задать только имя модели):
{ "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 child_safety— запрос был направлен на сексуальный контент с участием ребёнка. Отклонено, не оплачено, зафиксировано как событие безопасности.400 minor_in_sexual_context— сцена сексуальная, а персонаж читается как младше 18 лет (указан возраст, школьная обстановка, формулировка «девочка/мальчик»). Это не запрет: сделайте возраст и обстановку однозначно взрослыми и отправьте повторно.
Повторяющиеся 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».
Если клиент не подключается
- 401 / «invalid API key» — ключ не дошёл. Убедитесь, что клиент отправляет
Authorization: Bearer sk-…с полным ключом, включая префикс. - 404 / неизвестный эндпоинт — клиенты по-разному решают, добавлять ли
/v1самостоятельно. Еслиhttps://api.bestprivateai.com/v1даёт 404, попробуйтеhttps://api.bestprivateai.comкак базовый URL (или наоборот). - «The Responses API is not supported yet» — некоторые новые клиенты по умолчанию используют Responses API от OpenAI. Мы поддерживаем только Chat Completions; переключите клиента на этот режим.
- Пустой список моделей — некоторые клиенты заполняют его только после проверки корректного ключа. Введите
notrack-uncensoredвручную. - В клиенте Ollama / llama.cpp ничего не происходит — они используют собственный протокол, не совместимый с OpenAI. Используйте вместо этого один из клиентов выше.
Ключи
- До 20 активных ключей на аккаунт. Дайте каждому приложению свой ключ и свой дневной лимит.
- Необязательная дата истечения; отзыв ключа останавливает его немедленно и не может быть отменён — выпустите новый вместо этого.
- Страница ключей показывает расход по каждому ключу, последнее использование и итоги за 30 дней по аккаунту.
Вопросы или id запроса для проверки: поддержка · bestprivateai.com/support.