وثائق API
دمج TTS.ai في تطبيقاتك مع REST API. الشكل المتوافق مع OpenAI للهجرة السهلة.
ألف - لمحة عامة
وتوفر واجهة برمجة التطبيقات TTS.ai إمكانية الوصول البرمجي إلى جميع خصائص المنصة: تحويل النص إلى كلام، وتحويل الكلام إلى نص، واستنساخ الصوت، وتعزيز الصوت، وما إلى ذلك. وتستخدم واجهة برمجة التطبيقات اتفاقيات REST القياسية مع أجسام طلب/استجابة JSON.
مفتاح API
احصل على مفتاح API الخاص بك من إعدادات الحساب. متوفر على خطط Pro و Enterprise.
العنوان الشبكي الأساسي
https://api.tts.ai/v1/
أذن
رموز لحاملها عن طريق Authorization العنوان
التوثيق
/v1/tts/ :: العمل دون أي إذن، بحد أقصى 000 5 حرف/يوم لكل عنوان بروتوكول الإنترنت، باستخدام أي من نماذجنا المجانية (piper, vits, melotts, kokoro). انضم لحساب مجاني للحصول على 15,000 شخصية مكافأة والوصول إلى نماذج عالية الجودة.
بالنسبة للنماذج العالية الجودة والحدود العالية للمعدلات، حدد التوثيق باستخدام رموز حامل في Authorization العنوان.
Authorization: Bearer sk-tts-your-api-key-here
مجموعات برامج الحاسوب
يسهل دمج TTS.ai في تطبيقك باستخدام مجموعات التطوير الرسمية، وكلاهما مفتوح المصدر ومتاح على موقع 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 هي:
حدود المعدلات
وتختلف الحدود القصوى لمعدلات المساعدة المؤقتة حسب الخطة:
| الخطة | الطلبات/الدقيقة | متزامن | أقصى طول للنص |
|---|---|---|---|
| مجاني | 10 | 2 | 500 دبابة |
| بدء التشغيل | 30 | 3 | 000 000 1 دبابة |
| المؤيدون | 60 | 5 | 000 000 1 دبابة |
| المؤسسة | 300 | 20 | 000 50 دبابة |
وترد عناوين حدود المعدلات في كل رد: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
تكاليف الائتمان
| الخدمات | التكلفة | الوحدة |
|---|---|---|
| TTS (النماذج الحرة: Piper, VITS, MeloTTS) | 000 1 حرف | لكل ٠٠٠ ١ حرف |
| TTS (النماذج القياسية: Kokoro, CosyVoice 2, etc.) | 000 2 حرف | لكل ٠٠٠ ١ حرف |
| TTS (نماذج عالية الجودة: Tortoise, Chatterbox, etc.) | 000 4 حرف | لكل ٠٠٠ ١ حرف |
| تحويل الكلام إلى نص | 000 2 حرف | لكل دقيقة من الصوت |
| استنساخ الصوت | 000 4 حرف | لكل ٠٠٠ ١ حرف |
| مغير الصوت | 000 3 حرف | لكل دقيقة من الصوت |
| تحسين الصوت | 000 2 حرف | لكل دقيقة من الصوت |
| إزالة الأصوات/تقسيم الجذع | 000 3-000 4 حرف | لكل دقيقة من الصوت |
| الترجمة الشفوية | 000 5 حرف | لكل دقيقة من الصوت |
| الدردشة الصوتية | 000 3 حرف | لكل نوبة |
| Key & BPM Finder (البحث عن المفاتيح) | مجاني | -- |
| محول صوت | مجاني | -- |
تحويل النص إلى كلمة
تحويل النص إلى صوت الكلام. يعيد الملف الصوتي في الشكل المطلوب.
الهيئة الطالبة
| البارامترات | النوع | المطلوبة | ألف - الوصف |
|---|---|---|---|
| model | string | لا | هوية النموذج (مثل kokoro, chatterbox, piper). إذا أُغفل، فإننا نختار تلقائياً نموذجاً يدعم لغة المطلوبة - 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 | نعم | النص الذي سيحول إلى كلمة. الحد الأقصى لكل طلب: 500 حرف (غير معروف)، 000 5 (حساب مجاني)، 000 000 1 (خطة مدفوعة) المدخلات الطويلة يتم تقسيمها تلقائيا على جانب الخادم. |
| voice | string | نعم | تحديد الهوية الصوتية (استخدام /v1/voices/ لقائمة الأصوات المتاحة) |
| format | string | لا | شكل الخرج: mp3 (الافتراضي)، wav، flac، ogg |
| speed | float | لا | مضاعف سرعة الكلام. الافتراضي: 1.0. النطاق: 0.5 إلى 2.0 |
| language | string | لا | رمز اللغة (مثلاً en, es). |
| instructions | string | لا | علامات التصرف/التسليم (≤ 500 حرف) مثل \ |
| 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-31الحادي والثﻻثون، التاسع عشر، التاسع والتسعون 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.
تحويل الكلام إلى نص
يدعم 99 لغة مع الكشف التلقائي.
الهيئة الطالبة (multipart/form-data)
| البارامترات | النوع | المطلوبة | ألف - الوصف |
|---|---|---|---|
| file | file | نعم | ملف صوتي (MP3, WAV, FLAC, OGG, M4A, MP4, WebM) بحجم أقصاه 100 ميغابايت. |
| 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 | نعم | صوت مرجعي (يوصى بـ 10-30 ثانية) 20 ميغابايت كحد أقصى. |
| text | string | نعم | نص للتحدث بالصوت المستنسخ |
| model | string | لا | نموذج النسخ: chatterbox (الافتراضي)، cosyvoice2، gpt-sovits |
| format | string | لا | شكل الخرج: mp3 (الافتراضي)، wav، flac |
| language | string | لا | رمز اللغة المستهدفة - يجب أن يكون مدعوماً بالنموذج المختار. |
الاستجابة
يعيد الملف الصوتي كبيانات ثنائية، نفس نقطة نهاية TTS.
مغير الصوت
تحويل الصوت إلى صوت مختلف. تحميل الصوت المصدر واختيار الصوت المستهدف.
الهيئة الطالبة (multipart/form-data)
| البارامترات | النوع | المطلوبة | ألف - الوصف |
|---|---|---|---|
| file | file | نعم | ملف صوت المصدر (MP3, WAV, FLAC) 50 ميغابايت كحد أقصى. |
| 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
الاستجابة
يعيد الملف الصوتي المحول كبيانات ثنائية.
الترجمة الشفوية
ترجمة الصوت المتكلم من لغة إلى أخرى. يجمع بين الكلام إلى النص، والترجمة، والنص إلى الكلام في مكالمة واحدة.
الهيئة الطالبة (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 | نعم | الملف الصوتي للكلام المصدر، 50 ميغابايت كحد أقصى |
| voice | string | نعم | تحديد الهوية الصوتية المستهدفة للكلمات المخرجة |
| model | string | لا | النموذج: openvoice (الافتراضي)، chatterbox |
| emotion | string | لا | المشاعر المستهدفة: حيادي، سعيد، حزين، غاضب، مثير. |
| speed | float | لا | تعديل السرعة. الافتراض: 1.0. النطاق: 0.5 إلى 2.0 |
الاستجابة
يعيد الملف الصوتي المحول كبيانات ثنائية.
أدوات سمعية
النقاط النهائية لمعالجة الصوت من أجل التعزيز، وإزالة الصوت، وتقسيم الجذع، وأكثر.
تحسين جودة الصوت: إزالة الضوضاء، تحسين الوضوح، الاستبانة الفائقة.
| file file | ملف صوتي لتعزيز |
| denoise boolean | تفعيل إزالة الضوضاء (الافتراضي: صحيح) |
| enhance_clarity boolean | تحسين وضوح الكلام (الافتراضي: صحيح) |
| super_resolution boolean | رفع جودة الصوت (افتراضي: غير صحيح) |
| strength integer | 1-3 (خفيف، متوسط، قوي) الافتراض: 2 |
فصل الأصوات عن الأدوات (إزالة الأصوات) أو تقسيمها إلى أصوات.
| file file | ملف صوتي ينفصل |
| model string | demucs (الافتراض) أو spleeter |
| stems integer | عدد الجذوع: 2 أو 4 أو 5 أو 6 (الافتراض: 2) |
| 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 | معدلات الخروج بالكيلوبايت في الثانية: 64، 128، 192، 256، 320 |
| 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 | لا | نموذج ترجمة النصوص إلى صوت للاستجابة. الافتراضي: 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 متوازية. اختياريا تلقي 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
}
فحص صحي
تحقق من حالة خادم وحدة المعالجة الرسومية، النماذج المحملة، وحجم الصف. لا حاجة للتحقق. مخزن لمدة 30 ثانية.
الاستجابة
{
"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 | الترشيح حسب نوع الجنس: ذكر، أنثى، محايد |
الاستجابة
{
"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
}
الترجمة النصية (SRT / VTT) جديدة
توليد النصوص الجانبية المتزامنة لأي مهمة 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 الذي تقوم به. حد 200 مدخل لكل حساب.
الهيئة الطالبة (POST)
| البارامترات | النوع | ألف - الوصف |
|---|---|---|
| word | string | كلمة لتجاوزها (مثل GIF, Anthropic). حد الكلمة مطابق. |
| replacement | string | كيف تهجئها للنموذج (مثل jiff، ann THROP ick). |
| language | string | رمز اختياري للمنظمة الدولية لتوحيد المقاييس. |
| 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 (الافتراضي) — يحاول انتقاء المادة/الرئيسية/.post-content/.entry-content، يعود إلى الفقرة الأكثر كثافة. أو يمر أي CSS انتقاء لاستهداف عنصر محدد. |
data-position | bottom (الافتراضي) أو top. |
data-color | لون التأكيد (أي لون CSS). الافتراضي #e60000. |
data-min-chars / data-max-chars | تخط الخط إذا كان المقال أقصر من الحد الأدنى للحروف (الافتراضي 200). الحد الأقصى للمدخلات عند الحد الأقصى للحروف (الافتراضي 50000). |
زر الاستماع
ضم على غرار زر داخل الخط. يظهر بجانب علامته ويلعب مقطع قصير يطلقه زر. شكل مختلف عن قارئ المقالة أعلاه (الذي يحقن تلقائياً شريطاً يمتد على صفحة ويروي المقالة بأكملها).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
الأصوات المحفوظة (النسخ الدائمة)
تحميل مرجع صوت مرة واحدة، والحصول على voice_id ثابت، ثم الإشارة إلى ذلك id في طلبات TTS بدلا من إعادة تحميل الصوت كل مكالمة. مثالي لعمليات الدمج الكبيرة.
تحميل صوت
POST
https://tts.ai/api/v1/user-voices/
مطلوب إذن
الحقول: الملف (مطلوب، 5-30 ثانية للصوت)، الاسم (مطلوب)، اللغة (اختياري، الافتراض هو الإنكليزية)، النموذج (اختياري - يختار تلقائيا الصوت المريح 2 بالنسبة للصينية/اليابانية/الكورية وإلا فـي حالـة الصوت المفتوح)، الموافقة_المؤكدة (مطلوب، أي قيمة صحيحة).
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
ضعه في /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/
أمثلة على الرموز
تحويل النص إلى كلمة
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')}")
تحويل الكلام إلى نص
# 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)
تحويل النص إلى كلمة
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();
تحويل الكلام إلى نص
// 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);
تحويل النص إلى كلمة
# 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
تحويل الكلام إلى نص
# 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_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 في تطبيقاتك.