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

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.

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.

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 Concurrent Panjang Teks Max
Pro 60 5 5.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 kredit per 1.000 karakter
TTS (model Standard: Kokoro, CosyVoice 2, dsb.) 2 kredit per 1.000 karakter
TTS (model Premium: Tortoise, Chatterbox, dll) 4 kredit per 1.000 karakter
Pidato ke Teks 2 kredit per menit audio
Kloning Suara 4 kredit per 1.000 karakter
Voice Changer 3 kredit per menit audio
Peningkatan Audio 2 kredit per menit audio
Vokal Removal / Stem Splitting 3-4 kredit per menit audio
Terjemahan Tutur Kata 5 kredit per menit audio
Percakapan Suara 3 kredit 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 (max 5.000 karakter untuk Pro, 50.000 untuk Enterprise)
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

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

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 untuk melestarikan pembicara asli

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 fileAudio file to analyze
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
}

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 credits for this request.",
    "credits_required": 4,
    "credits_available": 2
  }
}
Status HTTPError CodeDeskripsi
400 bad_request Parameter permintaan tak valid. Periksa pesan galat untuk rincian.
401 unauthorized Hilang atau kunci API tak valid.
402 insufficient_credits Tidak cukup kredit.
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.