TTSForFree — Tài liệu lập trình viên
REST API • Webhooks • SignalR realtime • Rate limits • Best practices
Tổng quan
TTSForFree cung cấp pipeline Text‑to‑Speech bất đồng bộ, độ trễ thấp. Ứng dụng của bạn tạo job qua REST, chúng tôi đưa vào hàng đợi (RabbitMQ), xử lý bằng Python worker và thông báo hoàn tất qua SignalR hoặc Webhooks. Bạn cũng có thể tự kiểm tra qua endpoint trạng thái.
- 70+ ngôn ngữ • 1.500+ giọng (accent & style)
- Mô hình job async: 200 SUCCESS → cập nhật realtime → tải audio
- Định dạng: mp3, wav(sẽ bổ sung)
- Miễn phí cho mục đích cá nhân; có gói thương mại/API
Xác thực
Dùng API key trong header X-API-Key. Với tích hợp chỉ chạy trên trình duyệt, nên proxy qua server để bảo mật.
curl -X GET https://ttsforfree.com/api/health -H "X-API-Key: YOUR_API_KEY"Danh sách Ngôn ngữ & Giọng
Lấy danh sách ngôn ngữ
GET https://ttsforfree.com/api/common/getListLanguage
// Response (rút gọn)
{
"Id": 1,
"TotalRows": 74,
"Message": null,
"Data": [
{
"Id": 1,
"Code": "af",
"Name": "Afrikaans",
"Description": null
}
]
}Lấy danh sách giọng hỗ trợ
GET https://ttsforfree.com/api/common/getListVoice
// Response (truncated)
{
"Id": 1,
"TotalRows": 1820,
"Message": null,
"Data": [
{
"VoiceName": "v1:YPj2X6j04RZcJdGzo-CC0GBpkJ985PD5X_VWU_nJkNzppGtbnxJL-dU_hglv",
"LanguageCode": "en",
"LanguageName": "English",
"FreindlyName": "Brian Online (Natural) - English (United States)",
"Gender": "Male",
"CountryName": "United States",
"VoicePersonalities": "Approachable, Casual, Sincere",
"ReviewAudio": "/20251018/120c601e-d775-4c14-9bbf-7c7750de8945/120c601e-d775-4c14-9bbf-7c7750de8945.mp3",
"TotalRequests": 701,
"PercentInLang": 0,
"IsAllow": true,
"MustUpgrade": false
}
]
}Lấy thông tin cấu hình
GET https://ttsforfree.com/api/common/GetConfigMaxLength
// Response (truncated)
{
"Id": 1,
"TotalRows": 0,
"Message": null,
"Data": 5000
}Tạo job TTS
Gửi text + tham số giọng. API hoạt động bất đồng bộ và trả về jobId ngay.
POST https://ttsforfree.com/api/tts/createby
Content-Type: application/json
X-API-Key: YOUR_API_KEY
{
"Texts": "hello everybody",
"Voice": "v1:YPj2X6j04RZcJdGzo-CC0GBpkJ985PD5X_VWU_nJkNzppGtbnxJL-dU_hglv",
"Pitch": 0,
"ConnectionId": "",
"CallbackUrl":"" //option
}
// 200 Success
{
"Id" : 1,
"Message" : "Success (cache hit)",
"Data" : "abc.mp3",
"Status": "PENDING" //SUCCESS, ERROR
}Lấy tệp âm thanh
Lấy tệp âm thanh nếu trạng thái trả về thành công
GET https://ttsforfree.com/api/tts/StreamFile?filename=abc.mp3Polly để lấy trạng thái job
Gọi API này mỗi 5s để kiểm tra trạng thái job
GET https://ttsforfree.com/api/tts/status/{jobId}
// 200 OK
{
Id = 23,
Status = "SUCCESS", //SUCCESS or ERROR
FilePath = fileName, // abc123.mp3
Message: ""
}Webhooks
Có thể truyền callbackUrl khi tạo job. Hệ thống sẽ POST payload kèm chữ ký khi job hoàn tất.
POST https://your.app/webhooks/tts
Content-Type: application/json
X-TTS-Signature: sha256=... // HMAC của body với webhook secret của bạn
{
Id = 23,
Status = "SUCCESS", //SUCCESS or ERROR
FilePath = fileName, // abc123.mp3
Message: ""
}Hãy verify chữ ký phía server, rồi phản hồi 200 OK.
Giới hạn & hạn ngạch
- Mặc định: 2.000 ký tự/yêu cầu, 30 yêu cầu/ngày (free tier)
- Bảo vệ burst: token bucket, 60 yêu cầu / 5 phút mỗi IP
- Liên hệ để nâng hạn mức / mục đích thương mại
Mã lỗi
400 Bad Request // thiếu text hoặc tham số không hợp lệ
401 Unauthorized // thiếu/sai API key
403 Forbidden // vượt hạn ngạch, hoặc hành động không được phép
404 Not Found // không tìm thấy jobId
409 Conflict // job trùng (vi phạm idempotency)
429 Too Many // bị giới hạn tốc độ
500 Server Error // lỗi tạm thời, hãy retry với backoffThực hành tốt
- Khử trùng lặp bằng hash = sha256(text|voice|rate|volumn|pitch) để tận dụng cache.
- Ưu tiên Webhooks; tránh polling dày đặc.
- Triển khai exponential backoff khi gặp 429/5xx.
- Chia đoạn văn bản rất dài thành scene/paragraph để tăng thông lượng.
Giấy phép & Điều khoản
Gói miễn phí chỉ dành cho mục đích cá nhân/phi thương mại. Mục đích thương mại và phân phối lại API cần giấy phép riêng. Xem Điều khoản dịch vụ và Chính sách quyền riêng tư, hoặc liên hệ thai00436@gmail.com.