مستندات API
هر کاری که در داشبورد میکنید، از طریق /v1 برای برنامهٔ شما هم در دسترس است. پایهٔ آدرس: https://aiio.ir/api
۱. کلید بگیرید
از داشبورد ← کلیدهای API یک کلید بسازید. کلید فقط یکبار نمایش داده میشود. آن را در هر درخواست بفرستید:
Authorization: Bearer aiio_YOUR_KEY
# یا
X-API-Key: aiio_YOUR_KEYنقاط پایانی
/v1/me/v1/quote/v1/generate/v1/jobs/{id}/v1/jobs/v1/usage/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