API BestPrivateAI — referenční dokumentace
Jeden endpoint kompatibilní s OpenAI, jeden model, jeden klíč. Pokud váš kód už komunikuje s /v1/chat/completions, změňte základní URL a klíč a bude komunikovat s námi.
Základní URL a autentizace
Base URL: https://api.bestprivateai.com/v1
Header: Authorization: Bearer sk-…
Klíče se vytvářejí na stránku s klíči. Klíč se zobrazí jen jednou, při vytvoření; ukládáme jeho hash a posledních šest znaků. Odesílejte ho jen přes HTTPS a jen v hlavičce Authorization — nikdy v URL.
Vše je ve formátu JSON (Content-Type: application/json). Odpovědi používají schéma OpenAI, takže oficiální SDK pro openai i každý klient kompatibilní s OpenAI funguje bez úprav.
Modely
GET /v1/models
{ "object": "list",
"data": [ { "id": "notrack-uncensored", "object": "model", "owned_by": "notrack" } ] }
Existuje jeden model, notrack-uncensored: náš vlastní companion tuning, provozovaný na našem vlastním hardwaru. Cokoliv předáte jako model, se přesměruje na něj; používejte veřejné id, aby se vaše logy shodovaly s našimi.
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
}
Odpověď — standardní tvar, s reálným počtem tokenů v usage (podle toho se účtuje):
{
"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 }
}
Konverzaci řídí váš system prompt. Na začátek přidáváme přesně jeden řádek — identitu modelu (že je to notrack-uncensored, vytvořený společností BestPrivateAI) — a nic víc: žádná pravidla, žádný filtr témat. Vaše systémová zpráva ho následuje a rozhoduje o personě, stylu a všem ostatním. Jedinou výjimkou je Zásady obsahu.
Streamování
Nastavte "stream": true a čtěte server-sent events, přesně jako u OpenAI. Poslední fragment nese usage (vždy ho zahrnujeme, ať stream_options požadujete nebo ne), pak 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
| Pole | Poznámky |
|---|---|
messages | Povinné. Role system, user, assistant. Zatím jen text — obrazové části jsou odmítnuty. |
model | Použijte notrack-uncensored. |
stream | true pro SSE. stream_options.include_usage je vždy zapnuto. |
max_tokens | Strop pro completion. Prompt + completion se musí vejít do okna 64,000 tokenů. |
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, n | Předává se modelu stejně jako u OpenAI. Pokud neposílíte temperature, použijeme 0,85, stejně jako v našem chatu. n > 1 násobí cenu výstupu. |
tools, tool_choice | Podporováno: auto, none, required, nebo pojmenovaná funkce. Odpověď nese tool_calls a finish_reason: "tool_calls"; výsledek odešlete zpět jako zprávu role: "tool". Když jsou přítomny nástroje, streamovaná odpověď přichází jako jeden fragment na volání, ne token po tokenu. |
response_format | {"type": "json_object"} je podporováno (řekněte v promptu, jaké JSON chcete). json_schema a zastaralé pole functions nejsou. |
Limity a hlavičky odpovědí
| Limit | Hodnota | Při překročení |
|---|---|---|
| Souběžné požadavky na klíč | 8 | 429 concurrency |
| Požadavky za minutu na klíč | 300 | 429 rate_limit |
| Kontextové okno (prompt + completion) | 64,000 tokenů | 400 context_limit — zkraťte historii a zkuste to znovu |
| Denní útrata na klíč (volitelné) | nastavíte na stránce s klíči | 402 key_daily_cap do 00:00 UTC |
Každá úspěšná odpověď nese:
| Hlavička | Význam |
|---|---|
X-Request-Id | Uveďte ho při psaní na podporu; je to jediná věc, kterou o požadavku uchováváme. |
X-NoTrack-Balance-USD | Váš kredit před tím, než byl tento požadavek zúčtován, v dolarech. |
X-RateLimit-Limit-Requests | Počet požadavků za minutu povolený pro tento klíč. |
X-RateLimit-Limit-Concurrency | Počet paralelních požadavků povolený pro tento klíč. |
X-NoTrack-Content-Flag | Pouze při odmítnutí obsahu: minor_in_sexual_context nebo child_safety. |
Chyby
Chyby jsou JSON se stabilním type; message je určeno lidem a může se měnit.
{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
| HTTP | type | Co dělat |
|---|---|---|
| 400 | body | Neplatný JSON nebo chybí messages. |
| 400 | context_limit | Prompt je na okno 64,000 tokenů příliš dlouhý. Odstraňte starší tahy. |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | Scéna vyznívá sexuálně a postava vyznívá jako nezletilá. Udělejte postavy nezpochybnitelně dospělými a odešlete znovu; neúčtuje se. |
| 401 | auth, invalid_key, key_revoked, key_expired | Opravte nebo nahraďte klíč. |
| 402 | no_credit | Zůstatek je nulový. Doplňte kredit; požadavky se obnoví okamžitě. |
| 402 | key_daily_cap | Tento klíč dosáhl denního stropu, který jste nastavili. Zvyšte ho nebo počkejte do 00:00 UTC. |
| 403 | content_policy + X-NoTrack-Content-Flag: child_safety | Odmítnuto a neúčtováno. Viz Zásady obsahu. |
| 429 | rate_limit, concurrency | Zpomalte a zkuste to znovu; respektujte obě hlavičky X-RateLimit-*. |
| 502 | upstream | Model neodpověděl. Zkuste to znovu s odstupem; neúčtuje se. |
| 503 | billing, safety | Jedna z našich závislostí je nedostupná. Zkuste to znovu za pár sekund; neúčtuje se. |
Fakturace
Předplacený kredit, účtovaný za token podle skutečné usage každé odpovědi: $0.25 za 1M vstupních tokenů, $1.00 za 1M výstupních tokenů. Vstup je vše, co odešlete (system prompt, historie, nová zpráva); výstup je to, co napíše model.
- Váš první klíč obsahuje $0.50 bezplatného kreditu, platného 7 dní — dost na integraci a testování. Pro klíč je potřeba potvrzený e-mail (tam chodí upozornění "kredit se ztenčuje"). Placený kredit nikdy nevyprší.
- Kredit nevyprší, neexistuje předplatné a nic se neobnovuje samo. Doplňte kartou nebo v USDT/USDC na stránce s klíči.
- Za odmítnuté požadavky (
4xx) ani za neúspěšné (5xx) se nic neúčtuje. Požadavek se účtuje jednou, po odpovědi, podle jehoX-Request-Id. - Zůstatek se vyčerpá →
402 no_credit, dokud nedoplníte kredit. Nastavte na každém klíči denní strop, aby unikatý klíč nemohl vyčerpat účet. - Kredity lze vrátit, pokud nebyly do 24 hodin od nákupu použity, nebo je lze později započítat na předplatné. Viz Kredity a vrácení peněz.
Persona — holý model nebo postava BestPrivateAIu
Každý klíč má styl, zvolený na stránce s klíči a kdykoli přepínatelný:
- Čistý (výchozí) — váš system prompt je celý prompt. Přidáváme jeden řádek identity a nic víc.
- Persona BestPrivateAI — postava a styl chatu na bestprivateai.com: přímý, nefiltrovaný, bez moralizování, odpovídá v jazyce uživatele. Stejný model, stejná cena, stejné zásady obsahu; mění se jen prompt před vašimi zprávami. Vaše vlastní systémová zpráva ho stále následuje a může ji upravit.
Požadavek může přepsat nastavení klíče, buď polem, nebo přípisem k názvu modelu (pro klienty, kteří umí nastavit jen název 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
Názvy person: notrack (jednoduchá postava), concise, detailed, creative (stejné varianty, jaké nabízí chat), bare. Hlavička odpovědi X-NoTrack-Persona říká, která se použila.
Zásady obsahu
Nepřidáváme žádný system prompt a nespouštíme žádný filtr témat. Fikce pro dospělé, temná témata, silný jazyk, násilí ve fikci — model odpovídá tak, jak je napsáno. Jedno pravidlo je vynuceno v kódu a nelze ho vypnout: cokoliv sexuálního s účastí nezletilého se odmítá.
403 child_safety— požadavek vyhledával sexuální obsah zahrnující dítě. Odmítnuto, neúčtováno, zaznamenáno jako bezpečnostní incident.400 minor_in_sexual_context— scéna je sexuální a postava vyznívá jako mladší 18 let (uveden věk, školní prostředí, rámování "dívka/chlapec"). Není to zákaz: udělejte věk a rámování nezpochybnitelně dospělé a odešlete znovu.
Opakované 403 na klíči vedou k uzavření klíče a poté účtu. Celý text je v Zásadách přijatelného použití.
Soukromí
Prompty a completions se nezapisují na disk — ani branou, ani servery modelu. U každého požadavku uchováváme id požadavku, id klíče, počty tokenů a cenu, protože to je vyúčtování. Bezpečnostní odmítnutí se zaznamenávají podle kategorie, bez textu. Žádný poskytovatel modelu třetí strany nikdy neuvidí váš provoz: model běží na hardwaru, který si pronajímáme a řídíme sami.
Klienti a SDK
Web BestPrivateAI a aplikace BestPrivateAI jsou náš vlastní chat — nemají pole pro API klíč a nikdy nebudou. Klíč je určen pro jiné programy: vložte ho do jednoho z klientů níže, nebo do vlastního kódu.
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 zapnutý. Velikost kontextu udržujte na 64,000 tokenech nebo níže.
Chatbox
Settings → Model Provider → Add → Add Custom Provider, režim OpenAI API Compatible → vložte základní URL a klíč, poté přidejte notrack-uncensored jako model.
NextChat
Settings → zapněte Custom Endpoint (kompatibilní s OpenAI) → základní URL a klíč, poté zapište název modelu do pole modelu.
Cherry Studio
Settings → Model Providers → Add Provider → zapište OpenAI → základní URL a klíč, poté "Add model" → notrack-uncensored.
LobeChat
Settings → AI Service Provider → OpenAI → zapněte custom API endpoint, vložte základní URL a klíč, a přidejte model do seznamu modelů.
Cokoliv jiného
LangChain, LlamaIndex, Open WebUI, Continue, proxy nastavení JanitorAI, curl — jakýkoli klient s možností "OpenAI-compatible" nebo "custom base URL".
Znění menu výše se mezi verzemi aplikací liší — pokud popisek přesně nesedí, hledejte nastavení, které zmiňuje "custom", "OpenAI-compatible" nebo "base URL".
Když se klient nepřipojí
- 401 / "invalid API key" — klíč nikdy nedorazil. Ověřte, že klient odesílá
Authorization: Bearer sk-…s celým klíčem včetně prefixu. - 404 / neznámý endpoint — klienti se neshodují, zda si
/v1připojují sami. Pokudhttps://api.bestprivateai.com/v1vrací 404, zkuste místo toho jako základní URLhttps://api.bestprivateai.com(nebo naopak). - "The Responses API is not supported yet" — některé novější klienty standardně používají Responses API od OpenAI. My poskytujeme jen Chat Completions; přepněte klienta do tohoto režimu.
- Prázdný seznam modelů — někteří klienti ho naplní až po ověření platného klíče. Zapište
notrack-uncensoredručně. - V klientu Ollama / llama.cpp se nic neděje — ty mluví svým vlastním protokolem, ne kompatibilním s OpenAI. Použijte místo toho jednoho z klientů výše.
Klíče
- Až 20 aktivních klíčů na účet. Dejte každé aplikaci vlastní klíč a vlastní denní strop.
- Volitelné datum expirace; zneplatnění klíče ho okamžitě zastaví a nelze to vrátit zpět — vydejte místo toho nový.
- Stránka s klíči zobrazuje útratu podle klíče, poslední použití a 30denní součty účtu.
Dotazy nebo id požadavku k prošetření: podpora · bestprivateai.com/support.