مستندات
TTS.ai را با REST API خود در برنامههای خود ادغام کنید.
نمای کلی
TTS.ai API دسترسی برنامهریزی شده به تمام ویژگیهای پلتفرم را فراهم میکند: ترکیب متن به گفتار، رونویسی گفتار به متن، شبیهسازی صدا، بهبود صدا و غیره.
کلید API
کلید API خود را از اینجا بگیرید تنظیمات حساب. در برنامههای Pro و Enterprise در دسترس است.
نشانی وب پایه
https://api.tts.ai/v1/
احراز هویت
نشان حامل از طریق Authorization سرآیند
احراز هویت
/v1/tts/ بدون هیچگونه تایید، تا ۵۰۰۰ کاراکتر در روز بر اساس آدرس IP، با استفاده از هر یک از مدلهای رایگان ما (piper, vits, melotts, kokoro). برای ثبت نام در حساب رایگان ۱۵۰۰۰ کاراکتر به صورت رایگان و دسترسی به مدلهای پریمیوم.
برای مدلهای پرمیوم و محدودیتهای نرخ بالاتر، با یک نشانه حامل در Authorization سرآیند.
Authorization: Bearer sk-tts-your-api-key-here
SDKها
Official SDKs make it easy to integrate TTS.ai into your application. Both are open source and available on GitHub.
Python
pip install ttsai
from tts_ai import TTSClient
client = TTSClient(api_key="sk-tts-...")
audio = client.generate(
text="Hello world!",
model="kokoro"
)
client.save(audio, "output.wav")
JavaScript / Node.js
npm install @ttsainpm/ttsai
const { TTSClient } = require('@ttsainpm/ttsai');
const client = new TTSClient({
apiKey: 'sk-tts-...'
});
const audio = await client.generate({
input: 'Hello world!',
model: 'kokoro'
});
await client.saveToFile(audio, 'output.wav');
نشانی وب پایه
تمام نقاط پایانی نسبت به این نشانی وب پایه هستند. برای مثال ، نقطه پایانی TTS این است:
محدودیتهای نرخ
محدودیتهای نرخ API بر اساس برنامه متفاوت است:
| نقشه | درخواستها/دقیقه | همزمان | طول متن بیشینه |
|---|---|---|---|
| آزاد | 10 | 2 | 500 کاراکتر |
| آغازگر | 30 | 3 | یک میلیون حرف |
| حرفه اي | 60 | 5 | یک میلیون حرف |
| انترپرایز | 300 | 20 | 50,000 حرف |
سرآیندهای محدودیت نرخ در هر پاسخ شامل میشوند: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
هزینههای اعتبار
| خدمات | هزینه | واحد |
|---|---|---|
| TTS (مدلهای آزاد: Piper, VITS, MeloTTS) | هزار نویسه | هر ۱۰۰۰ کاراکتر |
| TTS (مدلهای استاندارد: Kokoro, CosyVoice 2, etc.) | 2000 کاراکتر | هر ۱۰۰۰ کاراکتر |
| TTS (مدلهای پریمیوم: Tortoise، Chatterbox، و غیره) | 4000 کاراکتر | هر ۱۰۰۰ کاراکتر |
| تبدیل گفتار به متنComment | 2000 کاراکتر | در دقیقه |
| شبیهسازی صدا | 4000 کاراکتر | هر ۱۰۰۰ کاراکتر |
| تغییردهندۀ صداName | 3000 کاراکتر | در دقیقه |
| بهبود صوتی | 2000 کاراکتر | در دقیقه |
| حذف صدا / تقسیم صدا | 3000-4000 کاراکتر | در دقیقه |
| ترجمۀ گفتارName | 5000 کاراکتر | در دقیقه |
| گپ صوتی | 3000 کاراکتر | در هر نوبت |
| یابنده کلید & BPM | آزاد | -- |
| مبدل صوتیName | آزاد | -- |
متن به گفتارName
تبدیل متن به صدای گفتار. پروندۀ صوتی را در قالب خواسته شده برمیگرداند.
بدنه درخواست
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| model | string | نه | شناسه مدل (مثلاً kokoro، chatterbox، piper). اگر حذف شود، ما به صورت خودکار یک مدل را انتخاب میکنیم که از language درخواست شده پشتیبانی میکند — kokoro برای en/ja/zh/ko/fr/de/it/pt/es/hi/ru، piper برای دیگر زبانهای پشتیبانی شده (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/etc.). |
| text | string | آره | متن برای تبدیل به گفتار. حد هر درخواست: ۵۰۰ کاراکتر (ناشناس)، ۵۰۰۰ (حساب رایگان)، ۱٫۰۰۰٫۰۰۰ (برنامه پرداختی). ورودیهای طولانی در سمت کارساز به صورت خودکار قطع میشوند. |
| voice | string | آره | شناسۀ صدا (برای فهرست کردن صداهای موجود از /v1/voices/ استفاده کنید) |
| format | string | نه | قالب خروجی: mp3 (به صورت پیشفرض)، wav، flac، ogg |
| speed | float | نه | ضربکننده سرعت گفتار. پیشفرض: ۱٫۰. محدوده: ۰٫۵ تا ۲٫۰ |
| language | string | نه | کد زبان (برای مثال، en, es). اگر حذف شود، به صورت خودکار شناسایی میشود. |
| instructions | string | نه | رمزهای عمل/توزیع (≤۵۰۰ کاراکتر). e.g. \ |
| pronunciations | object | array | نه | فراخوانی تلفظ بر اساس درخواست. یا {\ |
| stream | boolean | نه | فعال کردن پاسخ جریان. پیشفرض: false |
درخواست مثال
curl -X POST https://api.tts.ai/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "kokoro",
"text": "Hello from TTS.ai! This is a test.",
"voice": "af_bella",
"format": "mp3"
}' \
--output output.mp3
برچسبهای SSML
نوار اعداد، تاریخها، واحد پول، شمارههای تلفن و مخففها در قالب تاریخ پیشفرض به The TTS endpoint queues your request and returns a JSON response with a job UUID. You then poll for the result. Poll this endpoint every 1-2 seconds until Fetch the Streaming alternative: For supported models (Kokoro, MeloTTS), use
تفسیر کردن ورودی به عنوان cardinal1234one thousand two hundred thirty-four ordinal21twenty-first date1999-12-3131 دسامبر 1999 time14:30two thirty PM telephone+1-555-867-5309plus one five five five eight six seven… currency$1,234.56one thousand two hundred thirty-four dollars and fifty-six cents spell-outNASAN A S A mdy برای انگلیسی و dmy در جاهای دیگر است؛ با format=\ جایگزین کنید.{
"model": "kokoro",
"voice": "af_bella",
"text": "Your appointment is on <say-as interpret-as=\"date\">2026-04-26</say-as> at <say-as interpret-as=\"time\">14:30</say-as>. Please call <say-as interpret-as=\"telephone\">+1-555-867-5309</say-as> if you need to reschedule."
}پاسخ
Step 1: Submit request
{
"uuid": "77b71db532874ce98e84a69a2d740d4c",
"job_id": "f21316bb-aefa-480d-8523-701d1e3184ce",
"status": "queued",
"credits_used": 11,
"credits_remaining": 15000
}Step 2: Poll for result
status is completed or failed.{
"status": "completed",
"result_url": "https://api.tts.ai/static/downloads/77b71db5.../output.mp3"
}{
"status": "processing"
}Step 3: Download audio
result_url from the completed response to download the audio file.مثال کامل
import requests, time
API_KEY = "sk-tts-your-key"
BASE = "https://api.tts.ai"
# 1. Submit TTS request
resp = requests.post(f"{BASE}/v1/tts/", json={
"model": "kokoro",
"text": "Hello from TTS.ai!",
"voice": "af_bella"
}, headers={"Authorization": f"Bearer {API_KEY}"})
data = resp.json()
uuid = data["uuid"]
# 2. Poll for result
while True:
result = requests.get(f"{BASE}/v1/speech/results/",
params={"uuid": uuid}).json()
if result["status"] == "completed":
# 3. Download audio
audio = requests.get(result["result_url"])
with open("output.mp3", "wb") as f:
f.write(audio.content)
break
elif result["status"] == "failed":
raise Exception(result.get("error", "Generation failed"))
time.sleep(1.5)POST /v1/tts/stream/ for real-time Server-Sent Events (SSE) streaming — no polling needed.
تبدیل گفتار به متنComment
رونوشت صدا به متن. از ۹۹ زبان با تشخیص خودکار پشتیبانی میکند.
بدنه درخواست (multipart/form-data)
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| file | file | آره | پروندۀ صوتی (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). حداکثر ۱۰۰ مگابایت. |
| model | string | نه | مدل STT: whisper (به صورت پیشفرض)، faster-whisper، sensevoice |
| language | string | نه | کد زبان. auto برای تشخیص خودکار (به صورت پیشفرض). |
| timestamps | boolean | نه | شامل مهرهای زمانی سطح کلمه. پیشفرض: false |
| diarize | boolean | نه | فعالسازی فهرستنویسی بلندگوها. پیشفرض: false |
پاسخ
{
"text": "Hello, this is a transcription test.",
"language": "en",
"duration": 3.5,
"segments": [
{
"start": 0.0,
"end": 1.8,
"text": "Hello, this is",
"speaker": "SPEAKER_00"
},
{
"start": 1.8,
"end": 3.5,
"text": "a transcription test.",
"speaker": "SPEAKER_00"
}
]
}
شبیهسازی صدا
تولید گفتار در یک صدای شبیه سازی شده. بارگذاری یک متن و صدای مرجع.
بدنه درخواست (multipart/form-data)
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| reference_audio | file | آره | صدای مرجع صوتی (۱۰-۳۰ ثانیه توصیه میشود). حداکثر ۲۰ مگابایت. |
| text | string | آره | متنی که با صدای شبیه سازی شده صحبت خواهد شد. |
| model | string | نه | مدل شبیه سازی: chatterbox (به صورت پیشفرض)، cosyvoice2، gpt-sovits |
| format | string | نه | قالب خروجی: mp3 (به صورت پیشفرض)، wav، flac |
| language | string | نه | کد زبان هدف. باید توسط مدل انتخابشده پشتیبانی شود. |
پاسخ
پروندۀ صوتی را به صورت دادههای باینری برمیگرداند، همانند نقطه پایانی TTS.
تغییردهندۀ صداName
تبدیل صدا به صدای دیگری. صدای منبع را بارگذاری کنید و صدای هدف را انتخاب کنید.
بدنه درخواست (multipart/form-data)
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| file | file | آره | پروندۀ صدای منبع) MP3, WAV, FLAC (. حداکثر ۵۰ مگابایت. |
| target_voice | string | آره | شناسهی صدای هدف برای تبدیل به (برای فهرست کردن صداهای موجود از /v1/voices/ استفاده کنید) |
| model | string | نه | مدل تبدیل صدا: openvoice (به صورت پیشفرض)، knn-vc |
| format | string | نه | قالب خروجی: wav (به صورت پیشفرض)، mp3، flac |
درخواست مثال
curl -X POST https://api.tts.ai/v1/voice-convert/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@source_audio.mp3" \
-F "target_voice=af_bella" \
-F "model=openvoice" \
-o converted.wav
پاسخ
پروندۀ صوتی تبدیلشده را به عنوان دادههای باینری برمیگرداند.
ترجمۀ گفتارName
ترجمه صدای گفتاری از یک زبان به زبان دیگر. ترکیب گفتار به متن، ترجمه و متن به گفتار در یک تماس.
بدنه درخواست (multipart/form-data)
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| file | file | آره | پروندۀ صدای منبع به زبان اصلی. حداکثر ۱۰۰ مگابایت. |
| target_language | string | آره | کد زبان هدف (مثلاً es, fr, de, ja) |
| voice | string | نه | صدا برای خروجی ترجمه شده. اگر حذف شود ، خودکار انتخاب میشود. |
| preserve_voice | boolean | نه | تلاش برای حفظ ویژگیهای صدای گوینده اصلی. پیشفرض: false |
پاسخ
{
"original_text": "Hello, how are you?",
"translated_text": "Hola, como estas?",
"source_language": "en",
"target_language": "es",
"audio_url": "https://api.tts.ai/v1/results/translate_abc123.mp3",
"credits_used": 5
}
گفتار به سخن
تغییر سبک سخنرانی ، احساس یا ارائه با حفظ محتوا. برای تنظیم صدا ، سرعت و بیان مفید است.
بدنه درخواست (multipart/form-data)
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| file | file | آره | پروندۀ صدای گفتار منبع. حداکثر ۵۰ مگابایت. |
| voice | string | آره | شناسۀ هدف صدا برای گفتار خروجی |
| model | string | نه | مدل: openvoice (به صورت پیشفرض)، chatterbox |
| emotion | string | نه | احساس هدف: neutral, happy, sad, angry, excited |
| speed | float | نه | تنظیم سرعت. پیشفرض: ۱٫۰. محدوده: ۰٫۵ تا ۲٫۰ |
پاسخ
پروندۀ صوت تبدیلشده را به عنوان داده باینری برمیگرداند.
ابزارهای صوتی
پایانههای پردازش صوتی برای بهبود، حذف صدا، تقسیم ساقه و غیره.
بهبود کیفیت صدا: حذف نویز، بهبود شفافیت، وضوح بالا.
| file file | پروندۀ صوتی برای بهبود |
| denoise boolean | فعالسازی حذف نویز) پیشفرض: درست ( |
| enhance_clarity boolean | بهبود شفافیت گفتار) پیشفرض: درست ( |
| super_resolution boolean | ارتقا کیفیت صدا) پیشفرض: نادرست ( |
| strength integer | ۱- ۳) سبک ، متوسط ، قوی (. پیشفرض: ۲ |
صوتها را از سازهای بادی جدا کنید (حذف صوت) یا به ساقهها تقسیم کنید.
| file file | پروندۀ صوتی برای جداسازی |
| model string | demucs (پیشفرض) یا spleeter |
| stems integer | تعداد ساقهها: ۲ ، ۴ ، ۵ ، یا ۶) پیشفرض: ۲ ( |
| format string | قالب خروجی: wav, mp3, flac |
حذف انعکاس و بازتاب از ضبطهای صوتی.
| file file | پروندۀ صوتی برای پردازش |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
تحلیل صدا برای تشخیص کلید، BPM و امضای زمان.
| file file | پروندۀ صوتی برای تجزیه |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
تبدیل صدا بین قالبها.
| file file | پروندۀ صوتی برای تبدیل |
| format string | فرمت هدف: mp3, wav, flac, ogg, m4a, aac |
| bitrate integer | نرخ بیت خروجی به کیلوبیت بر ثانیه: ۶۴، ۱۲۸، ۱۹۲، ۲۵۶، ۳۲۰ |
| sample_rate integer | نرخ نمونه: 22050, 44100, 48000 |
| channels string | mono یا stereo |
گپ صوتی
ارسال صدا یا متن و دریافت پاسخ هوش مصنوعی با گفتار سنتز شده.
بدنه درخواست (multipart/form-data یا JSON)
| پارامتر | نوع | لازم | & توصیف |
|---|---|---|---|
| audio | file | نه* | ورودی صوتی (یا audio یا text لازم است) |
| text | string | نه* | ورودی متن (یا audio یا text لازم است) |
| voice | string | نه | صدای پاسخ هوش مصنوعی. پیشفرض: af_bella |
| tts_model | string | نه | مدل TTS برای پاسخ. پیشفرض: kokoro |
| system_prompt | string | نه | درخواست سیستم سفارشی برای هوش مصنوعی |
| conversation_id | string | نه | ادامه یک مکالمهی موجود |
پاسخ
{
"conversation_id": "conv_abc123",
"user_text": "What is the capital of France?",
"ai_text": "The capital of France is Paris.",
"audio_url": "https://api.tts.ai/v1/audio/tmp/resp_xyz.mp3",
"credits_used": 3
}
مجموعه TTS
ارسال چند متن برای تولید موازی TTS. هنگامی که تمام کارها تکمیل شد ، یک بازگشت تماس webhook را دریافت کنید.
پارامترها
| پارامتر | نوع | توصیف |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | URL اختیاری برای نتایج POST هنگامی که بسته کامل میشود. |
پاسخ
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
پیشرفت نظرسنجی با GET /v1/tts/batch/result/?batch_id=abc123
جاسازی صدا
از پیش محاسبه کردن یک توکار صدا از صدای مرجع. از embed_id بازگشتی در درخواستهای شبیهسازی صدای بعدی برای تولید نزدیک به لحظه استفاده کنید.
پارامترها
| پارامتر | نوع | توصیف |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
پاسخ
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
بررسی سلامت
وضعیت کارساز GPU، مدلهای بارشده و اندازه صف را بررسی میکند. احراز هویت لازم نیست. برای ۳۰ ثانیه نهانسازی شده است.
پاسخ
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
فهرست مدلها
یک فهرست از تمام مدلهای موجود با قابلیتهایشان را برمیگرداند.
پاسخ
{
"models": [
{
"id": "kokoro",
"name": "Kokoro",
"type": "tts",
"tier": "standard",
"languages": ["en", "ja", "ko", "zh", "fr"],
"supports_cloning": false,
"supports_streaming": true,
"credits_per_1k_chars": 2
},
{
"id": "chatterbox",
"name": "Chatterbox",
"type": "tts",
"tier": "premium",
"languages": ["en"],
"supports_cloning": true,
"supports_streaming": true,
"credits_per_1k_chars": 4
}
]
}
فهرست صداها
فهرستی از تمام صداهای موجود را برمیگرداند که به صورت اختیاری بر اساس مدل یا زبان فیلتر شدهاند.
پارامترهای پرسش
| پارامتر | نوع | & توصیف |
|---|---|---|
| model | string | پالایش بر اساس شناسهٔ مدل (مثلاً kokoro) |
| language | string | پالایش بر اساس کد زبان (مثلاً en) |
| gender | string | فیلتر بر اساس جنسیت: male, female, neutral |
پاسخ
{
"voices": [
{
"id": "af_bella",
"name": "Bella",
"model": "kokoro",
"language": "en",
"gender": "female",
"preview_url": "https://api.tts.ai/v1/voices/preview/af_bella.mp3"
}
],
"total": 142
}
زیرنویسها جدید
تولید زیرنویس همگامشده برای هر کار TTS تکمیلشده. همتراز کردن Whisper را روی صدا اجرا میکند و SRT یا WebVTT را برمیگرداند. نتیجه در دیسک نهانسازی میشود ، بنابراین یک فراخوانی دوم برای همان uuid یک خواندن دیسک است.
پارامترهای پرسش
| پارامتر | لازم | & توصیف |
|---|---|---|
| uuid | آره | UUID کار توسط /v1/tts/ یا /v1/voice-clone/ بازگردانده میشود. |
| format | نه | srt (به صورت پیشفرض) یا vtt. |
| download | نه | 1 برای فرستادن Content-Disposition: attachment به مرورگر به جای نمایش، ذخیره میشود. |
| language | نه | راهنمایی برای مدل همترازسازی (اگر حذف شود، خودکار تشخیص داده میشود). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
واژهنامه تلفظ جدید
به موتور TTS بگویید چگونه کلمات مشخص را تلفظ کند. مدخلهای ذخیره شده به صورت خودکار به هر درخواست TTS که انجام میدهید اعمال میشوند. حد مدخل ۲۰۰ در هر حساب.
بدنه درخواست (POST)
| پارامتر | نوع | & توصیف |
|---|---|---|
| word | string | کلمهای که باید جایگزین شود (مثلاً GIF، Anthropic). تطابق مرز کلمه. |
| replacement | string | چگونه آن را برای مدل تلفظ کنیم (مثلاً jiff, ann THROP ick). |
| language | string | کد اختیاری ISO. خالی = برای همه زبانها اعمال میشود. |
| case_sensitive | boolean | false پیشفرض. دقیقاً هنگامی که true است، با حالت کوچک/بزرگ مطابقت میکند. |
# Save an entry
curl -X POST https://tts.ai/api/v1/pronunciations/ \
-H "Authorization: Bearer sk-tts-..." \
-H "Content-Type: application/json" \
-d '{"word": "GIF", "replacement": "jiff"}'
# List your entries
curl https://tts.ai/api/v1/pronunciations/ -H "Authorization: Bearer sk-tts-..."
# Delete entry by id
curl -X DELETE "https://tts.ai/api/v1/pronunciations/?id=42" -H "Authorization: Bearer sk-tts-..."
همچنین میتوانید فراخوانهای درخواستی را بدون ذخیره کردن آنها منتقل کنید - شامل pronunciations در هر فراخوان /v1/tts/ به عنوان یک شی یا آرایه (به پارامترهای نقطه پایانی TTS مراجعه کنید).
گوینده مقاله جدید
یک برچسب را روی هر صفحهٔ مقاله بگذارید و بازدیدکنندگان یک نوار خوانندهٔ ثابت را دریافت میکنند که صفحه را هنگام کلیک روایت میکند.
<script src="https://tts.ai/narrator.js"
data-pk="pk-tts-your-publishable-key"
data-voice="af_bella"
data-model="kokoro"
data-extract="auto"
data-position="bottom"
data-color="#e60000"
data-locale="en"></script>
گزینهها
| پارامتر | & توصیف |
|---|---|
data-pk | کلید قابل انتشار (pk-tts-...). محدودیتهای دامنه از طریق فیلد allowed_domains کلید اعمال میشود. |
data-voice | شناسه صدا. پیشفرض af_bella. |
data-model | کد مدل TTS. پیشفرض kokoro. |
data-extract | auto (به صورت پیشفرض) — تلاش برای انتخابکنندههای article/main/.post-content/.entry-content، به خوشه پرتراکمترین پاراگراف باز میگردد. یا هر انتخابکننده CSS را برای هدف قرار دادن یک عنصر خاص منتقل میکند. |
data-position | bottom (به صورت پیشفرض) یا top. |
data-color | رنگ تاکید (هر رنگ CSS). پیشفرض #e60000. |
data-min-chars / data-max-chars | اگر مقاله کوتاهتر از min- chars) پیشفرض ۲۰۰ (باشد ، خط را پرتاب کنید. ورودی را در max- chars) پیشفرض ۵۰۰۰۰ (ببندید. |
ابزار دکمۀ گوش دادن
توکار به سبک دکمۀ در خط. در کنار برچسب نمایش داده میشود و یک قطعۀ کوتاه را که با دکمۀ پرتاب شده پخش میشود. شکل متفاوت از گویندهٔ مقاله در بالا (که یک نوار صفحهای را به صورت خودکار تزریق میکند و کل مقاله را روایت میکند).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
صداهای ذخیرهشده) شبیهسازیهای پایدار (
یک بار یک صدای مرجع را بارگذاری کنید، یک voice_id پایدار را بازیابی کنید، سپس به جای بارگذاری مجدد صدا در هر تماس، به آن شناسه در درخواستهای TTS مراجعه کنید. ایدهآل برای ادغامهای حجم بالا.
بارگذاری یک صدا
POST
https://tts.ai/api/v1/user-voices/
احراز هویت لازم است
فرم چندبخشی. دایرهها: فایل (ضروری، صدای ۵۰ تا ۳۰ ثانیه)، نام (ضروری)، زبان (اختياری، پیشفرض en)، مدل (اختياری — انتخاب خودکار cosyvoice2 برای zh/ja/ko در غیر این صورت openvoice)، موافقت_تایید شده (ضروری، هر مقدار درست).
curl -X POST https://tts.ai/api/v1/user-voices/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@reference.wav" \
-F "name=My Narrator" \
-F "language=en" \
-F "consent_confirmed=true"
# Response:
{
"public_id": "uv_a1b2c3d4e5f6",
"id": 42,
"name": "My Narrator",
"model_name": "openvoice",
"language": "en",
"reference_audio_url": "https://tts.ai/media/user-voices/....wav",
"storage_status": "active",
"created_at": "2026-04-17T03:45:00+00:00"
}
استفاده از صدای ذخیرهشده در TTS
POST به /api/v1/tts/ (نگاه: میزبان VPS وب، نه api.tts.ai) با user_voice_id. ما صدای ذخیره شده شما را بارگذاری میکنیم و مسیر را به خط لوله شبیهسازی میدهیم.
curl -X POST https://tts.ai/api/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{"text":"Hello from my saved voice","user_voice_id":"uv_a1b2c3d4e5f6"}'
# Returns a queued job — poll /v1/speech/results/?uuid=... for the audio URL.
فهرست / حذف
GET https://tts.ai/api/v1/user-voices/ # list your saved voices + quota info
DELETE https://tts.ai/api/v1/user-voices/?public_id=uv_a1b2c3d4e5f6
بایگانیکردن / فعالسازی مجدد) آزاد (
صداهای بایگانیشده در حساب شما باقی میمانند ، اما نمیتوان از آنها در TTS استفاده کرد. برای کاربران نهایی بیکار مفید است ، بنابراین فهرست شما تمیز باقی میماند.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
مثالهای کد
متن به گفتارName
import requests
API_KEY = "sk-tts-your-key"
# Text to Speech
response = requests.post(
"https://api.tts.ai/v1/tts/",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "kokoro",
"text": "Hello from TTS.ai!",
"voice": "af_bella",
"format": "mp3"
}
)
with open("output.mp3", "wb") as f:
f.write(response.content)
print(f"Credits used: {response.headers.get('X-Credits-Used')}")
تبدیل گفتار به متنComment
# Speech to Text
with open("recording.mp3", "rb") as f:
response = requests.post(
"https://api.tts.ai/v1/stt/",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"model": "faster-whisper", "timestamps": "true"}
)
result = response.json()
print(result["text"])
شبیهسازی صدا
# Voice Cloning
with open("reference.wav", "rb") as ref:
response = requests.post(
"https://api.tts.ai/v1/tts/clone/",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"reference_audio": ref},
data={
"text": "This speech uses a cloned voice.",
"model": "chatterbox"
}
)
with open("cloned_output.mp3", "wb") as f:
f.write(response.content)
متن به گفتارName
const API_KEY = 'sk-tts-your-key';
// Text to Speech
const response = await fetch('https://api.tts.ai/v1/tts/', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'kokoro',
text: 'Hello from TTS.ai!',
voice: 'af_bella',
format: 'mp3'
})
});
const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
audio.play();
تبدیل گفتار به متنComment
// Speech to Text
const formData = new FormData();
formData.append('file', audioFile);
formData.append('model', 'faster-whisper');
const response = await fetch('https://api.tts.ai/v1/stt/', {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}` },
body: formData
});
const result = await response.json();
console.log(result.text);
متن به گفتارName
# Text to Speech
curl -X POST https://api.tts.ai/v1/tts/ \
-H "Authorization: Bearer sk-tts-your-key" \
-H "Content-Type: application/json" \
-d '{"model":"kokoro","text":"Hello!","voice":"af_bella","format":"mp3"}' \
-o output.mp3
تبدیل گفتار به متنComment
# Speech to Text
curl -X POST https://api.tts.ai/v1/stt/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@recording.mp3" \
-F "model=faster-whisper" \
-F "timestamps=true"
شبیهسازی صدا
# Voice Cloning
curl -X POST https://api.tts.ai/v1/tts/clone/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "reference_audio=@reference.wav" \
-F "text=This uses a cloned voice." \
-F "model=chatterbox" \
-o cloned.mp3
بهبود صوتی
# Audio Enhancement
curl -X POST https://api.tts.ai/v1/audio/enhance/ \
-H "Authorization: Bearer sk-tts-your-key" \
-F "file=@noisy_audio.mp3" \
-F "denoise=true" \
-F "enhance_clarity=true" \
-o enhanced.mp3
کدهای خطا
تمام خطاها یک پاسخ JSON با یک error زمين
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| وضعیت HTTP | کد خطا | & توصیف |
|---|---|---|
| 400 | bad_request |
پارامترهای درخواست نامعتبر. برای جزئیات ، پیام خطا را بررسی کنید. |
| 401 | unauthorized |
کلید API گم شده یا نامعتبر. |
| 402 | insufficient_credits |
کاراکترهای کافی وجود ندارد. بیشتر را در /pricing/ خریداری کنید. |
| 403 | forbidden |
شما اجازه دسترسی به این منبع را ندارید) برای مثال ، پرس و جو کردن کار کاربر دیگر (. دسترسی به API خود در هر طرحی شامل میشود. |
| 404 | not_found |
مدل یا صدا پیدا نشد. |
| 413 | file_too_large |
پروندۀ بارگذاریشده از حد اندازۀ محدودیت تجاوز میکند. |
| 429 | rate_limited |
درخواستهای زیادی. سرآیندهای محدودیت نرخ را بررسی کنید. |
| 500 | internal_error |
خطای کارساز. بعداً دوباره سعی کنید. |
| 503 | model_loading |
در حال بارگذاری مدل. تا چند ثانیه دیگر دوباره سعی کنید. |
Webhookها
برای تکالیف طولانیمدت (شکافتن ریشه، TTS بسته)، میتوانید یک پارامتر webhook_url را ارائه دهید. هنگامی که تکالیف به پایان میرسد، ما نتیجه را به نشانی URL شما ارسال میکنیم.
{
"event": "task.completed",
"task_id": "task_abc123",
"status": "success",
"result_url": "https://api.tts.ai/v1/results/task_abc123",
"credits_used": 12,
"created_at": "2025-01-15T10:30:00Z",
"completed_at": "2025-01-15T10:30:45Z"
}
آماده ساختن؟
کلید API خود را دریافت کنید و شروع به ادغام TTS.ai در برنامههای خود کنید.