Dokumentasi API

Integrasikan 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

Ringkasan

The TTS.ai API provides programmatic access to all platform features: text-to-speech synthesis, speech-to-text transcription, voice cloning, audio enhancement, and more. The API uses standard REST conventions with JSON request/response bodies.

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.

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:

Pelan Permintaan/minit Concurrent Panjang Teks Maksimum
Pro 60 5 5,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 kredit setiap 1,000 aksara
TTS (Model piawai: Kokoro, CosyVoice 2, dll.) 2 kredit setiap 1,000 aksara
TTS (model premium: Tortoise, Chatterbox, dll.) 4 kredit setiap 1,000 aksara
Tutur ke Teks 2 kredit per minit audio
Klon Suara 4 kredit setiap 1,000 aksara
Pengubah SuaraName 3 kredit per minit audio
Peningkatan Audio 2 kredit per minit audio
Penghapusan Vokal / Pemisahan Stem 3-4 kredit per minit audio
Penterjemah Perkataan 5 kredit per minit audio
Sembang Suara 3 kredit 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 5,000 aksara untuk Pro, 50,000 untuk Enterprise)
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 Aktifkan 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

Returns the audio file as binary data with appropriate Content-Type header (audio/mpeg, audio/wav, etc.).

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 Audio suara rujukan (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 pertuturan-ke-teks, terjemahan, dan teks-ke-tuturan 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 terjemahan. Dipilih secara automatik jika diabaikan.
preserve_voice boolean Tidak Cuba untuk simpan pengerusi asal

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 percakapan, emosi, atau penghantaran sambil mengekalkan kandungan. Berguna untuk menyelaraskan nada, irama, dan ekspresif.

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 ditukar 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 booleanNaikkan kualiti audio (piawai: salah)
strength integer1-3 (cerah, sederhana, kuat). Default: 2
POST /v1/audio/separate/

Pisahkan vokal dari instrumental (pembersihan 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 respon. 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
}

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 Soalan

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 credits for this request.",
    "credits_required": 4,
    "credits_available": 2
  }
}
Status HTTPError CodeHuraian
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 kredit. Beli lagi di /pricing/.
403 forbidden Capaian API tidak tersedia pada rancangan anda.
404 not_found Model atau suara tidak dijumpai.
413 file_too_large Fail 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 mulakan mengintegrasikan TTS.ai ke dalam aplikasi anda.