BestPrivateAI API — संदर्भ
एक OpenAI-संगत एंडपॉइंट, एक मॉडल, एक key। अगर आपका कोड पहले से /v1/chat/completions से बात करता है, तो बेस URL और key बदल दें, और यह हमसे बात करेगा।
बेस URL और प्रमाणीकरण
Base URL: https://api.bestprivateai.com/v1
Header: Authorization: Bearer sk-…
Keys keys पेज पर बनाई जाती हैं। एक key बनने के समय सिर्फ एक बार दिखाई जाती है; हम एक hash और उसके आख़िरी छह अक्षर संग्रहीत करते हैं। इसे केवल 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 बातचीत को नियंत्रित करता है। हम शुरुआत में ठीक एक लाइन जोड़ते हैं — मॉडल की पहचान (कि यह notrack-uncensored है, BestPrivateAI द्वारा बनाया गया) — और कुछ नहीं: न कोई नियम, न कोई टॉपिक फ़िल्टर। आपका system message उसके बाद आता है और पर्सोना, स्टाइल और बाकी सब कुछ तय करता है। एकमात्र अपवाद कंटेंट पॉलिसी में है।
स्ट्रीमिंग
"stream": true सेट करें और server-sent events पढ़ें, बिल्कुल OpenAI जैसा। आख़िरी चंक में 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 रोल। अभी के लिए केवल टेक्स्ट — image वाले हिस्से रिजेक्ट होते हैं। |
model | notrack-uncensored का उपयोग करें। |
stream | SSE के लिए true। stream_options.include_usage हमेशा चालू रहता है। |
max_tokens | completion पर एक कैप। prompt + completion को 64,000-टोकन विंडो में फ़िट होना चाहिए। |
temperature, top_p, stop, presence_penalty, frequency_penalty, seed, n | OpenAI जैसा ही मॉडल को पास किया जाता है। अगर आप temperature नहीं भेजते तो हम 0.85 इस्तेमाल करते हैं, हमारे चैट जैसा ही। n > 1 आउटपुट कॉस्ट को गुणा करता है। |
tools, tool_choice | समर्थित: auto, none, required, या कोई नामित function। रिप्लाई में tool_calls और finish_reason: "tool_calls" होता है; परिणाम को role: "tool" मैसेज के रूप में वापस भेजें। जब tools मौजूद हों, तो स्ट्रीम की गई रिप्लाई टोकन-दर-टोकन के बजाय हर कॉल पर एक चंक के रूप में आती है। |
response_format | {"type": "json_object"} समर्थित है (prompt में बताएं कि आपको कौन-सा JSON चाहिए)। json_schema और legacy functions फ़ील्ड समर्थित नहीं हैं। |
सीमाएँ और रिस्पॉन्स हेडर
| सीमा | वैल्यू | पार होने पर |
|---|---|---|
| प्रति key समवर्ती रिक्वेस्ट | 8 | 429 concurrency |
| प्रति key प्रति मिनट रिक्वेस्ट | 300 | 429 rate_limit |
| कॉन्टेक्स्ट विंडो (prompt + completion) | 64,000 टोकन | 400 context_limit — history छोटा करें और फिर से कोशिश करें |
| प्रति key दैनिक खर्च (वैकल्पिक) | keys पेज पर आपके द्वारा सेट | 402 key_daily_cap 00:00 UTC तक |
हर सफल रिस्पॉन्स में होता है:
| हेडर | अर्थ |
|---|---|
X-Request-Id | सपोर्ट को लिखते समय इसे बताएं; किसी रिक्वेस्ट के बारे में हम केवल यही रखते हैं। |
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" } }
| HTTP | type | क्या करें |
|---|---|---|
| 400 | body | अमान्य JSON या कोई messages नहीं। |
| 400 | context_limit | 64,000-टोकन विंडो के लिए prompt बहुत लंबा है। पुराने turns हटाएँ। |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | सीन सेक्शुअल लगता है और एक कैरेक्टर नाबालिग लगता है। कैरेक्टर्स को स्पष्ट रूप से एडल्ट बनाएं और फिर से भेजें; बिल नहीं होता। |
| 401 | auth, invalid_key, key_revoked, key_expired | key को ठीक करें या बदलें। |
| 402 | no_credit | बैलेंस ज़ीरो है। टॉप अप करें; रिक्वेस्ट तुरंत फिर से शुरू हो जाती हैं। |
| 402 | key_daily_cap | इस key ने आपके द्वारा सेट की गई दैनिक सीमा को छू लिया है। इसे बढ़ाएं या 00:00 UTC तक इंतज़ार करें। |
| 403 | content_policy + X-NoTrack-Content-Flag: child_safety | रिफ्यूज़ हुआ और बिल नहीं हुआ। कंटेंट पॉलिसी देखें। |
| 429 | rate_limit, concurrency | धीमा करें और फिर से कोशिश करें; दोनों X-RateLimit-* हेडर का सम्मान करें। |
| 502 | upstream | मॉडल ने जवाब नहीं दिया। backoff के साथ फिर से कोशिश करें; बिल नहीं होता। |
| 503 | billing, safety | हमारी एक dependency डाउन है। कुछ सेकंड में फिर से कोशिश करें; बिल नहीं होता। |
बिलिंग
प्रीपेड क्रेडिट, हर रिस्पॉन्स के वास्तविक usage के आधार पर प्रति टोकन चार्ज किया जाता है: $0.25 प्रति 1M इनपुट टोकन, $1.00 प्रति 1M आउटपुट टोकन। इनपुट वह सब कुछ है जो आप भेजते हैं (system prompt, history, नया मैसेज); आउटपुट वह है जो मॉडल लिखता है।
- आपकी पहली key $0.50 के मुफ़्त क्रेडिट के साथ आती है, जो 7 दिनों के लिए वैलिड है — इंटीग्रेट और टेस्ट करने के लिए पर्याप्त। key के लिए एक कन्फ़र्म ईमेल ज़रूरी है (यहीं "क्रेडिट खत्म हो रहा है" वाला नोटिस जाता है)। पेड क्रेडिट कभी एक्सपायर नहीं होता।
- क्रेडिट एक्सपायर नहीं होता, कोई सब्सक्रिप्शन नहीं है, और कुछ भी अपने आप रिन्यू नहीं होता। keys पेज पर कार्ड या USDT/USDC से टॉप अप करें।
- रिफ्यूज़ की गई रिक्वेस्ट (
4xx) या फेल हुई रिक्वेस्ट (5xx) के लिए कुछ भी चार्ज नहीं होता। एक रिक्वेस्ट रिस्पॉन्स के बाद, उसकेX-Request-Idके आधार पर, सिर्फ एक बार चार्ज होती है। - बैलेंस खत्म होने पर → जब तक आप टॉप अप नहीं करते,
402 no_credit। हर key पर एक दैनिक सीमा सेट करें ताकि लीक हुई key अकाउंट को खाली न कर सके। - क्रेडिट खरीद के 24 घंटों के भीतर अगर इस्तेमाल न हुए हों तो वापस किए जा सकते हैं, या बाद में किसी योजना पर लगाए जा सकते हैं। देखें क्रेडिट और रफ़ंड।
पर्सोना — बेयर मॉडल या BestPrivateAI का कैरेक्टर
हर key का एक स्टाइल होता है, जो keys पेज पर चुना जाता है और किसी भी समय बदला जा सकता है:
- बेयर (डिफ़ॉल्ट) — आपका system prompt ही पूरा prompt है। हम पहचान की एक लाइन जोड़ते हैं और कुछ नहीं।
- BestPrivateAI पर्सोना — bestprivateai.com पर चैट का कैरेक्टर और स्टाइल: सीधा, अनफ़िल्टर्ड, बिना नैतिकता सिखाए, यूज़र की भाषा में जवाब देता है। वही मॉडल, वही कीमत, वही कंटेंट पॉलिसी; बस आपके मैसेज से पहले वाला prompt बदलता है। आपका अपना system message अब भी उसके बाद आता है और उसे एडजस्ट कर सकता है।
एक रिक्वेस्ट 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 नहीं जोड़ते और कोई टॉपिक फ़िल्टर नहीं चलाते। एडल्ट फ़िक्शन, डार्क थीम, तेज़ भाषा, फ़िक्शन में हिंसा — मॉडल जैसा लिखा है वैसा ही जवाब देता है। एक नियम कोड में लागू है और बंद नहीं किया जा सकता: किसी नाबालिग से जुड़ी कोई भी सेक्शुअल चीज़ रिफ्यूज़ की जाती है।
403 child_safety— रिक्वेस्ट में बच्चे से जुड़ा सेक्शुअल कंटेंट माँगा गया था। रिफ्यूज़ हुआ, बिल नहीं हुआ, सेफ्टी इवेंट के रूप में लॉग हुआ।400 minor_in_sexual_context— सीन सेक्शुअल है और एक कैरेक्टर 18 साल से कम उम्र का लगता है (उम्र बताई गई, स्कूल वाली सेटिंग, "girl/boy" फ़्रेमिंग)। यह बैन नहीं है: उम्र और फ़्रेमिंग को स्पष्ट रूप से एडल्ट बनाएं और फिर से भेजें।
किसी key पर बार-बार होने वाले 403 की वजह से पहले key और फिर अकाउंट बंद हो जाता है। पूरा टेक्स्ट Acceptable Use policy में है।
प्राइवेसी
Prompts और completions डिस्क पर नहीं लिखे जाते — न gateway द्वारा, न मॉडल सर्वर द्वारा। हम हर रिक्वेस्ट के लिए जो रखते हैं वह है request id, key id, टोकन गणना और कीमत, क्योंकि यही बिल बनाता है। सेफ्टी रिफ्यूज़ल कैटेगरी के अनुसार लॉग होते हैं, टेक्स्ट के बिना। कोई थर्ड-पार्टी मॉडल प्रोवाइडर आपका ट्रैफ़िक कभी नहीं देखता: मॉडल उस हार्डवेयर पर चलता है जिसे हम किराए पर लेते हैं और नियंत्रित करते हैं।
क्लाइंट और 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 → बेस URL और key पेस्ट करें, फिर मॉडल के रूप में notrack-uncensored जोड़ें।
NextChat
Settings → Custom Endpoint (OpenAI-संगत) ऑन करें → बेस URL और key, फिर मॉडल फ़ील्ड में मॉडल नेम टाइप करें।
Cherry Studio
Settings → Model Providers → Add Provider → OpenAI टाइप करें → बेस URL और key, फिर "Add model" → notrack-uncensored।
LobeChat
Settings → AI Service Provider → OpenAI → custom API endpoint एनेबल करें, बेस URL और key पेस्ट करें, और मॉडल को मॉडल लिस्ट में जोड़ें।
कुछ और
LangChain, LlamaIndex, Open WebUI, Continue, JanitorAI प्रॉक्सी सेटिंग्स, curl — कोई भी क्लाइंट जिसमें "OpenAI-compatible" या "custom base URL" ऑप्शन हो।
ऊपर दिए गए मेन्यू शब्द ऐप वर्ज़न के बीच बदलते रहते हैं — अगर कोई लेबल एग्ज़ैक्टली मैच न करे, तो वह सेटिंग खोजें जिसमें "custom", "OpenAI-compatible", या "base URL" का ज़िक्र हो।
अगर कोई क्लाइंट कनेक्ट नहीं होता
- 401 / "invalid API key" — key कभी पहुँची ही नहीं। पुष्टि करें कि क्लाइंट पूरी key
Authorization: Bearer sk-…में भेजता है, प्रीफ़िक्स के साथ। - 404 / अनजान endpoint — क्लाइंट्स इस बात पर सहमत नहीं होते कि वे खुद
/v1जोड़ते हैं या नहीं। अगरhttps://api.bestprivateai.com/v1404 देता है, तो इसके बजायhttps://api.bestprivateai.comको बेस URL के रूप में आज़माएं (या इसका उल्टा)। - "The Responses API is not supported yet" — कुछ नए क्लाइंट डिफ़ॉल्ट रूप से OpenAI के Responses API का उपयोग करते हैं। हम केवल Chat Completions सर्व करते हैं; क्लाइंट को उस मोड पर स्विच करें।
- खाली मॉडल लिस्ट — कुछ क्लाइंट इसे वैलिड key चेक के बाद ही भरते हैं।
notrack-uncensoredको हाथ से टाइप करें। - किसी Ollama / llama.cpp क्लाइंट में कुछ नहीं होता — वे अपना प्रोटोकॉल बोलते हैं, OpenAI-संगत नहीं। इसके बजाय ऊपर दिए गए क्लाइंट्स में से किसी एक का उपयोग करें।
Keys
- प्रति अकाउंट 20 तक एक्टिव keys। हर ऐप को उसकी अपनी key और अपनी दैनिक सीमा दें।
- वैकल्पिक एक्सपायरी डेट; किसी key को रिवोक करने से वह तुरंत बंद हो जाती है और इसे वापस नहीं किया जा सकता — इसके बजाय एक नई key जारी करें।
- keys पेज प्रति-key खर्च, आख़िरी उपयोग और अकाउंट के 30-दिन के टोटल दिखाता है।
सवाल हैं या देखने के लिए कोई request id: सपोर्ट · bestprivateai.com/support।