Acecr AI

راهنمای API — Acecr AI

دروازهٔ سازگار با OpenAI — هر SDK یا ابزاری که base_url را پشتیبانی کند، بدون تغییر روی کد کار می‌کند.

🚀 شروع سریع در ۳ قدم

۱

کلید بساز

از صفحهٔ کلیدهای API یک کلید بساز — فقط یک‌بار نمایش داده می‌شود؛ همان لحظه کپی کن.

۲

آدرس پایه را ست کن

در SDK یا ابزارت، آدرس پایه را عوض کن و کلید را بگذار (حالت امن‌تر: متغیر محیطی).

۳

اولین درخواست

همین نمونهٔ curl را با کلیدت اجرا کن — یا مستقیم برو سراغ نمونهٔ پایتون/Node پایین‌تر.

# آدرس پایه (Base URL)
https://chat.acecr.ir/v1

# متغیرهای محیطی (اختیاری ولی توصیه‌شده)
export ACECR_BASE="https://chat.acecr.ir/v1"
export ACECR_KEY="***"
# اولین درخواست — غیراستریم
curl https://chat.acecr.ir/v1/chat/completions \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-4-6-free","messages":[{"role":"user","content":"سلام!"}]}'

۱) احراز هویت

۲) فهرست مدل‌ها

curl https://chat.acecr.ir/v1/models \
  -H "Authorization: Bearer ***"

فهرست به‌صورت خودکار بر اساس «مدل‌های مجاز» حساب تو فیلتر می‌شود.

۳) چت — غیراستریم

curl https://chat.acecr.ir/v1/chat/completions \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6-free",
    "messages": [{"role": "user", "content": "Hello! Answer briefly."}],
    "temperature": 0.7
  }'

۴) چت — استریم (SSE)

curl -N https://chat.acecr.ir/v1/chat/completions \
  -H "Authorization: Bearer ***" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6-free",
    "stream": true,
    "stream_options": {"include_usage": true},
    "messages": [{"role": "user", "content": "Write a fibonacci function in Python"}]
  }'

خروجی: خطوط data: {…} با قطعه‌های chat.completion.chunk و پایانِ data: [DONE].

۵) پایتون (OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    base_url="https://chat.acecr.ir/v1",
    api_key="***",
)

# غیراستریم
resp = client.chat.completions.create(
    model="claude-sonnet-4-6-free",
    messages=[{"role": "user", "content": "سلام"}],
)
print(resp.choices[0].message.content)

# استریم
for chunk in client.chat.completions.create(
    model="claude-sonnet-4-6-free",
    messages=[{"role": "user", "content": "یک شعر کوتاه بگو"}],
    stream=True,
):
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

۶) Node.js (OpenAI SDK)

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://chat.acecr.ir/v1",
  apiKey: "***",
});

const stream = await client.chat.completions.create({
  model: "claude-sonnet-4-6-free",
  messages: [{ role: "user", content: "سلام" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

۷) JavaScript خام (fetch + استریم)

const res = await fetch("https://chat.acecr.ir/v1/chat/completions", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer ***",
  },
  body: JSON.stringify({
    model: "claude-sonnet-4-6-free",
    stream: true,
    messages: [{ role: "user", content: "سلام" }],
  }),
});

const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  for (const line of decoder.decode(value).split("\n")) {
    if (!line.startsWith("data: ") || line.includes("[DONE]")) continue;
    const chunk = JSON.parse(line.slice(6));
    const text = chunk.choices?.[0]?.delta?.content;
    if (text) console.log(text);
  }
}

۸) پارامترها

پارامترالزامیتوضیح
modelبلهشناسهٔ مدل از /v1/models — مثل claude-sonnet-4-6-free
messagesبلهآرایهٔ پیام‌ها با نقش‌های system / user / assistant
streamخیرخروجی SSE تکه‌تکه
temperatureخیرخلاقیت پاسخ (۰ تا ۲)
top_pخیرنمونه‌گیری هسته‌ای
max_tokensخیرحداکثر توکن خروجی
stream_options.include_usageخیرارسال مصرف توکن در انتهای استریم

۹) خطاها

کدcodeمعنی و راه‌حل
401invalid_api_keyکلید ارسال/معتبر نیست — هدر Bearer را بررسی کن
403model_not_allowedاین مدل برای حساب تو فعال نیست — از ادمین بخواه
404model_not_foundشناسهٔ مدل نادرست است — از /v1/models فهرست بگیر
429rate_limit_exceededتعداد درخواست‌ها زیاد است — کمی بعد دوباره تلاش کن
429allowance_exhaustedسهمیهٔ ماهانهٔ حساب تمام شده — از پنل شارژ کن
429key_allowance_exhaustedسهمیهٔ ماهانهٔ همین کلید تمام شده — کلید دیگری بساز
502upstream_errorخطای موقت ارائه‌دهنده — دوباره تلاش کن

۱۰) محدودیت‌ها و نکات

۱۱) مدل رایگان یا محلی (Ollama)؟

۱۲) سازگاری Anthropic — /v1/messages

curl https://chat.acecr.ir/v1/messages \
  -H "x-api-key: ***" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6-free",
    "max_tokens": 200,
    "system": "پاسخ خیلی کوتاه بده",
    "messages": [{"role": "user", "content": "سلام!"}]
  }'

همان کلیدهای sk-mn-… کار می‌کنند؛ با SDK رسمی Anthropic هم فقط base_url را عوض کن. پارامتر stream: true هم پشتیبانی می‌شود.

💡 هر بلوک کد بالا دکمهٔ «کپی» دارد — کلیدت را جای *** بگذار و مستقیم اجرا کن.