Dokumentasi API

Integrate TTS.ai ke aplikasi Anda dengan API RAT kami. Format yang kompatibel dengan OpenAI untuk migrasi mudah.

API RAT Kompatibel OpenAI JSON Tanggapan Dukungan streaming

Ringkasan

API TTS.ai menyediakan akses programmatis ke semua fitur platform: sintesis text-to-speech, transkripsi bicara-ke-teks, kloning suara, peningkatan audio, dan lebih. API menggunakan konvensi REST standar dengan permintaan JSON/reponse tubuh.

Kunci API

Dapatkan kunci API Anda dari Pengaturan Akun. Tersedia pada rencana Pro dan Enterprise.

URL Dasar

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

Auth

Token pembawa melalui Authorization tajuk

Otentikasi

Semua permintaan API memerlukan otentikasi melalui token Pembawa pada Authorization tajuk.

Header HTTP
Authorization: Bearer sk-tts-your-api-key-here
Simpan rahasia kunci API Anda. Jangan bagi dalam kode sisi klien, repositori publik, atau log. Putar kunci secara teratur dari pengaturan akun Anda.

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")
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 Dasar

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

Semua titik akhir relatif terhadap URL dasar ini. Sebagai contoh, titik akhir TTS adalah:

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

Batas Laju

Batas tingkat API bervariasi menurut rencana:

Rencana Permintaan/min Bersama Panjang Teks Max
Bebas 10 2 500 karakter
Pemulai 30 3 100.000 karakter
Pro 60 5 100.000 karakter
Enterprise 300 20 50.000 karakter

Tingkat batas header termasuk dalam setiap respon: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Biaya Kredit

Layanan Biaya Unit
TTS (model gratis: Piper, VITS, Melotts) 1.000 karakter per 1.000 karakter
TTS (model Standard: Kokoro, CosyVoice 2, dsb.) 2.000 karakter per 1.000 karakter
TTS (model Premium: Tortoise, Chatterbox, dll) 4.000 karakter per 1.000 karakter
Pidato ke Teks 2.000 karakter per menit audio
Kloning Suara 4.000 karakter per 1.000 karakter
Voice Changer 3.000 karakter per menit audio
Peningkatan Audio 2.000 karakter per menit audio
Vokal Removal / Stem Splitting 3.000-4.000 karakter per menit audio
Terjemahan Tutur Kata 5.000 karakter per menit audio
Percakapan Suara 3.000 karakter per putaran
Pencari Tombol & BPM Bebas --
Pengkonversi Audio Bebas --

Teks ke Pidato

POST /v1/tts/

Ubah teks ke audio pidato. Mengembalikan berkas audio dalam format yang diminta.

Badan Permintaan

ParameterTipeDiperlukanDeskripsi
model string Ya Model ID (e.g., koro, chatterbox, piper)
text string Ya Teks untuk dikonversi ke pidato (maksimal 100.000 karakter per permintaan)
voice string Ya ID suara (gunakan /v1/voices/ untuk daftar suara yang tersedia)
format string Tidak Format keluaran: mp3 (baku), wav, flac, ogg
speed float Tidak Speaking speed multiplier. Baku: 1.0. Range: ke 2.0
language string Tidak Kode bahasa (mis., en, es). Auto-dideteksi jika diabaikan.
stream boolean Tidak Aktifkan respon streaming. Baku: 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

Tanggapan

Mengembalikan berkas audio sebagai data biner dengan Konten-Type header (audio/mpeg, audio/wav, dsb.).

Tajuk Respon
Content-Type: audio/mpeg
Content-Length: 48256
X-Credits-Used: 2
X-Credits-Remaining: 498

Pidato ke Teks

POST /v1/stt/

Transkrip audio ke teks. Mendukung 99 bahasa dengan auto-deteksi.

Badan Permintaan (multipart/form-data)

ParameterTipeDiperlukanDeskripsi
file file Ya Berkas audio (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Max 100MB.
model string Tidak STT model: wissper (baku), pe-whisper, sensevoice
language string Tidak Kode bahasa. auto untuk auto-deteksi (baku).
timestamps boolean Tidak Sertakan penanda waktu tingkat kata. Baku: false
diarize boolean Tidak Aktifkan diarisasi speaker. Baku: false

Tanggapan

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

Kloning Suara

POST /v1/tts/clone/

Hasilkan pidato dalam suara kloning. Unggah sebuah referensi audio dan teks.

Badan Permintaan (multipart/form-data)

ParameterTipeDiperlukanDeskripsi
reference_audio file Ya Audio suara referensi (10-30 detik direkomendasikan). Max 20MB.
text string Ya Teks untuk berbicara dalam suara kloning.
model string Tidak Model Clone: Chatterbox (baku), cocyvoice2, gpt-sovits
format string Tidak Format keluaran: mp3 (baku), wav, flac
language string Tidak Kode bahasa target. Harus didukung oleh model yang dipilih.

Tanggapan

Mengembalikan berkas audio sebagai data biner, sama seperti titik akhir TTS.

Voice Changer

POST /v1/voice-convert/

Ubah audio ke suara lain. Unggah audio sumber dan pilih suara target.

Badan Permintaan (multipart/form-data)

ParameterTipeDiperlukanDeskripsi
file file Ya Berkas audio sumber (MP3, WAV, FLAC). Max 50MB.
target_voice string Ya Target ID suara untuk dikonversi ke (gunakan /v1/voices/ untuk mendaftar suara yang tersedia)
model string Tidak Model konversi suara: openvoice (baku), kn-vc
format string Tidak Format keluaran: wav (baku), 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

Tanggapan

Mengembalikan berkas audio yang dikonversi sebagai data biner.

Terjemahan Tutur Kata

POST /v1/speech-translate/

Terjemahkan audio yang digunakan dari satu bahasa ke bahasa lain. Combined speech-to-text, terjemahan, dan teks-to-peech dalam satu panggilan.

Badan Permintaan (multipart/form-data)

ParameterTipeDiperlukanDeskripsi
file file Ya Berkas audio sumber dalam bahasa asli. Max 100MB.
target_language string Ya Target kode bahasa (e.g., es, fr, , , )
voice string Tidak Suara untuk keluaran terjemahan. Dipilih otomatis bila diabaikan.
preserve_voice boolean Tidak Mencoba mempertahankan karakteristik suara pembicara asli. Baku: false

Tanggapan

JSON Response
{
  "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 Kata

POST /v1/speech-to-speech/

Ubah gaya bicara, emosi, atau pengiriman sewaktu menyimpan isi. Berguna untuk menyesuaikan nada, kecepatan, dan ekspresif.

Badan Permintaan (multipart/form-data)

ParameterTipeDiperlukanDeskripsi
file file Ya Berkas audio pidato sumber. Max 50MB.
voice string Ya Target ID suara untuk pidato keluaran
model string Tidak Model: openvoice (baku), chatterbox
emotion string Tidak Emosi target: neutral, senang, ad, , ,
speed float Tidak Penyesuaian kecepatan. Baku: 1.0. Jarak: 0.5 ke 2.0

Tanggapan

Mengembalikan berkas audio yang diubah sebagai data biner.

Perkakas Audio

Titik akhir pemrosesan audio untuk peningkatan, penghapusan vokal, pemisahan batang, dan masih banyak lagi.

POST /v1/audio/enhance/

Tingkatkan kualitas audio: denoise, meningkatkan kejelasan, resolusi super.

file fileBerkas audio yang akan ditambahkan
denoise booleanAktifkan denoising (baku: benar)
enhance_clarity booleanTingkatkan kejelasan ucapan (baku: benar)
super_resolution booleanKualitas audio kelas atas (baku: salah)
strength integer1-3 (cahaya, sedang, kuat). Baku: 2
POST /v1/audio/separate/

Pisahkan vokal dari instrumental (penghapusanvokal) atau pecah menjadi batang.

file fileBerkas audio untuk dipisahkan
model stringdemucs (baku) atau spleeter
stems integerJumlah batang: 2, 4, 5, atau 6 (baku: 2)
format stringFormat keluaran: wav, mp3, flac
POST /v1/audio/dereverb/

Hapus gema dan reverb dari rekaman audio.

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

Analisis audio untuk mendeteksi kunci, BPM, dan tanda tangan waktu.

file fileBerkas audio untuk dianalisa
Tanggapan
{
  "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

Ubah audio antar format.

file fileBerkas audio untuk dikonversi
format stringFormat target: mp3, wav, flac, ,
bitrate integerBitrate keluaran di kbps: 64, 128, 192, 256, 320
sample_rate integerLaju sampel: 22050, 44100, 48 000
channels stringmono atau stereo

Percakapan Suara

POST /v1/voice-chat/

Kirim audio atau teks dan terima jawaban AI dengan pidato yang disintesis.

Badan Permintaan (multipart/form-data atau JSON)

ParameterTipeDiperlukanDeskripsi
audio file Tidak* Masukan audio (yang dibutuhkan audio atau text)
text string Tidak* Masukan teks (baik audio atau text dibutuhkan)
voice string Tidak Suara untuk respon AI. Baku: af_bella
tts_model string Tidak Model TTS untuk respon. Baku: koro
system_prompt string Tidak Prompt sistem gubahan bagi AI
conversation_id string Tidak Lanjutkan percakapan yang sudah ada

Tanggapan

JSON Response
{
  "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/

Kirim beberapa teks untuk pembuatan TTS paralel. Pilihannya menerima panggilan webhook ketika semua pekerjaan selesai.

Parameter

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

Tanggapan

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

Kemajuan polon dengan GET /v1/tts/batch/result/?batch_id=abc123

Embedding Suara

POST /v1/voice-embed/

Pra-compate sebuah embedding suara dari audio referensi. Gunakan embed_id yang dikembalikan dalam permintaan kloning suara selanjutnya untuk generasi dekat-instant.

Parameter

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

Tanggapan

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

Pemeriksaan Kesehatan

GET /v1/health/

Periksa status server GPU, model yang dimuat, dan ukuran antrian. Tak diperlukan otentikasi. Cached selama 30 detik.

Tanggapan

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

Daftar Model

GET /v1/models/

Mengembalikan daftar semua model yang tersedia dengan kemampuan mereka.

Tanggapan

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

Daftar Suara

GET /v1/voices/

Mengembalikan daftar semua suara yang tersedia, dengan pilihan tersaring berdasarkan model atau bahasa.

Parameter Kuiri

ParameterTipeDeskripsi
model string Filter menurut model ID (misalnya, kokoro)
language string Filter oleh kode bahasa (mis, en)
gender string Filter by gender: male, women, neutral

Tanggapan

JSON Response
{
  "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 Kode

Teks ke Pidato

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

Pidato 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"])

Kloning 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 Pidato

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

Pidato 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 Pidato

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

Pidato 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"

Kloning 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

Kode Galat

Semua kesalahan mengembalikan respon JSON dengan error lapangan.

Format Respon Galat
{
  "error": {
    "code": "insufficient_credits",
    "message": "You do not have enough characters for this request.",
    "characters_required": 4000,
    "characters_available": 2000
  }
}
Status HTTPKode GalatDeskripsi
400 bad_request Parameter permintaan tak valid. Periksa pesan galat untuk rincian.
401 unauthorized Hilang atau kunci API tak valid.
402 insufficient_credits Tak cukup karakter.
403 forbidden Akses API tidak tersedia pada rencana Anda.
404 not_found Model atau suara tidak ditemukan.
413 file_too_large Berkas yang diunggah melebihi batas ukuran.
429 rate_limited Terlalu banyak permintaan. Periksa batas tingkat header.
500 internal_error Galat server. Coba lagi nanti.
503 model_loading Model sedang dimuat. coba lagi dalam beberapa detik.

Webhook

Untuk tugas yang berjalan panjang (stem split, batch TTS), Anda dapat menyediakan webhook_url parameter. Ketika tugas selesai, kami akan POST hasil ke URL Anda.

Webhook Payload
{
  "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 diunduh selama 24 jam setelah pelengkapan. Pastikan untuk segera mengunduhnya.

Siap Membangun?

Ambil kunci API Anda dan mulai mengintegrasikan TTS.ai ke dalam aplikasi Anda.