Tài liệu API
Tạo TTS.ai trong ứng dụng của bạn với REST API của chúng tôi.
Khám phá
API TTS.ai cung cấp truy cập lập trình cho tất cả các tính năng của nền tảng: tổng hợp văn bản thành lời nói, phiên âm từ lời nói thành văn bản, sao chép giọng nói, tăng cường âm thanh, và nhiều hơn nữa.
Chìa khóa API
Lấy chìa khóa API từ Thiết lập tài khoản. Có sẵn trên các kế hoạch Pro và Enterprise.
URL cơ sở
https://api.tts.ai/v1/
Xác thực
Mã mang qua Authorization đầu
Xác thực
/v1/tts/ làm việc mà không cần chứng thực, lên đến 5000 ký tự/ngày trên mỗi IP, sử dụng bất kỳ mô hình miễn phí nào của chúng tôi (piper, vits, melotts, kokoro). Đăng ký một tài khoản miễn phí để có 15.000 nhân vật thưởng và truy cập vào các mẫu cao cấp.
Đối với các mẫu cao cấp và giới hạn tốc độ cao hơn, xác thực với một mã Bearer trong Authorization đầu.
Authorization: Bearer sk-tts-your-api-key-here
SDK
Các SDK chính thức giúp dễ dàng tích hợp TTS.ai vào ứng dụng của bạn. Cả hai đều là mã nguồn mở và có sẵn trên 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');
URL cơ sở
Tất cả các điểm cuối đều tương đối với địa chỉ URL cơ sở này. Ví dụ, điểm cuối TTS là:
Giới hạn tốc độ
Giới hạn tốc độ API khác nhau tùy theo kế hoạch:
| Kế hoạch | Yêu cầu/ phút | Đồng thời | Chiều dài văn bản tối đa |
|---|---|---|---|
| Tự do | 10 | 2 | 500 ký tự |
| Bắt đầu | 30 | 3 | 1,000,000 characters |
| Tốt | 60 | 5 | 1,000,000 characters |
| Tập đoàn | 300 | 20 | 50,000 ký tự |
Tiêu đề giới hạn tốc độ được bao gồm trong mỗi câu trả lời: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Giá tín dụng
| Dịch vụ | Chi phí | Đơn vị |
|---|---|---|
| TTS (Mẫu miễn phí: Piper, VITS, MeloTTS) | 1,000 ký tự | mỗi 1000 ký tự |
| TTS (Mẫu tiêu chuẩn: Kokoro, CosyVoice 2, vv.) | 2000 ký tự | mỗi 1000 ký tự |
| TTS (Mẫu Premium: Tortoise, Chatterbox, v.v.) | 4,000 ký tự | mỗi 1000 ký tự |
| Từ nói sang văn bảnName | 2000 ký tự | mỗi phút âm thanh |
| Bản sao giọng | 4,000 ký tự | mỗi 1000 ký tự |
| Bộ thay đổi giọng nóiName | 3000 ký tự | mỗi phút âm thanh |
| Tăng cường âm thanh | 2000 ký tự | mỗi phút âm thanh |
| Gỡ bỏ giọng nói / chia cắt thanh điệu | 3,000-4,000 characters | mỗi phút âm thanh |
| Dịch Giọng nóiName | 5,000 ký tự | mỗi phút âm thanh |
| Thảo luận bằng giọng nói | 3000 ký tự | mỗi lượt |
| Tìm nhạc cụ & BPM | Tự do | -- |
| Biến đổi âm thanhName | Tự do | -- |
Văn bản sang Giọng nóiComment
Chuyển văn bản thành âm thanh nói. Trả lại tập tin âm thanh theo định dạng yêu cầu.
Cơ thể yêu cầu
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| model | string | Không. | Mã ID của mẫu (ví dụ, kokoro, chatterbox, piper). Nếu bỏ qua, chúng tôi sẽ tự động chọn một mẫu hỗ trợ language yêu cầu — kokoro cho en/ja/zh/ko/fr/de/it/pt/es/hi/ru, piper cho các ngôn ngữ khác được hỗ trợ (ar/pl/nl/cs/da/fi/el/hu/tr/uk/vi/v.v.). |
| text | string | Có | Đoạn văn bản cần chuyển đổi thành giọng nói. Độ giới hạn mỗi yêu cầu: 500 ký tự (nặc danh), 5. 000 (tài khoản miễn phí), 1. 000. 000 (giá trả). Các ký tự nhập dài sẽ được tự động chia nhỏ bên máy chủ. |
| voice | string | Có | ID giọng nói (dùng /v1/voices/ để liệt kê giọng nói có sẵn) |
| format | string | Không. | Định dạng xuất: mp3 (mặc định), wav, flac, ogg |
| speed | float | Không. | Bộ nhân tốc độ nói. Mặc định: 1.0. Khoảng: 0.5 đến 2.0 |
| language | string | Không. | Mã ngôn ngữ (ví dụ, en, es). Tự động phát hiện nếu bỏ qua. |
| instructions | string | Không. | Điều khiển / giao hàng dấu hiệu (≤500 ký tự). ví dụ: \ |
| pronunciations | object | array | Không. | Từ bỏ phát âm theo yêu cầu. Hoặc {\ |
| stream | boolean | Không. | Bật đáp ứng dòng. Mặc định: false |
Yêu cầu ví dụ
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
Thẻ SSML
Lấy số, ngày, tiền tệ, số điện thoại và chữ viết tắt trong Dạng thức ngày mặc định là 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
Tìm hiểu chúng Đầu vào Được nói như cardinal1234one thousand two hundred thirty-four ordinal21twenty-first date1999-12-31December thirty-first, nineteen ninety-nine 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 cho tiếng Anh và dmy ở nơi khác; thay thế bằng 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."
}Phản hồi
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.Full example
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.
Từ nói sang văn bảnName
Phiên âm âm thanh thành văn bản. Hỗ trợ 99 ngôn ngữ với tự động phát hiện.
Cơ thể yêu cầu (multipart/form-data)
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| file | file | Có | Tập tin âm thanh (MP3, WAV, FLAC, OGG, M4A, MP4, WebM). Tối đa 100MB. |
| model | string | Không. | Mô hình STT: whisper (mặc định), faster-whisper, sensevoice |
| language | string | Không. | Mã ngôn ngữ. auto cho tự động phát hiện (mặc định). |
| timestamps | boolean | Không. | Gồm dấu thời gian cấp từ. Mặc định: false |
| diarize | boolean | Không. | Bật diarization loa. Mặc định: false |
Phản hồi
{
"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"
}
]
}
Bản sao giọng
Tạo giọng nói bằng giọng nhân bản. Tải lên âm thanh và văn bản tham khảo.
Cơ thể yêu cầu (multipart/form-data)
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| reference_audio | file | Có | Âm thanh giọng nói tham khảo (khuyến cáo 10-30 giây). Hơn 20MB. |
| text | string | Có | Đoạn văn bản để nói bằng giọng nói sao chép. |
| model | string | Không. | Mô hình sao chép: chatterbox (mặc định), cosyvoice2, gpt-sovits |
| format | string | Không. | Định dạng xuất: mp3 (mặc định), wav, flac |
| language | string | Không. | Mã ngôn ngữ mục tiêu. Phải được hỗ trợ bởi mô hình đã chọn. |
Phản hồi
Trả về tập tin âm thanh dưới dạng dữ liệu nhị phân, giống như điểm kết thúc TTS.
Bộ thay đổi giọng nóiName
Chuyển đổi âm thanh thành giọng nói khác. Tải lên âm thanh nguồn và chọn giọng nói mục tiêu.
Cơ thể yêu cầu (multipart/form-data)
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| file | file | Có | Tập tin âm thanh nguồn (MP3, WAV, FLAC). Tối đa 50MB. |
| target_voice | string | Có | Định danh giọng nói mục tiêu để chuyển đổi (dùng /v1/voices/ để liệt kê giọng nói có sẵn) |
| model | string | Không. | Mô hình chuyển đổi giọng nói: openvoice (mặc định), knn-vc |
| format | string | Không. | Định dạng xuất: wav (mặc định), mp3, flac |
Yêu cầu ví dụ
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
Phản hồi
Trả về tập tin âm thanh đã chuyển đổi dưới dạng dữ liệu nhị phân.
Dịch Giọng nóiName
Dịch âm thanh nói từ ngôn ngữ này sang ngôn ngữ khác. Gộp lại giọng nói thành văn bản, dịch, và văn bản thành giọng nói trong một cuộc gọi duy nhất. Name
Cơ thể yêu cầu (multipart/form-data)
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| file | file | Có | Tập tin âm thanh nguồn bằng ngôn ngữ gốc. Tối đa 100MB. |
| target_language | string | Có | Mã ngôn ngữ mục tiêu (ví dụ, es, fr, de, ja) |
| voice | string | Không. | Giọng nói cho kết quả dịch. Tự động chọn nếu bỏ qua. |
| preserve_voice | boolean | Không. | Cố gắng giữ lại đặc điểm giọng nói của người nói gốc. Mặc định: false |
Phản hồi
{
"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
}
Giọng nói sang giọng nói
Thay đổi phong cách nói, cảm xúc, hay trình bày trong khi giữ nội dung. Có ích cho điều chỉnh giọng, nhịp điệu, và sự biểu cảm.
Cơ thể yêu cầu (multipart/form-data)
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| file | file | Có | Tập tin âm thanh nói nguồn. Tối đa 50MB. |
| voice | string | Có | Định danh giọng nói mục tiêu cho giọng nói xuất |
| model | string | Không. | Model: openvoice (mặc định), chatterbox |
| emotion | string | Không. | Cảm xúc mục tiêu: neutral, happy, sad, angry, excited |
| speed | float | Không. | Điều chỉnh tốc độ. Mặc định: 1.0. Khoảng: 0.5 đến 2.0 |
Phản hồi
Trả về tập tin âm thanh đã biến đổi thành dữ liệu nhị phân.
Công cụ âm thanhName
Điểm kết thúc xử lý âm thanh để tăng cường, loại bỏ giọng nói, chia cắt thân, và nhiều hơn nữa.
Tăng chất lượng âm thanh: loại bỏ nhiễu, cải thiện độ rõ ràng, độ phân giải siêu cao.
| file file | Tập tin âm thanh cần tăng cường |
| denoise boolean | Bật xóa nhiễu (mặc định: đúng) |
| enhance_clarity boolean | Tăng độ rõ giọng nói (mặc định: đúng) |
| super_resolution boolean | Tăng chất lượng âm thanh (mặc định: sai) |
| strength integer | 1- 3 (nhẹ, trung bình, mạnh). Mặc định: 2 |
Tách giọng từ các nhạc cụ (giải phóng giọng) hoặc chia thành các thân.
| file file | Tập tin âm thanh cần tách |
| model string | demucs (mặc định) hoặc spleeter |
| stems integer | Số cành: 2, 4, 5, hoặc 6 (mặc định: 2) |
| format string | Định dạng xuất: wav, mp3, flac |
Gỡ bỏ tiếng vang và dội âm từ các bản ghi âm.
| file file | Tập tin âm thanh cần xử lý |
| type string | echo or reverb (default: both) |
| intensity integer | 1-5 (default: 3) |
Phân tích âm thanh để phát hiện nhạc nền, BPM, và dấu thời gian.
| file file | Tập tin âm thanh cần phân tích |
{
"key": "C",
"scale": "Major",
"bpm": 120.0,
"time_signature": "4/4",
"camelot": "8B",
"compatible_keys": ["C Major", "G Major", "F Major", "A Minor"]
}
Chuyển đổi âm thanh giữa các định dạng.
| file file | Tập tin âm thanh cần chuyển đổi |
| format string | Định dạng mục tiêu: mp3, wav, flac, ogg, m4a, aac |
| bitrate integer | Tốc độ bit xuất theo kbps: 64, 128, 192, 256, 320 |
| sample_rate integer | Tốc độ lấy mẫu: 22050, 44100, 48000 |
| channels string | mono hoặc stereo |
Thảo luận bằng giọng nói
Gửi âm thanh hoặc văn bản và nhận một phản hồi AI với giọng nói tổng hợp.
Cơ thể yêu cầu (multipart/form-data hoặc JSON)
| Tham số | Kiểu | Cần thiết | Mô tả |
|---|---|---|---|
| audio | file | Không.* | Đầu vào âm thanh (cần audio hoặc text) |
| text | string | Không.* | Nhập văn bản (cần audio hoặc text) |
| voice | string | Không. | Giọng nói cho phản hồi AI. Mặc định: af_bella |
| tts_model | string | Không. | Mô hình TTS cho câu trả lời. Mặc định: kokoro |
| system_prompt | string | Không. | Lệnh hệ thống tùy chỉnh cho AI |
| conversation_id | string | Không. | Tiếp tục cuộc nói chuyện đã có |
Phản hồi
{
"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 theo lô
Gửi nhiều văn bản để tạo TTS song song. Có thể nhận một cuộc gọi webhook khi tất cả các công việc hoàn thành.
Tham số
| Tham số | Kiểu | Mô tả |
|---|---|---|
| texts | array | Array of objects: {text, model, voice}. Max 50 items. |
| webhook_url | string | Optional URL to POST results when batch completes. |
Phản hồi
{
"batch_id": "abc123",
"total": 3,
"completed": 0,
"status": "processing"
}
Thực hiện cuộc thăm dò với GET /v1/tts/batch/result/?batch_id=abc123
Tạo giọng nói
Đoán trước một giọng nói nhúng từ âm thanh tham chiếu. Dùng embed_id trả về trong các yêu cầu nhân bản giọng nói tiếp theo để tạo gần như ngay lập tức.
Tham số
| Tham số | Kiểu | Mô tả |
|---|---|---|
| file | file | Reference audio file (WAV, MP3, FLAC). |
| model | string | Cloning model (default: chatterbox). Supported: chatterbox, cosyvoice2, openvoice, gpt-sovits, spark, indextts2, qwen3-tts. |
Phản hồi
{
"embed_id": "emb_abc123",
"model": "chatterbox",
"duration_ms": 450
}
Kiểm tra sức khỏe
Kiểm tra trạng thái máy chủ GPU, các mô hình đã tải, và kích thước hàng đợi. Không cần xác thực. Bộ nhớ tạm trong 30 giây.
Phản hồi
{
"status": "online",
"latency_ms": 45,
"queue_size": 3,
"models_loaded": ["kokoro", "chatterbox", "cosyvoice2"]
}
Danh sách mẫu
Trả lại danh sách tất cả các mô hình có sẵn với khả năng của chúng.
Phản hồi
{
"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
}
]
}
Danh sách âm thanh
Trả lại danh sách tất cả giọng nói sẵn có, có thể lọc theo mẫu hoặc ngôn ngữ.
Tham số truy vấn
| Tham số | Kiểu | Mô tả |
|---|---|---|
| model | string | Lọc theo ID mô hình (ví dụ, kokoro) |
| language | string | Lọc theo mã ngôn ngữ (ví dụ, en) |
| gender | string | Lọc theo giới tính: male, female, neutral |
Phản hồi
{
"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
}
Bộ phụ đề (SRT / VTT) mới
Tạo phụ đề đồng bộ cho bất kỳ công việc TTS nào đã hoàn thành. Chạy điều chỉnh Whisper trên âm thanh và trả về SRT hoặc WebVTT. Kết quả được lưu trữ tạm trên đĩa, vì vậy một cuộc gọi thứ hai cho cùng một uuid là một đọc đĩa.
Tham số truy vấn
| Tham số | Cần thiết | Mô tả |
|---|---|---|
| uuid | Có | UUID công việc được trả lại bởi /v1/tts/ hoặc /v1/voice-clone/. |
| format | Không. | srt (mặc định) hoặc vtt. |
| download | Không. | 1 để gửi Content-Disposition: attachment để trình duyệt lưu chứ không hiển thị. |
| language | Không. | Gợi ý cho mô hình đối xứng (tự động phát hiện nếu bỏ qua). |
curl "https://api.tts.ai/v1/speech/subtitles/?uuid=$UUID&format=srt&download=1" -o subtitles.srt
Từ điển phát âm mới
Cho bộ máy TTS biết cách phát âm các từ cụ thể. Các mục đã lưu sẽ tự động áp dụng cho mỗi yêu cầu TTS bạn thực hiện. Giới hạn 200 mục trên mỗi tài khoản.
Cơ thể yêu cầu (POST)
| Tham số | Kiểu | Mô tả |
|---|---|---|
| word | string | Từ cần thay thế (ví dụ GIF, Anthropic). Từ-biên-tương ứng. |
| replacement | string | Cách đánh vần nó cho mô hình (ví dụ jiff, ann THROP ick). |
| language | string | Mã ISO tùy chọn. Trống = áp dụng cho tất cả ngôn ngữ. |
| case_sensitive | boolean | Mặc định false. Cùng chữ cái chính xác khi 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-..."
Bạn cũng có thể truyền các thay thế theo yêu cầu mà không cần lưu chúng — bao gồm pronunciations trên bất kỳ cuộc gọi /v1/tts/ nào như một đối tượng hoặc một ma trận (xem các tham số điểm cuối TTS).
Trình kể chuyện bài viết mới
Đặt một thẻ đơn lẻ trên bất kỳ trang bài viết nào và khách truy cập sẽ có một thanh đọc cố định nói về trang khi nhấn. Tự động phát hiện cơ thể bài viết, hỗ trợ giọng nói / mô hình / vị trí / màu nhấn tùy chỉnh.
<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>
Tùy chọn
| Tham số | Mô tả |
|---|---|
data-pk | Khóa có thể công bố (pk-tts-…). Các hạn chế miền được áp dụng thông qua trường allowed_domains của khóa. |
data-voice | ID giọng nói. Mặc định af_bella. |
data-model | Mã mô hình TTS. Mặc định kokoro. |
data-extract | auto (mặc định) — thử chọn mục article/main/.post-content/.entry-content, quay lại tập hợp đoạn văn dày nhất. Hoặc truyền bất kỳ chọn CSS nào để nhắm mục tiêu một yếu tố cụ thể. |
data-position | bottom (mặc định) hoặc top. |
data-color | Màu nhấn (bất kỳ màu CSS nào). Mặc định #e60000. |
data-min-chars / data-max-chars | Bỏ qua thanh nếu bài viết ngắn hơn số ký tự tối thiểu (mặc định là 200). Giảm nhập đến số ký tự tối đa (mặc định là 50. 000). |
Thẻ nút nghe
Bộ nhớ đệm kiểu nút trong dòng. Được hiển thị bên cạnh thẻ < code>< script code> và chơi một đoạn ngắn được kích hoạt bằng nút. Hình dạng khác với Trình kể bài trên (tự động bơm một thanh trải qua trang và kể toàn bộ bài viết).
<script src="https://tts.ai/widget.js"
data-voice="af_bella"
data-model="kokoro"
data-style="full"
data-theme="light"></script>
Giọng nói đã lưu (Công nhân bền)
Tải lên một âm thanh tham chiếu một lần, lấy lại một voice_id bền, sau đó tham chiếu id đó trong yêu cầu TTS thay vì tải lại âm thanh mỗi lần gọi. Tốt nhất cho các tích hợp có số lượng lớn.
Tải lên giọng nói
POST
https://tts.ai/api/v1/user-voices/
Cần xác thực
Các trường: file (được yêu cầu, âm thanh 5-30s), name (được yêu cầu), language (có thể chọn, mặc định en), model (có thể chọn — tự động chọn cosyvoice2 cho zh/ja/ko nếu không là openvoice), consent_confirmed (được yêu cầu, bất kỳ giá trị đúng nào).
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"
}
Dùng giọng nói đã lưu trong TTS
POST to /api/v1/tts/ (NOTE: web VPS host, not api.tts.ai) with user_voice_id. Chúng tôi tải âm thanh và đường dẫn lưu trữ của bạn vào đường ống nhân bản.
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.
Danh sách / Xoá
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
Bảo quản / kích hoạt lại (miễn phí)
Những giọng nói lưu trữ vẫn còn trong tài khoản của bạn nhưng không thể dùng trong TTS. Có ích cho người dùng cuối ngủ nên danh sách của bạn luôn sạch sẽ.
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/archive/
POST https://tts.ai/api/v1/user-voices/uv_a1b2c3d4e5f6/reactivate/
Ví dụ mã
Văn bản sang Giọng nóiComment
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')}")
Từ nói sang văn bảnName
# 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"])
Bản sao giọng
# 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)
Văn bản sang Giọng nóiComment
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();
Từ nói sang văn bảnName
// 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);
Văn bản sang Giọng nóiComment
# 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
Từ nói sang văn bảnName
# 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"
Bản sao giọng
# 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
Tăng cường âm thanh
# 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
Mã lỗi
Tất cả lỗi trả về một đáp ứng JSON với error Đường.
{
"error": {
"code": "insufficient_credits",
"message": "You do not have enough characters for this request.",
"characters_required": 4000,
"characters_available": 2000
}
}
| Tình trạng HTTP | Mã lỗi | Mô tả |
|---|---|---|
| 400 | bad_request |
Tham số yêu cầu không hợp lệ. Kiểm tra thông điệp lỗi để biết chi tiết. |
| 401 | unauthorized |
Chìa khóa API thiếu hoặc không hợp lệ. |
| 402 | insufficient_credits |
Không đủ ký tự. Mua thêm tại / pricing /. |
| 403 | forbidden |
Bạn không có quyền truy cập tài nguyên này (ví dụ như khảo sát công việc của người dùng khác). Truy cập API được bao gồm trong mọi kế hoạch. |
| 404 | not_found |
Không tìm thấy mẫu hay giọng nói. |
| 413 | file_too_large |
Tập tin đã tải lên vượt quá giới hạn kích thước. |
| 429 | rate_limited |
Quá nhiều yêu cầu. Kiểm tra đầu mục giới hạn tốc độ. |
| 500 | internal_error |
Lỗi máy phục vụ. Thử lại sau. |
| 503 | model_loading |
Mô hình đang tải. Thử lại sau vài giây. |
Webhooks
Đối với các nhiệm vụ chạy lâu (splitting stem, batch TTS), bạn có thể cung cấp một tham số webhook_url. Khi nhiệm vụ hoàn thành, chúng tôi sẽ POST kết quả đến URL của bạn.
{
"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"
}
Sẵn sàng xây dựng chưa?
Lấy chìa khóa API của bạn và bắt đầu tích hợp TTS.ai vào ứng dụng của bạn.