API نوتراک — مرجع
یک اندپوینت سازگار با OpenAI، یک مدل، یک کلید. اگر کد شما از قبل با /v1/chat/completions صحبت میکند، فقط URL پایه و کلید را عوض کنید، و با ما صحبت خواهد کرد.
URL پایه و احراز هویت
Base URL: https://api.bestprivateai.com/v1
Header: Authorization: Bearer sk-…
کلیدها در صفحه کلیدها ساخته میشوند. یک کلید فقط یک بار، هنگام ساخت، نمایش داده میشود؛ ما یک hash و شش کاراکتر آخر آن را ذخیره میکنیم. آن را فقط از طریق HTTPS و فقط در هدر Authorization ارسال کنید — هرگز در URL.
همه چیز JSON است (Content-Type: application/json). پاسخها از schema اوپنایآی استفاده میکنند، بنابراین SDKهای رسمی openai و هر کلاینت سازگار با 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. فعلاً فقط متن — بخشهای تصویری رد میشوند. |
model | از notrack-uncensored استفاده کنید. |
stream | true برای SSE. 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، یا یک تابع نامگذاریشده. پاسخ حاوی tool_calls و finish_reason: "tool_calls" است؛ نتیجه را بهعنوان یک پیام role: "tool" برگردانید. وقتی tools وجود دارد، پاسخ استریمشده بهجای توکنبهتوکن، بهصورت یک بخش برای هر فراخوانی میرسد. |
response_format | {"type": "json_object"} پشتیبانی میشود (در prompt بگویید چه JSONی میخواهید). json_schema و فیلد قدیمی functions پشتیبانی نمیشوند. |
محدودیتها و هدرهای پاسخ
| محدودیت | مقدار | هنگام عبور از حد |
|---|---|---|
| درخواستهای همزمان برای هر کلید | 8 | 429 concurrency |
| درخواست در دقیقه برای هر کلید | 300 | 429 rate_limit |
| پنجره کانتکست (prompt + completion) | 64,000 توکن | 400 context_limit — تاریخچه را کوتاه کنید و دوباره تلاش کنید |
| هزینه روزانه برای هر کلید (اختیاری) | توسط شما در صفحه کلیدها تنظیم میشود | 402 key_daily_cap تا 00:00 UTC |
هر پاسخ موفق حاوی موارد زیر است:
| هدر | معنی |
|---|---|
X-Request-Id | هنگام نوشتن به پشتیبانی آن را ذکر کنید؛ این تنها چیزی است که درباره یک درخواست نگه میداریم. |
X-NoTrack-Balance-USD | اعتبار شما پیش از کسر هزینه این درخواست، به دلار. |
X-RateLimit-Limit-Requests | درخواست در دقیقه مجاز برای این کلید. |
X-RateLimit-Limit-Concurrency | درخواستهای همزمان مجاز برای این کلید. |
X-NoTrack-Content-Flag | فقط در رد محتوا: minor_in_sexual_context یا child_safety. |
خطاها
خطاها JSON هستند با یک type پایدار؛ 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 | prompt برای پنجره 64,000 توکنی خیلی طولانی است. نوبتهای قدیمیتر را حذف کنید. |
| 400 | content_policy + X-NoTrack-Content-Flag: minor_in_sexual_context | صحنه جنسی به نظر میرسد و یک شخصیت زیر سن قانونی به نظر میرسد. شخصیتها را بهطور غیرقابلابهام بزرگسال کنید و دوباره ارسال کنید؛ هزینهای دریافت نمیشود. |
| 401 | auth, invalid_key, key_revoked, key_expired | کلید را اصلاح یا جایگزین کنید. |
| 402 | no_credit | اعتبار صفر است. شارژ کنید؛ درخواستها بلافاصله از سر گرفته میشوند. |
| 402 | key_daily_cap | این کلید به سقف روزانهای که تعیین کردهاید رسیده است. آن را افزایش دهید یا تا 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، تاریخچه، پیام جدید)؛ خروجی چیزی است که مدل مینویسد.
- کلید اول شما با $0.50 اعتبار رایگان همراه است، معتبر برای 7 روز — کافی برای یکپارچهسازی و تست. برای یک کلید یک ایمیل تأییدشده لازم است (همان جایی که اعلان «اعتبار رو به اتمام است» ارسال میشود). اعتبار پولی هرگز منقضی نمیشود.
- اعتبار منقضی نمیشود، هیچ اشتراکی وجود ندارد و چیزی خودبهخود تمدید نمیشود. در صفحه کلیدها با کارت یا با USDT/USDC شارژ کنید.
- برای درخواستهای رد شده (
4xx) یا ناموفق (5xx) هیچ هزینهای دریافت نمیشود. یک درخواست فقط یک بار، پس از پاسخ، بر اساسX-Request-Idآن هزینه میشود. - وقتی اعتبار تمام شود ←
402 no_creditتا زمانی که شارژ کنید. برای هر کلید یک سقف روزانه تنظیم کنید تا یک کلید افشاشده نتواند حساب را خالی کند. - اعتبارهای مصرفنشده را میتوان ظرف 24 ساعت پس از خرید استرداد کرد یا بعداً برای یک اشتراک به کار برد. ببینید اعتبارها و استرداد وجه.
پرسونا — مدل خام یا شخصیت BestPrivateAI
هر کلید یک سبک دارد، که در صفحه کلیدها انتخاب میشود و هر زمان قابل تغییر است:
- خام (پیشفرض) — system prompt شما کل prompt است. ما یک خط هویت اضافه میکنیم و هیچ چیز دیگری.
- پرسونای BestPrivateAI — شخصیت و سبک چت در bestprivateai.com: مستقیم، بدون فیلتر، بدون اخلاقگویی، به زبان کاربر پاسخ میدهد. همان مدل، همان قیمت، همان سیاست محتوا؛ فقط promptی که قبل از پیامهای شما میآید تغییر میکند. system message خود شما همچنان بعد از آن میآید و میتواند آن را تنظیم کند.
یک درخواست میتواند تنظیم کلید را لغو کند، یا با یک فیلد یا با یک پسوند مدل (برای کلاینتهایی که فقط میتوانند نام مدل را تنظیم کنند):
{ "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 سال به نظر میرسد (سن ذکرشده، محیط مدرسه، قالببندی «دختر/پسر»). این یک ممنوعیت نیست: سن و قالببندی را بهطور غیرقابلابهام بزرگسال کنید و دوباره ارسال کنید.
تکرار 403 روی یک کلید منجر به بسته شدن آن کلید و سپس حساب میشود. متن کامل در سیاست استفاده مجاز آمده است.
حریم خصوصی
prompts و completions روی دیسک نوشته نمیشوند — نه توسط gateway، نه توسط سرورهای مدل. آنچه ما به ازای هر درخواست نگه میداریم عبارت است از id درخواست، id کلید، شمارش توکنها و قیمت، چون همین صورتحساب را میسازد. ردهای امنیتی بر اساس دستهبندی، بدون متن، ثبت میشوند. هیچ ارائهدهنده مدل شخص ثالثی هرگز ترافیک شما را نمیبیند: مدل روی سختافزاری اجرا میشود که ما اجاره میکنیم و کنترل میکنیم.
کلاینتها و SDKها
وبسایت BestPrivateAI و اپلیکیشن BestPrivateAI چت خودمان هستند — فیلدی برای کلید API ندارند و هرگز نخواهند داشت. یک کلید برای برنامههای دیگر است: آن را در یکی از کلاینتهای زیر، یا در کد خودتان، paste کنید.
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 پایه و کلید را paste کنید، سپس notrack-uncensored را بهعنوان مدل اضافه کنید.
NextChat
Settings → Custom Endpoint را روشن کنید (سازگار با OpenAI) → URL پایه و کلید، سپس نام مدل را در فیلد مدل تایپ کنید.
Cherry Studio
Settings → Model Providers → Add Provider → OpenAI را تایپ کنید → URL پایه و کلید، سپس «Add model» → notrack-uncensored.
LobeChat
Settings → AI Service Provider → OpenAI → custom API endpoint را فعال کنید، URL پایه و کلید را paste کنید، و مدل را به لیست مدلها اضافه کنید.
هر چیز دیگر
LangChain، LlamaIndex، Open WebUI، Continue، تنظیمات پراکسی JanitorAI، curl — هر کلاینتی که گزینه «OpenAI-compatible» یا «custom base URL» داشته باشد.
متن منوها در بالا بین نسخههای اپلیکیشن تغییر میکند — اگر یک برچسب دقیقاً مطابقت نداشت، به دنبال تنظیمی باشید که «custom»، «OpenAI-compatible» یا «base URL» را ذکر میکند.
اگر یک کلاینت وصل نمیشود
- 401 / «invalid API key» — کلید هرگز نرسیده. مطمئن شوید کلاینت
Authorization: Bearer sk-…را با کلید کامل، همراه با پیشوند، ارسال میکند. - 404 / اندپوینت ناشناخته — کلاینتها بر اینکه خودشان
/v1را اضافه میکنند یا نه توافق ندارند. اگرhttps://api.bestprivateai.com/v1خطای 404 میدهد، بهجای آنhttps://api.bestprivateai.comرا بهعنوان URL پایه امتحان کنید (یا برعکس). - «The Responses API is not supported yet» — برخی کلاینتهای جدیدتر بهطور پیشفرض از Responses API اوپنایآی استفاده میکنند. ما فقط Chat Completions ارائه میدهیم؛ کلاینت را به آن حالت تغییر دهید.
- لیست مدل خالی — برخی کلاینتها آن را فقط بعد از یک بررسی کلید معتبر پر میکنند.
notrack-uncensoredرا دستی تایپ کنید. - در یک کلاینت Ollama / llama.cpp هیچ اتفاقی نمیافتد — آنها پروتکل خودشان را صحبت میکنند، نه سازگار با OpenAI. بهجای آن از یکی از کلاینتهای بالا استفاده کنید.
کلیدها
- تا 20 کلید فعال برای هر حساب. به هر اپلیکیشن کلید و سقف روزانه مخصوص خودش را بدهید.
- تاریخ انقضای اختیاری؛ باطل کردن یک کلید آن را فوراً متوقف میکند و قابل بازگشت نیست — بهجای آن یک کلید جدید صادر کنید.
- صفحه کلیدها هزینه هر کلید، آخرین استفاده و مجموع 30 روزه حساب را نشان میدهد.
سؤال دارید یا یک request id برای بررسی: پشتیبانی · bestprivateai.com/support.