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
| Veld | Opmerkingen |
|---|---|
messages | Verplicht. Rollen system, user, assistant. Voorlopig alleen tekst — afbeeldingsonderdelen worden geweigerd. |
model | Gebruik notrack-uncensored. |
stream | true voor SSE. stream_options.include_usage staat altijd aan. |
max_tokens | Maximum voor de completion. Prompt + completion moeten binnen het venster van 64,000 tokens passen. |
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, n | Doorgegeven 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_choice | Ondersteund: 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
| Limiet | Waarde | Bij overschrijding |
|---|---|---|
| Gelijktijdige requests per key | 8 | 429 concurrency |
| Requests per minuut per key | 300 | 429 rate_limit |
| Contextvenster (prompt + completion) | 64,000 tokens | 400 context_limit — kort de geschiedenis in en probeer opnieuw |
| Dagelijkse uitgave per key (optioneel) | door jou ingesteld op de keys-pagina | 402 key_daily_cap tot 00:00 UTC |
Elke succesvolle response bevat:
| Header | Betekenis |
|---|---|
X-Request-Id | Vermeld dit bij contact met support; het is het enige dat we over een request bewaren. |
X-NoTrack-Balance-USD | Je tegoed voordat deze request in rekening is gebracht, in dollars. |
X-RateLimit-Limit-Requests | Toegestane requests per minuut voor deze key. |
X-RateLimit-Limit-Concurrency | Toegestane parallelle requests voor deze key. |
X-NoTrack-Content-Flag | Alleen 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" } }
| HTTP | type | Wat te doen |
|---|---|---|
| 400 | body | Ongeldige JSON of geen messages. |
| 400 | context_limit | Prompt te lang voor het venster van 64,000 tokens. Laat oudere beurten vallen. |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | De scène leest als seksueel en een personage leest als minderjarig. Maak de personages onmiskenbaar volwassen en stuur opnieuw; niet gefactureerd. |
| 401 | auth, invalid_key, key_revoked, key_expired | Herstel of vervang de key. |
| 402 | no_credit | Saldo is nul. Vul aan; requests worden direct hervat. |
| 402 | key_daily_cap | Deze key heeft het dagelijkse plafond bereikt dat je hebt ingesteld. Verhoog het of wacht tot 00:00 UTC. |
| 403 | content_policy + X-NoTrack-Content-Flag: child_safety | Geweigerd en niet gefactureerd. Zie Contentbeleid. |
| 429 | rate_limit, concurrency | Vertraag en probeer opnieuw; houd rekening met de twee X-RateLimit-*-headers. |
| 502 | upstream | Het model heeft niet geantwoord. Probeer opnieuw met backoff; niet gefactureerd. |
| 503 | billing, safety | Een 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.
- Je eerste key komt met $0.50 gratis tegoed, geldig voor 7 dagen — genoeg om te integreren en te testen. Een bevestigd e-mailadres is nodig voor een key (daarheen gaat "tegoed raakt op"). Betaald tegoed verloopt nooit.
- Tegoed verloopt niet, er is geen abonnement en niets wordt automatisch verlengd. Vul aan met kaart of in USDT/USDC op de keys-pagina.
- Er wordt niets in rekening gebracht voor geweigerde (
4xx) of mislukte (5xx) requests. Een request wordt eenmalig gefactureerd, na de response, gekoppeld aan zijnX-Request-Id. - Saldo raakt op →
402 no_credittotdat je aanvult. Stel een dagelijks plafond in op elke key, zodat een gelekte key het account niet kan leegtrekken. - Credits kunnen worden terugbetaald als ze binnen 24 uur na aankoop niet zijn gebruikt, of later worden ingezet voor een abonnement. Zie Credits en restitutie.
Persona — kaal model of het karakter van BestPrivateAI
Elke key heeft een stijl, gekozen op de keys-pagina en op elk moment te wijzigen:
- Kaal (standaard) — je system prompt is de hele prompt. Wij voegen één regel identiteit toe en niets anders.
- BestPrivateAI-persona — het karakter en de stijl van de chat op bestprivateai.com: direct, ongefilterd, geen moralisme, antwoordt in de taal van de gebruiker. Zelfde model, zelfde prijs, zelfde contentbeleid; alleen de prompt vóór je berichten verandert. Je eigen system message volgt daarna nog steeds en kan het aanpassen.
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.
403 child_safety— de request zocht seksuele content waarbij een kind betrokken is. Geweigerd, niet gefactureerd, gelogd als veiligheidsincident.400 minor_in_sexual_context— de scène is seksueel en een personage leest als onder de 18 (leeftijd genoemd, schoolomgeving, "meisje/jongen"-framing). Geen ban: maak leeftijden en framing onmiskenbaar volwassen en stuur opnieuw.
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
- 401 / "invalid API key" — de key is niet aangekomen. Controleer of de client
Authorization: Bearer sk-…met de hele key verstuurt, inclusief prefix. - 404 / onbekend endpoint — clients zijn het onderling niet eens of ze
/v1zelf toevoegen. Geefthttps://api.bestprivateai.com/v1een 404, probeer danhttps://api.bestprivateai.comals base URL (of omgekeerd). - "The Responses API is not supported yet" — sommige nieuwere clients gebruiken standaard OpenAI's Responses API. Wij bedienen alleen Chat Completions; zet de client op die modus.
- Lege modellijst — sommige clients vullen die pas na een geldige key-check. Typ
notrack-uncensoredhandmatig in. - Er gebeurt niets in een Ollama- / llama.cpp-client — die spreken hun eigen protocol, niet OpenAI-compatibel. Gebruik in plaats daarvan een van de clients hierboven.
Keys
- Tot 20 actieve keys per account. Geef elke app zijn eigen key en zijn eigen dagelijkse plafond.
- Optionele vervaldatum; een key intrekken stopt hem direct en kan niet ongedaan worden gemaakt — geef in plaats daarvan een nieuwe uit.
- De keys-pagina toont uitgaven per key, laatste gebruik en de 30-dagentotalen van het account.
Vragen of een request-id om te bekijken: support · bestprivateai.com/support.