اصلیترین endpoint نِت اَرز و سازگار با OpenAI Chat Completions. مدلهای GPT، Gemini و DeepSeek را مستقیم وصل کردهایم و Claude، Grok، Mistral، Llama، Qwen و بقیه از مسیر OpenRouter میآیند؛ برای همهٔ آنها همین endpoint را با همان بدنه صدا میزنید و ترجمه به پروتکل هر ارائهدهنده در سمت نِت اَرز انجام میشود. شکل شناسهٔ مدل در مدلها و قیمتها آمده است.
درخواست پایه
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "شما دستیار پشتیبانی فروشگاه نِت اَرز هستید؛ کوتاه و دقیق پاسخ بدهید."},
{"role": "user", "content": "سفارشم کی تحویل داده میشود؟"},
],
temperature=0.4,
max_tokens=300,
)
print(response.choices[0].message.content)
const response = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [
{ role: "system", content: "شما دستیار پشتیبانی فروشگاه نِت اَرز هستید؛ کوتاه و دقیق پاسخ بدهید." },
{ role: "user", content: "سفارشم کی تحویل داده میشود؟" },
],
temperature: 0.4,
max_tokens: 300,
});
console.log(response.choices[0].message.content);
curl https://netarz.ir/api/ai/v1/chat/completions \
-H "Authorization: Bearer $NETARZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{"role": "system", "content": "شما دستیار پشتیبانی فروشگاه نِت اَرز هستید؛ کوتاه و دقیق پاسخ بدهید."},
{"role": "user", "content": "سفارشم کی تحویل داده میشود؟"}
],
"temperature": 0.4,
"max_tokens": 300
}'
{
"id": "req_9f2c1e0b7a6d4c3f8e1a2b3c",
"object": "chat.completion",
"created": 1756540800,
"model": "gpt-4o-mini",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "سفارشهای دیجیتال معمولاً بلافاصله پس از پرداخت در پنل شما قرار میگیرند." },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 58,
"completion_tokens": 27,
"total_tokens": 85,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 0 }
}
}
پارامترها
| پارامتر | نوع | توضیح |
|---|---|---|
model الزامی | string | شناسهٔ مدل (فهرست). باید از نوع گفتوگو باشد. |
messages الزامی | array | آرایهٔ غیرخالی پیامها با role و content (حداکثر ۵۰۰ پیام). |
stream | boolean | پاسخ بهصورت SSE. استریم |
max_tokens / max_completion_tokens | integer | سقف توکن خروجی. تعیین آن مبلغ رزرو اعتبار را کوچک میکند. بیشتر |
temperature، top_p | number | خلاقیت/تنوع پاسخ. عبور مستقیم به ارائهدهنده. |
n | integer | تعداد پاسخهای موازی؛ حداکثر ۴. هر پاسخ جداگانه هزینه دارد. |
stop | string | array | رشتههای توقف. |
response_format | object | {"type": "json_object"} یا json_schema برای مدلهایی که json را پشتیبانی میکنند. |
tools، tool_choice، parallel_tool_calls | array | string | object | فراخوانی تابع (function calling) به سبک OpenAI؛ برای Claude و Gemini هم به قالب خودشان ترجمه میشود. |
reasoning_effort | low | medium | high | برای مدلهای استدلالی. در Claude به بودجهٔ extended thinking تبدیل میشود. |
seed، logprobs، frequency_penalty، presence_penalty، logit_bias | — | عبور مستقیم؛ فقط اگر ارائهدهندهٔ زیرین پشتیبانی کند اثر دارد. |
user | string | پذیرفته میشود اما پیش از ارسال با شناسهٔ حساب شما در نِت اَرز جایگزین میشود (حریم خصوصی کاربران نهایی شما). |
فیلدهای stream_options، store، service_tier و safety_identifier حذف میشوند. سایر فیلدهای ناشناخته به همان شکل به ارائهدهنده عبور داده میشوند (مثلاً فیلدهای اختصاصی DeepSeek یا OpenRouter).
پیامها
نقشها: system یا developer (دستور کلی)، user، assistant (پاسخهای قبلی) و tool (خروجی تابع). content میتواند رشته یا آرایهای از بخشها باشد:
{"type": "text", "text": "…"}{"type": "image_url", "image_url": {"url": "https://… یا data:image/…;base64,…"}}— فقط برای مدلهای با قابلیتvision. هر تصویر هزینهٔ توکنی دارد که ارائهدهنده گزارش میکند.
برای Claude، پیامهای system به فیلد system و نقش tool به بلوک tool_result ترجمه میشود؛ شما چیزی متفاوت نمیفرستید.
بینایی (ورودی تصویر)
response = client.chat.completions.create(
model="gpt-4o-mini", # یا هر مدلی با capabilities.vision = true
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "مبلغ این رسید چقدر است و به چه تاریخی؟"},
{"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}},
# یا تصویر base64: {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQ..."}}
],
}],
max_tokens=200,
)
ابزارها (function calling)
مدل تصمیم میگیرد تابعی را صدا بزند؛ شما تابع را اجرا میکنید و نتیجه را با نقش tool برمیگردانید:
tools = [{
"type": "function",
"function": {
"name": "get_order_status",
"description": "وضعیت یک سفارش را بر اساس شمارهٔ سفارش برمیگرداند",
"parameters": {
"type": "object",
"properties": {"order_number": {"type": "string"}},
"required": ["order_number"],
},
},
}]
messages = [{"role": "user", "content": "سفارش NZ-10422 در چه وضعیتی است؟"}]
first = client.chat.completions.create(model="gpt-4o-mini", messages=messages, tools=tools, max_tokens=200)
call = first.choices[0].message.tool_calls[0]
# call.function.name == "get_order_status", call.function.arguments == '{"order_number": "NZ-10422"}'
result = {"status": "delivered", "delivered_at": "2026-08-29"} # خروجی تابع خودتان
messages += [
first.choices[0].message,
{"role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False)},
]
final = client.chat.completions.create(model="gpt-4o-mini", messages=messages, tools=tools, max_tokens=200)
print(final.choices[0].message.content)
خروجی JSON
response = client.chat.completions.create(
model="gpt-4o-mini",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "فقط یک شیء JSON معتبر برگردان."},
{"role": "user", "content": "برای محصول «کفش دویدن» سه ویژگی کوتاه با کلید features بنویسید."},
],
max_tokens=200,
)
data = json.loads(response.choices[0].message.content)
برای ساختار دقیقتر، response_format: {"type": "json_schema", "json_schema": {...}} را با مدلهای OpenAI به کار ببرید.
مدلهای استدلالی
response = client.chat.completions.create(
# Claude فقط از مسیر OpenRouter صدا زده میشود؛ اتصال مستقیم Anthropic باز نیست.
model="openrouter/anthropic/claude-sonnet-4.5",
# جایگزینها: o3، o4-mini، openrouter/google/gemini-2.5-pro،
# openrouter/deepseek/deepseek-r1، openrouter/x-ai/grok-4.6
reasoning_effort="medium", # low | medium | high
max_tokens=4000, # برای Claude باید بزرگتر از بودجهٔ thinking باشد
messages=[{"role": "user", "content": "سه عدد صحیح متوالی که مجموعشان ۹۹ است کداماند؟ گامبهگام حل کنید."}],
)
print(response.choices[0].message.content)
print(response.usage.completion_tokens_details) # reasoning_tokens
توکنهای استدلال در usage.completion_tokens_details.reasoning_tokens گزارش و با قیمت خروجی محاسبه میشوند. DeepSeek R1 زنجیرهٔ فکر را در فیلد reasoning_content پیام برمیگرداند.
Completions (قدیمی)
برای ابزارهای قدیمی که هنوز prompt میفرستند. متن به یک پیام کاربر تبدیل و پاسخ در قالب text_completion برگردانده میشود. استریم پشتیبانی میشود.
curl https://netarz.ir/api/ai/v1/completions \
-H "Authorization: Bearer $NETARZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-4o-mini", "prompt": "یک جملهٔ انگیزشی بنویسید.", "max_tokens": 60}'
نکات
- هدر
X-Request-Idو فیلدidپاسخ، شناسهٔ درخواست در نِت اَرز است؛ در گزارش خطا به پشتیبانی همین را بفرستید. - برای ارائهدهندههایی که prompt caching دارند (OpenAI، Anthropic، DeepSeek، Gemini)، پیامهای ثابت (system و اسناد) را ابتدای گفتوگو بگذارید تا
cached_tokensبالا برود و ارزانتر تمام شود. - حداکثر اندازهٔ بدنهٔ درخواست ۲۰ مگابایت است؛ برای تصاویر بزرگ بهجای base64 از URL استفاده کنید.