BestPrivateAI API — referentie

Één OpenAI-compatibel endpoint, één model, één key. Als je code al met /v1/chat/completions praat, wijzig je de base URL en de key en praat het met ons.

Base URL & authenticatie

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

Keys worden aangemaakt op de keys-pagina. Een key wordt eenmalig getoond, bij aanmaak; wij bewaren een hash en de laatste zes tekens. Verstuur hem alleen via HTTPS en alleen in de Authorization-header — nooit in een URL.

Alles is JSON (Content-Type: application/json). Responses gebruiken het OpenAI-schema, dus de officiële openai-SDK's en elke OpenAI-compatibele client werken ongewijzigd.

Modellen

GET /v1/models

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

Er is één model, notrack-uncensored: onze eigen companion-tune, gedraaid op onze eigen hardware. Wat je ook als model meegeeft, wordt naar dit model gerouteerd; gebruik het publieke id zodat je logs met de onze overeenkomen.

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
}

Response — de standaardvorm, met echte tokentellingen in usage (daarop word je gefactureerd):

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

Jouw system prompt bepaalt het gesprek. Wij voegen precies één regel vooraf toe — de identiteit van het model (dat het notrack-uncensored is, gemaakt door BestPrivateAI) — en niets anders: geen regels, geen onderwerpfilter. Jouw system message volgt daarna en bepaalt persona, stijl en al het overige. De enige uitzondering staat in Contentbeleid.

Streaming

Stel "stream": true in en lees server-sent events, precies zoals bij OpenAI. Het laatste chunk bevat usage (we nemen dit altijd op, of je nu stream_options opvraagt of niet), daarna 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]

Parameters

VeldOpmerkingen
messagesVerplicht. Rollen system, user, assistant. Voorlopig alleen tekst — afbeeldingsonderdelen worden geweigerd.
modelGebruik notrack-uncensored.
streamtrue voor SSE. stream_options.include_usage staat altijd aan.
max_tokensMaximum voor de completion. Prompt + completion moeten binnen het venster van 64,000 tokens passen.
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, nDoorgegeven aan het model zoals bij OpenAI. Stuur je geen temperature mee, dan gebruiken we 0,85, net als onze chat. n > 1 vermenigvuldigt de outputkosten.
tools, tool_choiceOndersteund: auto, none, required, of een benoemde functie. De reply bevat tool_calls en finish_reason: "tool_calls"; stuur het resultaat terug als role: "tool"-message. Met tools aanwezig komt een gestreamde reply als één chunk per call binnen in plaats van token voor token.
response_format{"type": "json_object"} wordt ondersteund (geef in de prompt aan welke JSON je wilt). json_schema en het legacy functions-veld niet.

Limieten & response headers

LimietWaardeBij overschrijding
Gelijktijdige requests per key8429 concurrency
Requests per minuut per key300429 rate_limit
Contextvenster (prompt + completion)64,000 tokens400 context_limit — kort de geschiedenis in en probeer opnieuw
Dagelijkse uitgave per key (optioneel)door jou ingesteld op de keys-pagina402 key_daily_cap tot 00:00 UTC

Elke succesvolle response bevat:

HeaderBetekenis
X-Request-IdVermeld dit bij contact met support; het is het enige dat we over een request bewaren.
X-NoTrack-Balance-USDJe tegoed voordat deze request in rekening is gebracht, in dollars.
X-RateLimit-Limit-RequestsToegestane requests per minuut voor deze key.
X-RateLimit-Limit-ConcurrencyToegestane parallelle requests voor deze key.
X-NoTrack-Content-FlagAlleen bij een contentweigering: minor_in_sexual_context of child_safety.

Fouten

Fouten zijn JSON met een stabiele type; de message is voor mensen en kan wijzigen.

{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
HTTPtypeWat te doen
400bodyOngeldige JSON of geen messages.
400context_limitPrompt te lang voor het venster van 64,000 tokens. Laat oudere beurten vallen.
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_contextDe scène leest als seksueel en een personage leest als minderjarig. Maak de personages onmiskenbaar volwassen en stuur opnieuw; niet gefactureerd.
401auth, invalid_key, key_revoked, key_expiredHerstel of vervang de key.
402no_creditSaldo is nul. Vul aan; requests worden direct hervat.
402key_daily_capDeze key heeft het dagelijkse plafond bereikt dat je hebt ingesteld. Verhoog het of wacht tot 00:00 UTC.
403content_policy + X-NoTrack-Content-Flag: child_safetyGeweigerd en niet gefactureerd. Zie Contentbeleid.
429rate_limit, concurrencyVertraag en probeer opnieuw; houd rekening met de twee X-RateLimit-*-headers.
502upstreamHet model heeft niet geantwoord. Probeer opnieuw met backoff; niet gefactureerd.
503billing, safetyEen van onze dependencies ligt eruit. Probeer het na enkele seconden opnieuw; niet gefactureerd.

Facturering

Prepaid tegoed, per token in rekening gebracht op basis van het echte usage van elke response: $0.25 per 1M inputtokens, $1.00 per 1M outputtokens. Input is alles wat je verstuurt (system prompt, geschiedenis, het nieuwe bericht); output is wat het model schrijft.

Persona — kaal model of het karakter van BestPrivateAI

Elke key heeft een stijl, gekozen op de keys-pagina en op elk moment te wijzigen:

Een request kan de instelling van de key overschrijven, met een veld of met een modelsuffix (voor clients die alleen een modelnaam kunnen instellen):

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

Persona-namen: notrack (het gewone karakter), concise, detailed, creative (dezelfde varianten die de chat biedt), bare. De response header X-NoTrack-Persona geeft aan welke is toegepast.

Contentbeleid

Wij voegen geen system prompt toe en draaien geen onderwerpfilter. Fictie voor volwassenen, donkere thema's, grof taalgebruik, geweld in fictie — het model antwoordt zoals geschreven. Eén regel is in code afgedwongen en kan niet worden uitgeschakeld: alles wat seksueel is en een minderjarige betreft, wordt geweigerd.

Herhaalde 403's op een key leiden tot sluiting van de key, en daarna het account. De volledige tekst staat in de Acceptable Use policy.

Privacy

Prompts en completions worden niet naar schijf geschreven — niet door de gateway, niet door de modelservers. Wat we per request bewaren is het request-id, het key-id, tokentellingen en de prijs, want dat is waarop de factuur is gebaseerd. Veiligheidsweigeringen worden per categorie gelogd, zonder de tekst. Geen externe modelaanbieder ziet ooit jouw verkeer: het model draait op hardware die wij huren en beheren.

Clients & SDK's

De BestPrivateAI-website en de BestPrivateAI-app zijn onze eigen chat — die hebben geen veld voor een API-key en zullen dat nooit hebben. Een key is voor andere programma's: plak hem in een van de clients hieronder, of in je eigen code.

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 aan. Houd de contextgrootte op of onder 64,000 tokens.

Chatbox

Settings → Model Provider → Add → Add Custom Provider, modus OpenAI API Compatible → plak de base URL en key, voeg dan notrack-uncensored toe als model.

NextChat

Settings → schakel Custom Endpoint in (OpenAI-compatibel) → base URL en key, typ daarna de modelnaam in het modelveld.

Cherry Studio

Settings → Model Providers → Add Provider → typ OpenAI → base URL en key, dan "Add model" → notrack-uncensored.

LobeChat

Settings → AI Service Provider → OpenAI → schakel custom API endpoint in, plak de base URL en key, en voeg het model toe aan de modellijst.

Iets anders

LangChain, LlamaIndex, Open WebUI, Continue, JanitorAI-proxyinstellingen, curl — elke client met een "OpenAI-compatibel" of "aangepaste base URL"-optie.

De menubewoording hierboven verschilt tussen app-versies — als een label niet exact overeenkomt, zoek dan naar de instelling die "custom", "OpenAI-compatible" of "base URL" vermeldt.

Als een client geen verbinding maakt

Keys

Vragen of een request-id om te bekijken: support · bestprivateai.com/support.