مدل و صدا را انتخاب کن — کد آماده را بگیر. پاسخ، خودِ فایل MP3 است.
مدل و صدا را انتخاب کن؛ کد زیر همان لحظه عوض میشود.
sample.mp3 را پخش کن. تمام — این کل API است.# omnivoice: CC-BY-NC — personal / non-commercial ONLY
# instruct whitelist: female / male / whisper / elderly / child / ...
curl -X POST https://farsihoosh.ir/api/tts \
-H "Authorization: Bearer fh_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"سلام این یک آزمایش است","model":"omnivoice","instruct":"female"}' \
--output sample.mp3"instruct":"female" یا "male"؛ پیشفرض زن"male" — سرویس آن را نادیده میگیرد و همیشه همان صدای پیشفرض (زن) را میسازد. خطا نمیدهیم؛ صدا عوض نمیشود."instruct":"female" یا "male"؛ پیشفرض زن.instruct برای pocket نه خطا میدهد نه صدا را عوض میکند — همیشه زن است. برای صدای مرد از omnivoice استفاده کنید (فقط غیرتجاری).| فیلد | الزام | توضیح |
|---|---|---|
text | الزامی | متن فارسی، ۱۰ تا ۱۵۰۰ کاراکتر |
model | اختیاری | omnivoice (پیشفرض) یا pocket یا pocket-v2 |
instruct | اختیاری | برای omnivoice و pocket-v2 — توصیف صدا از لیست مجاز. برای pocket نادیده گرفته میشود (همیشه زن). (برای pocket-v2 فقط female یا male). |
seed | اختیاری | فقط omnivoice — اگر نفرستید مثل سایت میشود (زن 777 / مرد 8888)؛ برای pocket و pocket-v2 نادیده گرفته میشود |
| چی | چقدر |
|---|---|
| کاراکتر روزانهٔ هر کلید | ۲۰۰٬۰۰۰ — ریست با UTC، بعدش 429 + Retry-After |
| سرعت هر کلید و هر IP | ۱۰ درخواست در دقیقه |
| طول متن | ۱۰ تا ۱۵۰۰ کاراکتر |
auth_requiredBearer + کلید را بفرستbad_auth_schemeBearer نداردAuthorization: Bearer fh_live_… (کلمهٔ Bearer + فاصله)bad_keyrevoked_keykey_owner_mismatchBearer) این خطا را نمیگیرند.invalid_bodyContent-Type: application/json + آبجکت JSONtext is required…text را بفرستlimit is 1500unsupported modelomnivoice یا pocket یا pocket-v2X-RateLimit-Scope: key_burstRetry-After: 60 ثانیهX-RateLimit-Scope: key_dailyRetry-After میگوید چند ثانیهX-RateLimit-Scope: burst|dailyX-RateLimit-Scope: almas_emptyX-Almas-Left موجودی فعلی (کف صفر)؛ X-Almas-Needed مبلغ لازم برای همین درخواست؛ و در حالت «کمتر از حداقل OCR» X-Almas-Min = همان حداقل (۱۰٬۰۰۰)؛ بدون Retry-After (انتظار کیف پول را شارژ نمیکند)/upgrade#شارژ-حساب (۱۰۰٬۰۰۰ تومان → ۱۰۰٬۰۰۰ الماس · ۱٬۰۰۰٬۰۰۰ تومان → ۱٬۰۰۰٬۰۰۰ الماس)؛ مدلهای رایگان همچنان سرو میشوندworker unreachableRetry-After: 5)X-RateLimit-Scope: caller_busyRetry-After: 3) — این خطا یعنی صف شلوغ نیست، فقط درخواستهای همزمانِ تو زیاد بوده