مستندات API

هر کاری که در داشبورد می‌کنید، از طریق /v1 برای برنامهٔ شما هم در دسترس است. پایهٔ آدرس: https://aiio.ir/api

۱. کلید بگیرید

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

Authorization: Bearer aiio_YOUR_KEY
# یا
X-API-Key: aiio_YOUR_KEY

نقاط پایانی

GET/v1/me
POST/v1/quote
POST/v1/generate
GET/v1/jobs/{id}
GET/v1/jobs
GET/v1/usage
POST/v1/uploads

۲. اولین ساخت

قیمت را ببینید، بعد بسازید:

# قیمت (بدون کسر کردیت)
curl -X POST https://aiio.ir/api/v1/quote \
  -H "Authorization: Bearer aiio_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"text","characters":2000}'

# ساخت
curl -X POST https://aiio.ir/api/v1/generate \
  -H "Authorization: Bearer aiio_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"text","prompt":"یک توضیح محصول برای قهوهٔ ترک بنویس"}'

پاسخ یک job_id و آدرس /v1/jobs/{id} می‌دهد. آن را بخوانید تا وضعیت DONE شود و خروجی آماده باشد.

هر کار می‌گوید با چه مدلی ساخته شده

پاسخِ /v1/jobs/{id} فیلدِ served_models را دارد: نامِ مدلی که واقعاً هر مرحله را انجام داده، نه آنچه تنظیم شده بود. اگر موتورِ اصلیِ آن سطح در دسترس نباشد و کار با موتورِ جایگزین انجام شود، substituted را true می‌کنیم و در پنل هم می‌گوییم. سطحِ «حرفه‌ای» جایگزین نمی‌پذیرد: اگر موتورش نباشد کار صادقانه شکست می‌خورد و کردیت برمی‌گردد.

{
  "job_id": "...",
  "quality": "pro",
  "status": "DONE",
  "credits_charged": 12,
  "served_models": { "text": "claude-sonnet-5" },
  "substituted": false
}

۳. زیرنویس و دوبلهٔ فایلِ خودتان

ورودیِ این دو کار فایل است، نه جمله: اول فایل را با POST /v1/uploads بفرستید (بدنه = خودِ بایت‌ها، نام در ?name=)، بعد uploadId و name برگشتی را به /v1/generate بدهید. کلید باید دسترسیِ transcribe یا dub داشته باشد. مدتِ فایل را ما اندازه می‌گیریم و قیمت بر همان است.

# 1. فرستادنِ فایل
curl -X POST "https://aiio.ir/api/v1/uploads?name=film.mp4" \
  -H "Authorization: Bearer aiio_YOUR_KEY" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @film.mp4
# → {"ok":true,"uploadId":"9f2c…","name":"film.mp4","bytes":48210331,"seconds":612.4}

# 2. زیرنویس (language = زبانِ گفتارِ فایل، یا auto)
curl -X POST https://aiio.ir/api/v1/generate \
  -H "Authorization: Bearer aiio_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"transcribe","options":{"uploadId":"9f2c…","uploadName":"film.mp4","language":"en"}}'

# یا دوبله (language = مقصد، sourceLanguage = زبانِ گفتار)
curl -X POST https://aiio.ir/api/v1/generate \
  -H "Authorization: Bearer aiio_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"dub","options":{"uploadId":"9f2c…","uploadName":"film.mp4","language":"fa","sourceLanguage":"en"}}'

# 3. وقتی status = DONE شد، files[].url را با https://aiio.ir جلویش دانلود کنید
curl https://aiio.ir/api/v1/jobs/JOB_ID -H "Authorization: Bearer aiio_YOUR_KEY"

هر فایل برای یک کار است و بعد از تحویل پاک می‌شود. زیرنویس: subtitle.srt، subtitle.vtt، transcript.txt · دوبله: dubbed.mp4 (یا m4a)، dubbed.srt، dubbed.vtt.

نمونه‌کد

Node.js

const AIIO = process.env.AIIO_KEY;
async function call(path, body) {
  const res = await fetch("https://aiio.ir/api/v1" + path, {
    method: body ? "POST" : "GET",
    headers: { Authorization: `Bearer ${AIIO}`, "Content-Type": "application/json" },
    body: body ? JSON.stringify(body) : undefined,
  });
  return res.json();
}
const job = await call("/generate", { type: "image", prompt: "فنجان قهوه روی میز چوبی" });
console.log(job.job_id);

Python

import os, requests
AIIO = os.environ["AIIO_KEY"]
H = {"Authorization": f"Bearer {AIIO}"}
job = requests.post("https://aiio.ir/api/v1/generate",
    headers=H, json={"type": "voice", "prompt": "متن برای گویندگی"}).json()
print(job["job_id"])

PHP

function aiio($path, $body = null) {
    $ch = curl_init("https://aiio.ir/api/v1$path");
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'Authorization: Bearer ' . AIIO_KEY,
            'Content-Type: application/json',
        ],
    ]);
    if ($body !== null) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body, JSON_UNESCAPED_UNICODE));
    }
    $out = curl_exec($ch);
    curl_close($ch);
    return json_decode($out, true);
}

اطلاع‌رسانی خودکار

یک webhook_url در بدنهٔ /generate بفرستید تا وقتی کار تمام شد، خبرش را برایتان POST کنیم:

{"type":"text","prompt":"…","webhook_url":"https://your-site.com/aiio/callback"}

آدرس‌های داخلی و شبکه‌های خصوصی رد می‌شوند؛ webhook باید یک دامنهٔ عمومی معتبر باشد.

آماده‌اید شروع کنید؟

ساخت کلید API