BestPrivateAI API — dokumentacja referencyjna

Jeden endpoint kompatybilny z OpenAI, jeden model, jeden klucz. Jeśli Twój kod już korzysta z /v1/chat/completions, zmień bazowy URL i klucz — i będzie korzystał z nas.

Bazowy URL i autoryzacja

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

Klucze tworzy się na stronie kluczy. Klucz jest wyświetlany tylko raz, w momencie utworzenia; przechowujemy jego hash i ostatnie sześć znaków. Wysyłaj go tylko przez HTTPS i tylko w nagłówku Authorization — nigdy w URL.

Wszystko jest w formacie JSON (Content-Type: application/json). Odpowiedzi mają schemat OpenAI, więc oficjalne SDK openai i każdy klient kompatybilny z OpenAI działają bez zmian.

Modele

GET /v1/models

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

Jest jeden model, notrack-uncensored: nasza własna wersja towarzysza czatu, hostowana na naszym własnym sprzęcie. Wszystko, co przekażesz jako model, jest do niego kierowane; używaj publicznego id, żeby Twoje logi zgadzały się z naszymi.

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
}

Odpowiedź — standardowy format, z rzeczywistą liczbą tokenów w usage (to jest podstawa rozliczenia):

{
  "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 }
}

Twój system prompt zarządza rozmową. Dodajemy z góry wyłącznie jedną linię — identyfikację modelu (że jest to notrack-uncensored, stworzony przez BestPrivateAI) — i nic więcej: żadnych reguł, żadnego filtra tematów. Twój komunikat systemowy następuje po niej i decyduje o personie, stylu i wszystkim innym. Jedynym wyjątkiem jest Polityka treści.

Streaming

Ustaw "stream": true i odczytuj zdarzenia server-sent, tak jak w OpenAI. Ostatni fragment zawiera usage (dołączamy go zawsze, niezależnie od tego, czy prosisz o stream_options), a potem 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]

Parametry

PoleUwagi
messagesWymagane. Role system, user, assistant. Obecnie tylko tekst — części obrazu są odrzucane.
modelUżyj notrack-uncensored.
streamtrue dla SSE. stream_options.include_usage jest zawsze włączone.
max_tokensLimit dla completion. Prompt + completion muszą zmieścić się w oknie 64,000 tokenów.
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, nPrzekazywane do modelu jak w OpenAI. Jeśli nie wyślesz temperature, używamy 0.85, tak jak nasz czat. n > 1 zwiększa koszt output.
tools, tool_choiceObsługiwane: auto, none, required lub nazwana funkcja. Odpowiedź zawiera tool_calls i finish_reason: "tool_calls"; wynik odeślij jako komunikat role: "tool". Gdy obecne są narzędzia, odpowiedź strumieniowana przychodzi jako jeden fragment na wywołanie, a nie token po tokenie.
response_format{"type": "json_object"} jest obsługiwane (podaj w prompcie, jakiego JSON-a chcesz). json_schema oraz przestarzałe pole functions nie są.

Limity i nagłówki odpowiedzi

LimitWartośćPo przekroczeniu
Równoczesne zapytania na klucz8429 concurrency
Zapytania na minutę na klucz300429 rate_limit
Okno kontekstu (prompt + completion)64,000 tokenów400 context_limit — przytnij historię i spróbuj ponownie
Dzienny limit wydatków na klucz (opcjonalny)ustawiany przez Ciebie na stronie kluczy402 key_daily_cap do 00:00 UTC

Każda pomyślna odpowiedź zawiera:

NagłówekZnaczenie
X-Request-IdPodaj go, pisząc do wsparcia; to jedyna informacja o zapytaniu, którą przechowujemy.
X-NoTrack-Balance-USDTwój kredyt przed obciążeniem tego zapytania, w dolarach.
X-RateLimit-Limit-RequestsLiczba zapytań na minutę dozwolona dla tego klucza.
X-RateLimit-Limit-ConcurrencyLiczba równoczesnych zapytań dozwolona dla tego klucza.
X-NoTrack-Content-FlagTylko przy odmowie treści: minor_in_sexual_context lub child_safety.

Błędy

Błędy są w formacie JSON ze stabilnym type; message jest dla ludzi i może się zmieniać.

{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
HTTPtypeCo zrobić
400bodyNieprawidłowy JSON lub brak messages.
400context_limitPrompt zbyt długi dla okna 64,000 tokenów. Usuń starsze tury.
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_contextScena odczytywana jest jako seksualna, a postać jako niepełnoletnia. Uczyń postacie jednoznacznie dorosłymi i wyślij ponownie; nie rozliczane.
401auth, invalid_key, key_revoked, key_expiredNapraw lub zamień klucz.
402no_creditSaldo wynosi zero. Doładuj; zapytania wracają do działania natychmiast.
402key_daily_capTen klucz osiągnął ustawiony przez Ciebie dzienny limit. Zwiększ go lub zaczekaj do 00:00 UTC.
403content_policy + X-NoTrack-Content-Flag: child_safetyOdmówiono i nie rozliczono. Zobacz Polityka treści.
429rate_limit, concurrencyZwolnij i spróbuj ponownie; przestrzegaj dwóch nagłówków X-RateLimit-*.
502upstreamModel nie odpowiedział. Spróbuj ponownie z narastającym odstępem; nie rozliczane.
503billing, safetyJedna z naszych zależności nie działa. Spróbuj ponownie za kilka sekund; nie rozliczane.

Rozliczenia

Kredyt przedpłacony, rozliczany za token na podstawie rzeczywistego usage każdej odpowiedzi: $0.25 za 1M tokenów wejściowych, $1.00 za 1M tokenów wyjściowych. Input to wszystko, co wysyłasz (system prompt, historia, nowa wiadomość); output to to, co pisze model.

Persona — surowy model lub charakter BestPrivateAI

Każdy klucz ma styl, wybierany na stronie kluczy i przełączany w każdej chwili:

Zapytanie może zastąpić ustawienie klucza — polem lub przyrostkiem nazwy modelu (dla klientów, które mogą ustawiać tylko nazwę modelu):

{ "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

Nazwy person: notrack (zwykły charakter), concise, detailed, creative (te same warianty, które oferuje czat), bare. Nagłówek odpowiedzi X-NoTrack-Persona wskazuje, która została zastosowana.

Polityka treści

Nie dodajemy żadnego system promptu i nie stosujemy żadnego filtra tematów. Fikcja dla dorosłych, ciemne tematy, mocny język, przemoc w fikcji — model odpowiada tak, jak zostało napisane. Jedna zasada jest wymuszona w kodzie i nie da się jej wyłączyć: wszystko, co ma charakter seksualny z udziałem osoby niepełnoletniej, jest odmawiane.

Powtarzające się 403 na kluczu prowadzą do zamknięcia klucza, a następnie konta. Pełny tekst znajduje się w Polityce dopuszczalnego użycia.

Prywatność

Prompty i odpowiedzi nie są zapisywane na dysku — ani przez gateway, ani przez serwery modelu. To, co przechowujemy dla każdego zapytania, to id zapytania, id klucza, liczba tokenów i cena, bo to jest podstawa rozliczenia. Odmowy związane z bezpieczeństwem są rejestrowane według kategorii, bez treści. Żaden zewnętrzny dostawca modelu nigdy nie widzi Twojego ruchu: model działa na sprzęcie, który wynajmujemy i kontrolujemy.

Klienci i SDK

Strona BestPrivateAI i aplikacja BestPrivateAI to nasz własny czat — nie mają pola na klucz API i nigdy nie będą mieć. Klucz jest przeznaczony dla programów innych: wklej go do jednego z klientów poniżej albo do własnego kodu.

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 włączony. Utrzymuj rozmiar kontekstu na poziomie 64,000 tokenów lub niższym.

Chatbox

Ustawienia → Model Provider → Add → Add Custom Provider, mode OpenAI API Compatible → wklej bazowy URL i klucz, następnie dodaj notrack-uncensored jako model.

NextChat

Ustawienia → włącz Custom Endpoint (kompatybilny z OpenAI) → bazowy URL i klucz, następnie wpisz nazwę modelu w polu modelu.

Cherry Studio

Ustawienia → Model Providers → Add Provider → wpisz OpenAI → bazowy URL i klucz, następnie „Add model” → notrack-uncensored.

LobeChat

Ustawienia → AI Service Provider → OpenAI → włącz custom API endpoint, wklej bazowy URL i klucz, i dodaj model do listy modeli.

Coś innego

LangChain, LlamaIndex, Open WebUI, Continue, ustawienia proxy JanitorAI, curl — każdy klient z opcją „OpenAI-compatible” lub „custom base URL”.

Nazwy w menu powyżej różnią się między wersjami aplikacji — jeśli etykieta nie zgadza się dokładnie, poszukaj ustawienia wspominającego „custom”, „OpenAI-compatible” lub „base URL”.

Jeśli klient nie łączy się

Klucze

Pytania lub id zapytania do sprawdzenia: wsparcie · bestprivateai.com/support.