Dokumentasi API

Integre TTS.ai ke dalam aplikasi anda dengan API REST kami. Format serasi OpenAI untuk migrasi mudah.

API REST Sesuai dengan OpenAI Balasan JSON Sokongan Strim

Lihat

API TTS.ai menyediakan akses program kepada semua ciri-ciri platform: sintesis teks-ke-tutur, transkripsi ucapan-ke-teks, klon suara, peningkatan audio, dan lain-lain. API menggunakan konvensyen REST piawai dengan badan permintaan/balas JSON.

Kekunci API

Dapatkan kekunci API anda dari Tetapan Akaun. Tersedia pada rancangan Pro dan Enterprise.

URL Asas

https://api.tts.ai/v1/

Auth

Token pemegang melalui Authorization pengepala

Pengesahan

Semua permintaan API memerlukan pengesahan melalui token Bearer dalam Authorization pengepala.

Pengepala HTTP
Authorization: Bearer sk-tts-your-api-key-here
Simpan kunci API anda rahsia. Jangan kongsi ia dalam kod sisi klien, repositori awam, atau log. Putar kekunci secara berkala dari tetapan akaun anda.

SDK

SDK rasmi menjadikannya mudah untuk mengintegrasikan TTS.ai ke dalam aplikasi anda. Kedua-duanya adalah sumber terbuka dan tersedia di 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")
GitHub

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');
GitHub

URL Asas

URL Asas: https://api.tts.ai/v1/

Semua titik akhir adalah relatif kepada URL asas ini. Sebagai contoh, titik akhir TTS adalah:

POST https://api.tts.ai/v1/tts/

Had Kadar

Had kadar API berbeza mengikut rancangan:

Plan Permintaan/minit Selari Panjang Teks Maksimum
Bebas 10 2 500 aksara
Pelancar 30 3 100,000 aksara
Pro 60 5 100,000 aksara
Enterprise 300 20 50,000 aksara

Pengepala had kadar dimasukkan dalam setiap jawapan: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Kos Kredit

Servis Kos Unit
TTS (model percuma: Piper, VITS, MeloTTS) 1,000 aksara setiap 1,000 aksara
TTS (Model piawai: Kokoro, CosyVoice 2, dll.) 2,000 aksara setiap 1,000 aksara
TTS (model premium: Tortoise, Chatterbox, dll.) 4,000 aksara setiap 1,000 aksara
Tutur ke Teks 2,000 aksara per minit audio
Klon Suara 4,000 aksara setiap 1,000 aksara
Pengubah SuaraName 3,000 aksara per minit audio
Peningkatan Audio 2,000 aksara per minit audio
Pembersihan Vokal / Pemisahan Stem 3,000-4,000 aksara per minit audio
Penterjemah Perkataan 5,000 aksara per minit audio
Sembang Suara 3,000 aksara setiap pusingan
Pencari Kekunci & BPM Bebas --
Penukar Audio Bebas --

Teks ke Tutur

POST /v1/tts/

Tukar teks ke audio pertuturan. Kembalikan fail audio dalam format yang diminta.

Tubuh Permintaan

ParameterJenisDiperlukanHuraian
model string Ya ID model (cth, kokoro, chatterbox, piper)
text string Ya Teks untuk ditukar kepada ucapan (maksimum 100,000 aksara per permintaan)
voice string Ya ID Suara (guna /v1/voices/ untuk senaraikan suara yang ada)
format string Tidak Format output: mp3 (piawai), wav, flac, ogg
speed float Tidak Pengganda kelajuan bercakap. Lalai: 1.0. Julat: 0.5 hingga 2.0
language string Tidak Kod bahasa (cth, en, es). Dikesan secara automatik jika diabaikan.
stream boolean Tidak Benarkan respon strim. Lalai: false

Permintaan Contoh

cURL
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

Balasan

Kembalikan fail audio sebagai data binari dengan pengepala Content-Type yang sesuai (audio/mpeg, audio/wav, dll.).

Pengepala Balasan
Content-Type: audio/mpeg
Content-Length: 48256
X-Credits-Used: 2
X-Credits-Remaining: 498

Tutur ke Teks

POST /v1/stt/

Transkrip audio ke teks. Menyokong 99 bahasa dengan pengesanan automatik.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Maksimum 100MB.
model string Tidak Model STT: whisper (piawai), faster-whisper, sensevoice
language string Tidak Kod bahasa. auto untuk pengesanan automatik (piawai).
timestamps boolean Tidak Termasuk setem masa aras-perkataan. Lalai: false
diarize boolean Tidak Hidupkan diarisasi pengerusi. Lalai: false

Balasan

Balasan JSON
{
  "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"
    }
  ]
}

Klon Suara

POST /v1/tts/clone/

Janakan percakapan dalam suara klon. Muat naik audio rujukan dan teks.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
reference_audio file Ya Rujukan suara audio (10-30 saat disyorkan). Maksimum 20MB.
text string Ya Teks untuk diucapkan dalam suara klon.
model string Tidak Model klon: chatterbox (piawai), cosyvoice2, gpt-sovits
format string Tidak Format output: mp3 (piawai), wav, flac
language string Tidak Kod bahasa sasaran. Mesti disokong oleh model yang dipilih.

Balasan

Kembalikan fail audio sebagai data binari, sama seperti titik akhir TTS.

Pengubah SuaraName

POST /v1/voice-convert/

Tukar audio untuk berbunyi seperti suara lain. Muat naik audio sumber dan pilih suara sasaran.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio sumber (MP3, WAV, FLAC). Maksimum 50MB.
target_voice string Ya ID suara sasaran untuk ditukar kepada (guna /v1/voices/ untuk senaraikan suara yang ada)
model string Tidak Model penukaran suara: openvoice (piawai), knn-vc
format string Tidak Format output: wav (piawai), mp3, flac

Permintaan Contoh

cURL
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

Balasan

Kembalikan fail audio yang ditukar sebagai data binari.

Penterjemah Perkataan

POST /v1/speech-translate/

Terjemahkan audio yang diucapkan dari satu bahasa ke bahasa lain. Menggabungkan percakapan-ke-teks, terjemahan, dan teks-ke-percakapan dalam satu panggilan.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio sumber dalam bahasa asal. Maksimum 100MB.
target_language string Ya Kod bahasa sasaran (cth, es, fr, de, ja)
voice string Tidak Suara untuk output diterjemah. Dipilih secara automatik jika diabaikan.
preserve_voice boolean Tidak Cuba untuk menyimpan ciri-ciri suara pengerusi asal. Lalai: false

Balasan

Balasan JSON
{
  "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
}

Tutur ke Tutur

POST /v1/speech-to-speech/

Tukar gaya ucapan, emosi, atau penghantaran sambil menyimpan kandungan. Berguna untuk menyelaraskan nada, irama, dan ekspresi.

Tubuh Permintaan (multipart/form-data)

ParameterJenisDiperlukanHuraian
file file Ya Fail audio pertuturan sumber. Maksimum 50MB.
voice string Ya ID suara sasaran untuk ucapan output
model string Tidak Model: openvoice (piawai), chatterbox
emotion string Tidak Emosi sasaran: neutral, happy, sad, angry, excited
speed float Tidak Laras kelajuan. Lalai: 1.0. Julat: 0.5 hingga 2.0

Balasan

Kembalikan fail audio yang diubah sebagai data binari.

Alat Audio

Titik akhir pemprosesan audio untuk penambahbaikan, penghapusan vokal, pemisahan stem, dan lain-lain.

POST /v1/audio/enhance/

Meningkatkan kualiti audio: de-noise, meningkatkan ketelusan, resolusi super.

file fileFail audio untuk ditingkatkan
denoise booleanHidupkan pengurangan bunyi (piawai: benar)
enhance_clarity booleanMeningkatkan ketelusan percakapan (piawai: benar)
super_resolution booleanKualiti audio naikskala (piawai: salah)
strength integer1-3 (cerah, sederhana, kuat). Default: 2
POST /v1/audio/separate/

Pisahkan vokal dari instrumental (pembuang vokal) atau pisahkan ke dalam batang.

file fileFail audio untuk dipisahkan
model stringdemucs (default) atau spleeter
stems integerBilangan batang: 2, 4, 5, atau 6 (piawai: 2)
format stringFormat output: wav, mp3, flac
POST /v1/audio/dereverb/

Buang gema dan gegaran dari rakaman audio.

file fileFail audio untuk diproses
type stringecho or reverb (default: both)
intensity integer1-5 (default: 3)
POST /v1/audio/analyze/ Bebas

Menganalisis audio untuk mengesan kekunci, BPM, dan tandatangan masa.

file fileFail audio untuk dianalisis
Balasan
{
  "key": "C",
  "scale": "Major",
  "bpm": 120.0,
  "time_signature": "4/4",
  "camelot": "8B",
  "compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
POST /v1/audio/convert/ Bebas

Tukar audio antara format.

file fileFail audio untuk ditukar
format stringFormat sasaran: mp3, wav, flac, ogg, m4a, aac
bitrate integerKadar bit output dalam kbps: 64, 128, 192, 256, 320
sample_rate integerKadar sampel: 22050, 44100, 48000
channels stringmono atau stereo

Sembang Suara

POST /v1/voice-chat/

Hantar audio atau teks dan terima respon AI dengan ucapan disintesis.

Tubuh Permintaan (multipart/form-data atau JSON)

ParameterJenisDiperlukanHuraian
audio file Tidak* Input audio (audio atau text diperlukan)
text string Tidak* Input teks (audio atau text diperlukan)
voice string Tidak Suara bagi respon AI. Lalai: af_bella
tts_model string Tidak Model TTS untuk maklum balas. Lalai: kokoro
system_prompt string Tidak Prompt sistem tersendiri untuk AI
conversation_id string Tidak Teruskan perbualan sedia ada

Balasan

Balasan JSON
{
  "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
}

Batch TTS

POST /v1/tts/batch/

Hantarkan teks berbilang untuk penjanaan TTS selari. Secara opsyenal terima panggilan balik webhook apabila semua kerja selesai.

Parameter

ParameterJenisHuraian
textsarrayArray of objects: {text, model, voice}. Max 50 items.
webhook_urlstringOptional URL to POST results when batch completes.

Balasan

Balasan JSON
{
  "batch_id": "abc123",
  "total": 3,
  "completed": 0,
  "status": "processing"
}

Progres poll dengan GET /v1/tts/batch/result/?batch_id=abc123

Pembentangan

POST /v1/voice-embed/

Pra-hitung pembesaran suara dari audio rujukan. Guna embed_id dikembalikan dalam permintaan klon suara seterusnya untuk penjanaan hampir-segera.

Parameter

ParameterJenisHuraian
filefileReference audio file (WAV, MP3, FLAC).
modelstringCloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts.

Balasan

Balasan JSON
{
  "embed_id": "emb_abc123",
  "model": "chatterbox",
  "duration_ms": 450
}

Periksa Kesihatan

GET /v1/health/

Semak status pelayan GPU, model dimuatkan, dan saiz baris gilir. Tiada pengesahan diperlukan. Dicache untuk 30 saat.

Balasan

Balasan JSON
{
  "status": "online",
  "latency_ms": 45,
  "queue_size": 3,
  "models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}

Senarai Model

GET /v1/models/

Kembalikan senarai semua model yang ada dengan keupayaan mereka.

Balasan

Balasan JSON
{
  "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
    }
  ]
}

Senarai Bunyi

GET /v1/voices/

Kembalikan senarai semua suara yang ada, secara opsyen ditapis mengikut model atau bahasa.

Parameter Pertanyaan

ParameterJenisHuraian
model string Penapis mengikut ID model (cth, kokoro)
language string Penapis mengikut kod bahasa (cth, en)
gender string Penapis mengikut jantina: lelaki, wanita, neutral

Balasan

Balasan JSON
{
  "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
}

Contoh Kod

Teks ke Tutur

Python - requests
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')}")

Tutur ke Teks

Python - requests
# 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"])

Klon Suara

Python - requests
# 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)

Teks ke Tutur

JavaScript - fetch
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();

Tutur ke Teks

JavaScript - fetch
// 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);

Teks ke Tutur

cURL
# 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

Tutur ke Teks

cURL
# 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"

Klon Suara

cURL
# 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

Peningkatan Audio

cURL
# 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

Kod Ralat

Semua ralat mengembalikan maklum balas JSON dengan error medan.

Format Balasan Ralat
{
  "error": {
    "code": "insufficient_credits",
    "message": "You do not have enough characters for this request.",
    "characters_required": 4000,
    "characters_available": 2000
  }
}
Status HTTPKod RalatHuraian
400 bad_request Parameter permintaan tidak sah. Semak mesej ralat untuk perincian.
401 unauthorized Kekunci API hilang atau tidak sah.
402 insufficient_credits Tidak cukup aksara. Beli lebih di /pricing/.
403 forbidden Capaian API tidak tersedia pada rancangan anda.
404 not_found Model atau suara tidak dijumpai.
413 file_too_large Fail yang dimuat naik melebihi had saiz.
429 rate_limited Terlalu banyak permintaan. Semak pengepala had kadar.
500 internal_error Ralat pelayan. Cuba lagi kemudian.
503 model_loading Model sedang dimuatkan. Cuba lagi dalam beberapa saat.

Webhook

Untuk tugas berjalan panjang (pemisahan pokok, TTS bakul), anda boleh berikan parameter webhook_url. Apabila tugas selesai, kami akan POST hasil ke URL anda.

Muatan Webhook
{
  "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"
}
Hasil Webhook tersedia untuk dimuat turun selama 24 jam selepas selesai. Pastikan untuk memuat turunnya dengan segera.

Sedia untuk Bina?

Dapatkan kunci API anda dan mula mengintegrasikan TTS.ai ke dalam aplikasi anda.