BestPrivateAI API — 레퍼런스

OpenAI 호환 엔드포인트 하나, 모델 하나, key 하나. 코드가 이미 /v1/chat/completions와 통신하고 있다면 base URL과 key만 바꾸면 당사와 통신하게 된다.

Base URL과 인증

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

key는 key 페이지에서 생성한다. key는 생성 시 한 번만 표시되며, 당사는 그 해시값과 마지막 6자리만 저장한다. key는 반드시 HTTPS로, 오직 Authorization 헤더로만 전송할 것 — URL에는 절대 넣지 말 것.

모든 것은 JSON(Content-Type: application/json)이다. 응답은 OpenAI 스키마를 따르므로 공식 openai SDK와 OpenAI 호환 클라이언트는 수정 없이 그대로 동작한다.

모델

GET /v1/models

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

모델은 notrack-uncensored 하나뿐이다: 당사가 자체적으로 튜닝한 컴패니언 모델로, 당사 자체 하드웨어에서 구동된다. model에 무엇을 넣어 보내든 이 모델로 라우팅된다. 로그를 당사와 맞추기 위해 공개 id를 사용할 것.

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
}

응답 — 표준 형식이며, usage에 실제 토큰 수가 들어간다(이 값이 결제 기준이다):

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

대화를 지배하는 것은 사용자의 system prompt다. 당사는 정확히 한 줄만 앞에 추가한다 — 모델의 정체(BestPrivateAI이 만든 notrack-uncensored라는 사실)이며, 그 외에는 아무것도 추가하지 않는다: 규칙도, 주제 필터도 없다. 사용자의 system message가 그 뒤를 이어 페르소나, 스타일, 그 외 모든 것을 결정한다. 유일한 예외는 콘텐츠 정책에 있다.

스트리밍

"stream": true를 설정하고 OpenAI와 마찬가지로 server-sent events를 읽는다. 마지막 청크에는 usage가 들어간다(stream_options를 요청했는지 여부와 관계없이 항상 포함한다), 그 다음 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]

파라미터

필드비고
messages필수. system, user, assistant 역할(role). 현재는 텍스트만 가능 — 이미지 파트는 거부된다.
modelnotrack-uncensored를 사용할 것.
streamSSE에는 true. stream_options.include_usage는 항상 켜져 있다.
max_tokenscompletion의 상한. prompt + completion은 64,000 토큰 윈도우 내에 들어와야 한다.
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, nOpenAI와 동일하게 모델로 그대로 전달된다. temperature를 보내지 않으면 당사 채팅과 동일한 0.85를 사용한다. n > 1은 output 비용을 배로 늘린다.
tools, tool_choice지원: auto, none, required, 또는 이름이 지정된 함수. 응답에는 tool_calls와 finish_reason: "tool_calls"가 포함된다. 결과는 role: "tool" 메시지로 되돌려 보낼 것. tool이 있으면 스트리밍 응답은 토큰 단위가 아니라 호출당 한 청크로 도착한다.
response_format{"type": "json_object"}는 지원된다(원하는 JSON 형태를 prompt에서 지정할 것). json_schema와 레거시 functions 필드는 지원되지 않는다.

한도와 응답 헤더

한도값초과 시
key당 동시 요청 수8429 concurrency
key당 분당 요청 수300429 rate_limit
컨텍스트 윈도우(prompt + completion)64,000 토큰400 context_limit — 기록을 줄이고 재시도할 것
key당 일일 지출 한도(선택)key 페이지에서 직접 설정402 key_daily_cap UTC 00:00까지

성공한 모든 응답에는 다음이 포함된다:

헤더의미
X-Request-Idsupport에 문의할 때 이 값을 인용할 것. 당사가 요청에 대해 보관하는 유일한 정보다.
X-NoTrack-Balance-USD이 요청으로 청구된 크레딧 잔액 청구 전, 달러 단위.
X-RateLimit-Limit-Requests이 key에 허용된 분당 요청 수.
X-RateLimit-Limit-Concurrency이 key에 허용된 병렬 요청 수.
X-NoTrack-Content-Flag콘텐츠 거부 시에만: minor_in_sexual_context 또는 child_safety.

오류

오류는 안정적인 type를 가진 JSON이다. message는 사람이 읽기 위한 것으로 바뀔 수 있다.

{ "error": { "type": "no_credit", "message": "no credit left on this account — top up at bestprivateai.com/api-keys" } }
HTTPtype해야 할 일
400bodyJSON이 유효하지 않거나 messages가 없음.
400context_limit64,000 토큰 윈도우에 비해 prompt가 너무 길다. 오래된 턴을 제거할 것.
400content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context장면이 성적으로 읽히고 등장인물이 미성년자로 읽힌다. 등장인물을 명확히 성인으로 만들어 다시 보낼 것; 청구되지 않음.
401auth, invalid_key, key_revoked, key_expiredkey를 수정하거나 교체할 것.
402no_credit잔액이 0. 충전하면 요청이 즉시 재개된다.
402key_daily_cap이 key가 설정한 일일 한도에 도달했다. 한도를 올리거나 UTC 00:00까지 기다릴 것.
403content_policy + X-NoTrack-Content-Flag: child_safety거부되었으며 청구되지 않음. 콘텐츠 정책 참조.
429rate_limit, concurrency속도를 줄이고 재시도할 것; 두 X-RateLimit-* 헤더를 준수할 것.
502upstream모델이 응답하지 않았다. 백오프 후 재시도할 것; 청구되지 않음.
503billing, safety당사의 의존 서비스 중 하나가 다운되었다. 몇 초 후 재시도할 것; 청구되지 않음.

결제

선불 크레딧이며, 각 응답의 실제 usage를 기준으로 토큰 단위로 청구된다: input 100만 토큰당 $0.25, output 100만 토큰당 $1.00. input은 보내는 모든 것(system prompt, 기록, 새 메시지)이고, output은 모델이 작성한 것이다.

페르소나 — 순수 모델 또는 BestPrivateAI의 캐릭터

각 key에는 스타일이 있으며, key 페이지에서 선택하고 언제든 전환할 수 있다:

요청은 필드로, 또는 모델 이름만 설정할 수 있는 클라이언트를 위한 모델 suffix로 key의 설정을 재정의할 수 있다:

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

페르소나 이름: notrack(기본 캐릭터), concise, detailed, creative(채팅에서 제공하는 것과 동일한 변형), bare. 응답 헤더 X-NoTrack-Persona가 어떤 것이 적용되었는지 알려준다.

콘텐츠 정책

당사는 어떤 system prompt도 추가하지 않고 어떤 주제 필터도 실행하지 않는다. 성인 소설, 어두운 주제, 강한 언어, 소설 속 폭력 — 모델은 쓰여진 대로 답한다. 코드로 강제되어 끌 수 없는 규칙이 하나 있다: 미성년자가 관련된 성적인 내용은 모두 거부된다.

한 key에서 403가 반복되면 해당 key가, 그 다음에는 계정이 폐쇄된다. 전체 내용은 Acceptable Use policy에 있다.

개인정보

prompt와 completion은 디스크에 기록되지 않는다 — 게이트웨이도, 모델 서버도 기록하지 않는다. 요청당 당사가 보관하는 것은 요청 id, key id, 토큰 수, 가격뿐이며, 이는 청구의 근거이기 때문이다. 안전 관련 거부는 텍스트 없이 카테고리별로 기록된다. 어떤 제3의 모델 제공업체도 사용자의 트래픽을 보는 일은 없다: 모델은 당사가 직접 임대하고 관리하는 하드웨어에서 구동된다.

클라이언트와 SDK

BestPrivateAI 웹사이트와 BestPrivateAI 앱은 당사 자체 채팅이며, API key를 입력할 필드가 없고 앞으로도 생기지 않을 것이다. key는 그 외 프로그램을 위한 것이다: 아래 클라이언트 중 하나에, 또는 사용자 본인의 코드에 붙여넣을 것.

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 켜기. 컨텍스트 크기는 64,000 토큰 이하로 유지할 것.

Chatbox

Settings → Model Provider → Add → Add Custom Provider, 모드 OpenAI API Compatible → base URL과 key를 붙여넣은 뒤 notrack-uncensored를 모델로 추가한다.

NextChat

Settings → Custom Endpoint(OpenAI 호환)을 켠다 → base URL과 key를 입력한 뒤 모델 필드에 모델 이름을 직접 입력한다.

Cherry Studio

Settings → Model Providers → Add Provider → OpenAI 입력 → base URL과 key를 입력한 뒤 "Add model" → notrack-uncensored.

LobeChat

Settings → AI Service Provider → OpenAI → custom API endpoint를 활성화하고, base URL과 key를 붙여넣은 뒤 모델을 모델 목록에 추가한다.

그 외 클라이언트

LangChain, LlamaIndex, Open WebUI, Continue, JanitorAI 프록시 설정, curl — "OpenAI 호환" 또는 "custom base URL" 옵션이 있는 모든 클라이언트.

위 메뉴 표기는 앱 버전에 따라 달라진다 — 라벨이 정확히 일치하지 않으면 "custom", "OpenAI-compatible", "base URL"을 언급하는 설정을 찾을 것.

클라이언트가 연결되지 않을 때

key

질문이나 확인이 필요한 요청 id가 있다면: support · bestprivateai.com/support.