رفتن به محتوای اصلی

مستندات توسعه‌دهندگان

راهنمای یکپارچه‌سازی با API. فهرست کامل نقاط پایانی در مرجع API آمده است.

شروع سریع

در کنسول توسعه‌دهندگان یک پروژه و کلید API بسازید. کلید فقط یک بار نمایش داده می‌شود؛ آن را به‌صورت محرمانه روی سرور نگه دارید و هرگز در مرورگر یا برنامه موبایل قرار ندهید.

فهرست مدل‌های در دسترس کلید را بگیرید و نخستین درخواست را بفرستید.

bash
export API_KEY=sk_live_...
curl https://gapze.ir/v1/models -H "Authorization: Bearer $API_KEY"

curl https://gapze.ir/v1/responses \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"MODEL_SLUG","input":"Write a haiku about Tehran"}'

احراز هویت

کلید را در سرآیند Authorization به‌صورت Bearer (یا در X-API-Key) بفرستید. درخواست بدون کلید معتبر پاسخ ۴۰۱ و کلید فاقد دامنه دسترسی لازم پاسخ ۴۰۳ می‌گیرد.

http
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxx
# or
X-API-Key: sk_live_xxxxxxxxxxxxxxxxxxxx

پاسخ جریانی

با "stream": true رویدادهای سمت سرور (SSE) دریافت می‌کنید. هر رویداد بخشی از پاسخ است و جریان با [DONE] پایان می‌یابد. تولیدهایی که با ‎/v1/generations آغاز شوند با Last-Event-ID قابل ادامه‌اند.

bash
curl -N https://gapze.ir/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"MODEL_SLUG","stream":true,"messages":[{"role":"user","content":"Hi"}]}'

# data: {"choices":[{"delta":{"content":"Hel"}}]}
# ...
# data: [DONE]

خطاها

خطاها یک قالب JSON واحد دارند: کد پایدار ماشین‌خوان، پیام قابل‌فهم، نوع خطا، اینکه تلاش دوباره کمک می‌کند یا نه و شناسه درخواست. هنگام تماس با پشتیبانی شناسه درخواست را ذکر کنید.

۴۰۲ یعنی موجودی یا بودجه کافی نیست؛ ۴۰۹ تعارض وضعیت؛ ۴۲۲ ورودی نامعتبر؛ ۴۲۹ محدودیت نرخ؛ ۵xx خطای موقت.

json
{
  "error": {
    "code": "insufficient_budget",
    "message": "your balance is not enough for this request",
    "type": "billing_error",
    "retryable": false,
    "request_id": "req_01..."
  }
}

محدودیت نرخ

محدودیت‌ها برای هر کلید و هر پروژه اعمال می‌شوند. پاسخ ۴۲۹ سرآیند Retry-After بر حسب ثانیه دارد؛ دست‌کم همین مدت صبر کنید و ترجیحاً با تأخیر نمایی و تصادفی تلاش کنید.

http
HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 6000

کلید یکتایی (Idempotency)

برای درخواست‌هایی که چیزی می‌سازند یا هزینه دارند سرآیند Idempotency-Key یکتا بفرستید. تکرار با همان کلید نتیجه اصلی را برمی‌گرداند و هرگز دو بار هزینه کسر نمی‌شود.

bash
curl https://gapze.ir/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Idempotency-Key: 3f1c2a6e-8b9d-4c1f-9e2a-7d5b6c4a3f21" ...

موجودی، پیش‌فاکتور و مصرف

مصرف از کیف پول مالک کلید کسر می‌شود. پیش از کارهای پرهزینه پیش‌فاکتور قطعی بگیرید و هر زمان موجودی و مصرف خود را بخوانید.

bash
curl https://gapze.ir/v1/balance -H "Authorization: Bearer $API_KEY"
curl "https://gapze.ir/v1/usage?from=2026-10-01" -H "Authorization: Bearer $API_KEY"
curl https://gapze.ir/v1/generations/quotes -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" -d '{"model":"MODEL_SLUG","messages":[...]}'

فایل‌ها

فایل‌ها را برای استفاده به‌عنوان ورودی بارگذاری کنید. فایل‌های کوچک با یک درخواست multipart و فایل‌های بزرگ با بارگذاری چندبخشی قابل‌ادامه.

bash
curl https://gapze.ir/v1/files -H "Authorization: Bearer $API_KEY" \
  -F purpose=assistants -F file=@report.pdf
# large files: POST /v1/files/uploads → PUT /v1/files/uploads/{id}/parts/{n} → POST .../complete

کارهای طولانی

ویدئو و دیگر کارهای طولانی بلافاصله شناسه کار برمی‌گردانند. وضعیت کار را بپرسید یا مشترک وب‌هوک job.completed شوید و سپس نتیجه را دریافت کنید.

bash
curl https://gapze.ir/v1/videos/generations -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" -d '{"model":"VIDEO_MODEL","prompt":"..."}'
# → {"id":"job_...","status":"queued"}
curl https://gapze.ir/v1/jobs/job_... -H "Authorization: Bearer $API_KEY"
curl -L https://gapze.ir/v1/jobs/job_.../content -H "Authorization: Bearer $API_KEY" -o out.mp4

وب‌هوک‌ها

هر ارسال سرآیندهای webhook-id، webhook-timestamp و webhook-signature دارد. امضای HMAC-SHA256 را روی «id.timestamp.body» با کلید امضای خود بررسی کنید، زمان‌های قدیمی را رد کنید و بر اساس id تکراری‌ها را حذف کنید. هنگام چرخش کلید هر دو امضای قدیم و جدید ارسال می‌شوند.

python
import base64, hashlib, hmac, time

def verify(secret: str, headers: dict, body: bytes, tolerance=300) -> bool:
    msg_id, ts = headers["webhook-id"], headers["webhook-timestamp"]
    if abs(time.time() - int(ts)) > tolerance:
        return False
    key = base64.b64decode(secret.removeprefix("whsec_"))
    mac = hmac.new(key, f"{msg_id}.{ts}.".encode() + body, hashlib.sha256).digest()
    expected = "v1," + base64.b64encode(mac).decode()
    return any(hmac.compare_digest(expected, s) for s in headers["webhook-signature"].split())

حالت آزمایشی

کلیدهای آزمایشی فقط به شبیه‌ساز داخلی دسترسی دارند و اعتبار آزمایشی مصرف می‌کنند. هر وقت آماده بودید از کلید اصلی استفاده کنید.

bash
# test keys (sk_test_...) use the built-in simulator and test credits only
curl https://gapze.ir/v1/chat/completions -H "Authorization: Bearer sk_test_..." ...