مستندات فنی
در چند دقیقه زوپیر را با SDK استاندارد OpenAI به برنامهی خود متصل کنید.
شروع سریع
زوپیر کاملاً از استاندارد Chat Completions در OpenAI پیروی میکند. کافی است baseURL را به https://api.zopyr.com/v1 تغییر دهید.
اندپوینتهای پیشرفته (Responses، Anthropic، Embeddings، Files و WebSocket)
گیتوی زوپیر علاوه بر /v1/chat/completions، به صورت بومی از استاندارد جدید OpenAI Responses API، پروتکل Anthropic Messages (سازگار با Claude Code)، ساخت بردارهای Embeddings، آپلود رمزنگاریشدهٔ فایلها و ارتباط بلادرنگ WebSocket پشتیبانی میکند.
Model Catalog
Browse all available models, context windows, and per-token pricing.
باز کردن پلیگراند
Test models side-by-side with live streaming and token telemetry.
شروع سریع
زوپیر کاملاً از استاندارد Chat Completions در OpenAI پیروی میکند. کافی است baseURL را به https://api.zopyr.com/v1 تغییر دهید.
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://api.zopyr.com/v1',
apiKey: process.env.ZOPYR_API_KEY,
});
const completion = await client.chat.completions.create({
model: 'openai/gpt-6.1-sol-pro',
messages: [
{ role: 'system', content: 'You are a concise engineering assistant.' },
{ role: 'user', content: 'Write a binary search in TypeScript.' },
],
});
console.log(completion.choices[0]?.message.content);احراز هویت و کلیدهای API
کلید خود را در هدر Authorization: Bearer zpr-v1-... ارسال کنید. تعیین سقف مصرف دلاری، محدودیت نرخ درخواست (RPM) و لیست IP مجاز در /app/keys
مدلها، مسیریابی و جایگزینی خودکار
شناسهی استاندارد هر مدل (مانند openai/gpt-4o یا anthropic/claude-3.7-sonnet) را ارسال کنید. در صورت بروز خطای 5xx یا محدودیت نرخ پیش از شروع استریم، درگاه به صورت خودکار به ارائهدهندهی سالم بعدی سوییچ میکند.
دریافت جریانی (Streaming SSE)
با ارسال stream: true پاسخ را به صورت رویدادهای SSE دریافت کنید. برای دریافت مصرف توکن و هزینهی دقیق دلاری در انتهای استریم، stream_options.include_usage = true را فعال کنید.
const stream = await client.chat.completions.create({
model: 'openai/gpt-4o',
stream: true,
stream_options: { include_usage: true },
messages: [{ role: 'user', content: 'Stream a haiku about distributed systems.' }],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
if (chunk.usage) {
console.log('\nTokens & exact USD cost:', chunk.usage);
}
}فراخوانی ابزار (Tool Calling)
مدلهای دارای قابلیت tools از ساختار استاندارد tools و tool_choice در OpenAI برای فراخوانی توابع پشتیبانی میکنند.
const response = await client.chat.completions.create({
model: 'openai/gpt-6.1-sol-pro',
messages: [{ role: 'user', content: 'What is the exchange rate for USD to EUR?' }],
tools: [
{
type: 'function',
function: {
name: 'get_fx_rate',
description: 'Get live market exchange rate for a currency pair',
parameters: {
type: 'object',
properties: {
base: { type: 'string', enum: ['USD'] },
quote: { type: 'string', enum: ['EUR', 'GBP', 'CHF'] },
},
required: ['base', 'quote'],
},
},
},
],
tool_choice: 'auto',
});خروجی ساختیافته و JSON Schema
برای دریافت خروجی منطبق بر اسکیما، پارامتر response_format را با نوع json_schema یا json_object ارسال کنید.
const response = await client.chat.completions.create({
model: 'google/gemini-2.5-pro',
messages: [{ role: 'user', content: 'Extract invoice fields from: Invoice #904 for $25.00' }],
response_format: {
type: 'json_schema',
json_schema: {
name: 'invoice',
strict: true,
schema: {
type: 'object',
properties: {
invoiceNumber: { type: 'string' },
amountUsd: { type: 'number' },
},
required: ['invoiceNumber', 'amountUsd'],
additionalProperties: false,
},
},
},
});مدلهای استدلالگر (Reasoning)
در مدلهای استدلالگر (مانند deepseek/deepseek-r1 یا claude-3.7-sonnet) میتوانید عمق تفکر را با reasoning_effort ('low' | 'medium' | 'high') تنظیم کنید.
const response = await client.chat.completions.create({
model: 'deepseek/deepseek-r1',
reasoning_effort: 'high',
messages: [{ role: 'user', content: 'Prove that the square root of 2 is irrational.' }],
});محدودیت نرخ و هدرها
تمامی پاسخها شامل هدرهای x-ratelimit-limit، x-ratelimit-remaining و x-ratelimit-reset هستند و در صورت عبور از سقف، کد 429 به همراه هدر Retry-After بازگردانده میشود.
اعتبار، رزرو اتمی (Hold) و لجر
پیش از ارسال درخواست به منبع، حداکثر هزینهی احتمالی به صورت اتمی رزرو شده و پس از پایان پاسخ، هزینهی دقیق نانودلار تسویه میشود. موجودی و هزینهی هر درخواست از طریق API قابل استعلام است.
# Check API key limits & remaining budget
curl https://api.zopyr.com/v1/key \
-H "Authorization: Bearer $ZOPYR_API_KEY"
# Check wallet balance & total usage
curl https://api.zopyr.com/v1/credits \
-H "Authorization: Bearer $ZOPYR_API_KEY"
# Inspect exact token count, latency & settled cost for a generation
curl "https://api.zopyr.com/v1/generation?id=gen-0192a3b4..." \
-H "Authorization: Bearer $ZOPYR_API_KEY"حریم خصوصی و عدم ذخیرهسازی
به صورت پیشفرض، متن پرامپت و پاسخ هرگز ذخیره نمیشود و تنها متادیتای مصرف ثبت میگردد. لاگ محتوا صرفاً در صورت فعالسازی صریح روی کلید با رمزنگاری AES-256-GCM ذخیره میشود.
اندپوینتهای پیشرفته (Responses، Anthropic، Embeddings، Files و WebSocket)
گیتوی زوپیر علاوه بر /v1/chat/completions، به صورت بومی از استاندارد جدید OpenAI Responses API، پروتکل Anthropic Messages (سازگار با Claude Code)، ساخت بردارهای Embeddings، آپلود رمزنگاریشدهٔ فایلها و ارتباط بلادرنگ WebSocket پشتیبانی میکند.
const res = await fetch('https://api.zopyr.com/v1/responses', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.ZOPYR_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'openai/gpt-6.1-sol-pro',
instructions: 'Return concise engineering guidance.',
input: 'Explain distributed circuit breaking in 3 bullets.',
max_output_tokens: 512,
}),
});
const data = await res.json();
console.log(data.output_text, data.usage);کاتالوگ کدهای خطا
کدهای خطای استاندارد و پایدار در API پلتفرم و درگاه استنتاج.
| کد خطا | وضعیت HTTP | توضیحات |
|---|---|---|
| AUTH_UNAUTHENTICATED | 401 | برای انجام این کار باید وارد حساب خود شوید. |
| AUTH_FORBIDDEN | 403 | اجازهی انجام این کار را ندارید. |
| AUTH_2FA_REQUIRED | 403 | برای این حساب، ورود دومرحلهای الزامی است. |
| AUTH_STEP_UP_REQUIRED | 403 | برای ادامهی این عملیات، کد ورود دومرحلهای را تأیید کنید. |
| AUTH_IP_NOT_ALLOWED | 403 | دسترسی از آدرس IP شما مجاز نیست. |
| AUTH_OTP_RATE_LIMITED | 429 | درخواست کد بیش از حد مجاز است. {retryAfter} ثانیهی دیگر دوباره تلاش کنید. |
| AUTH_PASSWORD_BREACHED | 400 | این گذرواژه در نشتهای اطلاعاتی شناختهشده دیده شده است. گذرواژهی دیگری انتخاب کنید. |
| AUTH_CODE_INVALID | 401 | کد تأیید نامعتبر یا منقضی شده است. |
| ACCOUNT_BANNED | 403 | این حساب مسدود شده است. |
| KEY_INVALID | 401 | کلید API نامعتبر است. |
| KEY_REVOKED | 401 | این کلید API باطل شده است. |
| KEY_EXPIRED | 401 | این کلید API منقضی شده است. |
| KEY_IP_NOT_ALLOWED | 403 | این کلید API از آدرس IP شما قابل استفاده نیست. |
| KEY_MODEL_NOT_ALLOWED | 403 | این کلید API اجازهی استفاده از مدل {model} را ندارد. |
| KEY_CREDIT_LIMIT_REACHED | 402 | این کلید API به سقف هزینهی خود رسیده است. |
| BILLING_INSUFFICIENT_CREDITS | 402 | اعتبار کافی نیست. برای ادامه، حساب خود را شارژ کنید. |
| BILLING_HOLD_EXCEEDED | 402 | پاسخ متوقف شد، چون از اعتبار در دسترس شما بیشتر شد. |
| RATE_LIMIT_EXCEEDED | 429 | از سقف تعداد درخواست عبور کردید. {retryAfter} ثانیهی دیگر دوباره تلاش کنید. |
| CONCURRENCY_LIMIT_EXCEEDED | 429 | تعداد درخواستهای همزمان بیش از حد است. کمی بعد دوباره تلاش کنید. |
| VALIDATION_FAILED | 400 | برخی از فیلدها نامعتبر هستند. |
| IDEMPOTENCY_KEY_REUSED | 422 | این Idempotency-Key قبلاً برای درخواست دیگری استفاده شده است. |
| RESOURCE_NOT_FOUND | 404 | مورد درخواستی پیدا نشد. |
| RESOURCE_CONFLICT | 409 | این مورد از قبل وجود دارد یا با مورد دیگری تداخل دارد. |
| GATEWAY_MODEL_NOT_FOUND | 404 | مدل {model} وجود ندارد. |
| GATEWAY_MODEL_UNAVAILABLE | 503 | مدل {model} موقتاً در دسترس نیست. |
| GATEWAY_CONTEXT_TOO_LONG | 400 | طول درخواست از پنجرهی متنی مدل بیشتر است. |
| GATEWAY_PARAM_UNSUPPORTED | 400 | پارامتر {param} برای این درخواست پشتیبانی نمیشود. |
| GATEWAY_NO_ENDPOINT_MATCH | 400 | هیچ ارائهدهندهای برای این مدل همهی قابلیتهای درخواستی را پشتیبانی نمیکند. |
| GATEWAY_UPSTREAM_ERROR | 502 | ارائهدهندهی مدل خطا برگرداند. |
| GATEWAY_UPSTREAM_TIMEOUT | 504 | ارائهدهندهی مدل بهموقع پاسخ نداد. |
| GATEWAY_UPSTREAM_RATE_LIMITED | 429 | ارائهدهندهی مدل درخواستها را محدود کرده است. کمی بعد دوباره تلاش کنید. |
| GATEWAY_CONTENT_FILTERED | 400 | درخواست توسط فیلتر محتوای ارائهدهنده مسدود شد. |
| GATEWAY_ALL_PROVIDERS_FAILED | 502 | همهی ارائهدهندههای این مدل با خطا مواجه شدند. کمی بعد دوباره تلاش کنید. |
| GATEWAY_ENDPOINT_NOT_IMPLEMENTED | 501 | این نقطهی پایانی هنوز در دسترس نیست. از /v1/chat/completions استفاده کنید. |
| PAYMENT_GATEWAY_UNAVAILABLE | 503 | این روش پرداخت موقتاً در دسترس نیست. |
| PAYMENT_AMOUNT_OUT_OF_RANGE | 400 | مبلغ باید بین {min} و {max} باشد. |
| PAYMENT_VERIFICATION_FAILED | 400 | تأیید این پرداخت ممکن نشد. |
| PAYMENT_ALREADY_PROCESSED | 409 | این پرداخت قبلاً پردازش شده است. |
| PAYMENT_EXPIRED | 410 | این پرداخت منقضی شده است. پرداخت جدیدی شروع کنید. |
| PAYMENT_PHONE_REQUIRED | 400 | برای استفاده از این روش پرداخت، یک شماره موبایل ایرانی تأییدشده لازم است. |
| FX_RATE_UNAVAILABLE | 503 | نرخ تبدیل ارز موقتاً در دسترس نیست. بعداً دوباره تلاش کنید. |
| ORG_PERMISSION_DENIED | 403 | نقش شما در این سازمان اجازهی این کار را نمیدهد. |
| ORG_MEMBER_SPEND_LIMIT_REACHED | 402 | به سقف هزینهی ماهانهی خود در این سازمان رسیدهاید. |
| ORG_LIMIT_REACHED | 409 | به حداکثر تعداد سازمانهای مجاز رسیدهاید. |
| ORG_MEMBERS_LIMIT_REACHED | 409 | این سازمان به سقف تعداد اعضا رسیده است. |
| ORG_OWNER_CANNOT_LEAVE | 409 | پیش از خروج از سازمان، مالکیت را به عضو دیگری منتقل کنید. |
| ORG_INVITATION_INVALID | 410 | این دعوتنامه نامعتبر یا منقضی است. |
| INTERNAL_ERROR | 500 | مشکلی در سمت ما پیش آمد. لطفاً دوباره تلاش کنید. |
| SERVICE_UNAVAILABLE | 503 | سرویس موقتاً در دسترس نیست. لطفاً کمی بعد دوباره تلاش کنید. |