BestPrivateAI API — riferimento

Un endpoint compatibile OpenAI, un modello, una chiave. Se il tuo codice parla già con /v1/chat/completions, cambia l'URL di base e la chiave e parlerà con noi.

URL di base e autenticazione

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

Le chiavi si creano su la pagina delle chiavi. Una chiave viene mostrata una sola volta, alla creazione; noi conserviamo un hash e le sue ultime sei cifre. Inviala solo via HTTPS e solo nell'header Authorization — mai in un URL.

Tutto è JSON (Content-Type: application/json). Le risposte usano lo schema OpenAI, quindi gli SDK ufficiali openai e ogni client compatibile con OpenAI funzionano senza modifiche.

Modelli

GET /v1/models

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

C'è un solo modello, notrack-uncensored: la nostra versione companion, eseguita sul nostro hardware. Qualunque cosa passi come model viene instradata a esso; usa l'id pubblico affinché i tuoi log corrispondano ai nostri.

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
}

Risposta — la forma standard, con conteggi reali dei token in usage (è su questo che vieni fatturato):

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

Il tuo system prompt governa la conversazione. Anteponiamo esattamente una riga — l'identità del modello (che è notrack-uncensored, creato da BestPrivateAI) — e nulla altro: nessuna regola, nessun filtro sugli argomenti. Il tuo messaggio di sistema la segue e decide persona, stile e tutto il resto. L'unica eccezione è in Policy sui contenuti.

Streaming

Imposta "stream": true e leggi i server-sent events, esattamente come con OpenAI. L'ultimo chunk contiene usage (lo includiamo sempre, che tu lo richieda o no con stream_options), poi 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]

Parametri

CampoNote
messagesObbligatorio. Ruoli system, user, assistant. Solo testo per ora — le parti immagine vengono rifiutate.
modelUsa notrack-uncensored.
streamtrue per SSE. stream_options.include_usage è sempre attivo.
max_tokensLimite sulla completion. Prompt + completion devono rientrare nella finestra di 64,000 token.
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, nPassato al modello come in OpenAI. Se non invii temperature usiamo 0.85, come la nostra chat. n > 1 moltiplica il costo dell'output.
tools, tool_choiceSupportati: auto, none, required, o una funzione con nome. La risposta contiene tool_calls e finish_reason: "tool_calls"; rinvia il risultato come messaggio role: "tool". Con i tool presenti, una risposta in streaming arriva come un unico chunk per chiamata invece che token per token.
response_format{"type": "json_object"} è supportato (indica nel prompt quale JSON vuoi). json_schema e il campo legacy functions non lo sono.

Limiti e header di risposta

LimiteValoreSe superato
Richieste simultanee per chiave8429 concurrency
Richieste al minuto per chiave300429 rate_limit
Finestra di contesto (prompt + completion)64,000 token400 context_limit — riduci la cronologia e riprova
Spesa giornaliera per chiave (opzionale)impostata da te sulla pagina delle chiavi402 key_daily_cap fino alle 00:00 UTC

Ogni risposta riuscita contiene:

HeaderSignificato
X-Request-IdCita questo valore quando scrivi al supporto; è l'unica cosa che conserviamo di una richiesta.
X-NoTrack-Balance-USDIl tuo credito prima che questa richiesta è stato addebitato, in dollari.
X-RateLimit-Limit-RequestsRichieste al minuto consentite per questa chiave.
X-RateLimit-Limit-ConcurrencyRichieste parallele consentite per questa chiave.
X-NoTrack-Content-FlagSolo in caso di rifiuto per contenuto: minor_in_sexual_context o child_safety.

Errori

Gli errori sono JSON con un type stabile; il message è per gli esseri umani e può cambiare.

{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
HTTPtypeCosa fare
400bodyJSON non valido o messages assente.
400context_limitPrompt troppo lungo per la finestra di 64,000 token. Rimuovi i turni più vecchi.
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_contextLa scena si legge come sessuale e un personaggio si legge come minorenne. Rendi i personaggi inequivocabilmente adulti e rinvia; non fatturato.
401auth, invalid_key, key_revoked, key_expiredCorreggi o sostituisci la chiave.
402no_creditIl saldo è zero. Ricarica; le richieste riprendono immediatamente.
402key_daily_capQuesta chiave ha raggiunto il tetto giornaliero che hai impostato. Alzalo o attendi le 00:00 UTC.
403content_policy + X-NoTrack-Content-Flag: child_safetyRifiutato e non fatturato. Vedi Policy sui contenuti.
429rate_limit, concurrencyRallenta e riprova; rispetta i due header X-RateLimit-*.
502upstreamIl modello non ha risposto. Riprova con backoff; non fatturato.
503billing, safetyUna nostra dipendenza è inattiva. Riprova in pochi secondi; non fatturato.

Fatturazione

Credito prepagato, addebitato per token in base al reale usage di ogni risposta: $0.25 per 1M di token di input, $1.00 per 1M di token di output. L'input è tutto ciò che invii (system prompt, cronologia, il nuovo messaggio); l'output è ciò che scrive il modello.

Persona — modello nudo o il personaggio di BestPrivateAI

Ogni chiave ha uno stile, scelto sulla pagina delle chiavi e modificabile in qualsiasi momento:

Una richiesta può sovrascrivere l'impostazione della chiave, con un campo o con un suffisso del modello (per i client che possono impostare solo un nome di modello):

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

Nomi delle persona: notrack (il personaggio semplice), concise, detailed, creative (le stesse varianti offerte dalla chat), bare. L'header di risposta X-NoTrack-Persona indica quale è stata applicata.

Policy sui contenuti

Non aggiungiamo nessun system prompt e non eseguiamo nessun filtro sugli argomenti. Narrativa per adulti, temi cupi, linguaggio forte, violenza nella finzione — il modello risponde come scritto. Una regola è applicata nel codice e non può essere disattivata: qualsiasi contenuto sessuale che coinvolga un minore viene rifiutato.

403 ripetuti su una chiave portano alla chiusura della chiave, poi dell'account. Il testo completo è nella Acceptable Use policy.

Privacy

Prompt e completion non vengono scritti su disco — né dal gateway, né dai server del modello. Ciò che conserviamo per ogni richiesta è l'id della richiesta, l'id della chiave, i conteggi dei token e il prezzo, perché è ciò su cui si basa la fattura. I rifiuti per sicurezza vengono registrati per categoria, senza il testo. Nessun fornitore di modelli terzo vede mai il tuo traffico: il modello è eseguito su hardware che noleggiamo e controlliamo noi.

Client e SDK

Il sito BestPrivateAI e l'app BestPrivateAI sono la nostra chat — non hanno un campo per una chiave API e non lo avranno mai. Una chiave serve per programmi altri: incollala in uno dei client sottostanti, oppure nel tuo codice.

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 attivo. Mantieni la dimensione del contesto entro 64,000 token.

Chatbox

Settings → Model Provider → Add → Add Custom Provider, modalità OpenAI API Compatible → incolla l'URL di base e la chiave, poi aggiungi notrack-uncensored come modello.

NextChat

Settings → attiva Custom Endpoint (compatibile OpenAI) → URL di base e chiave, poi digita il nome del modello nel campo modello.

Cherry Studio

Settings → Model Providers → Add Provider → digita OpenAI → URL di base e chiave, poi "Add model" → notrack-uncensored.

LobeChat

Settings → AI Service Provider → OpenAI → attiva custom API endpoint, incolla l'URL di base e la chiave, e aggiungi il modello alla lista dei modelli.

Qualsiasi altro client

LangChain, LlamaIndex, Open WebUI, Continue, le impostazioni proxy di JanitorAI, curl — qualsiasi client con un'opzione "compatibile OpenAI" o "URL di base personalizzato".

La formulazione dei menu sopra cambia tra le versioni delle app — se un'etichetta non corrisponde esattamente, cerca l'impostazione che menziona "custom", "OpenAI-compatible" o "base URL".

Se un client non si connette

Chiavi

Domande o un id di richiesta da controllare: supporto · bestprivateai.com/support.