Chú ý: Router này mount tại /voice
(tuỳ app), vì vậy full path là
$BASE/create
, $BASE/status/parts/by-request
, v.v.
Flow: (1) POST $BASE/create
hoặc POST $BASE/srt
→
(2) Poll $BASE/status/parts/by-request?requestKey=...
để lấy các audioUrl
dần →
(3) Poll $BASE/status/by-request?requestKey=...
để lấy file cuối sau merge.
Body | Bắt buộc | Mô tả |
---|---|---|
text | orgHtml | org | Có | Nội dung cần đọc (HTML hợp lệ theo sanitize). |
voice | Không | Voice ID (số), mặc định 0 . |
speed | Không | Tốc độ đọc (float), mặc định 1.0 . |
type | Không | paid | free (đăng nhập — chỉ cắt preview, không trừ ký tự) | guest. |
curl -X POST "$BASE/create?token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{
"text": "Xin chào mọi người!
Đây là bản demo.
",
"voice": 402,
"speed": 1,
"type": "paid"
}'
{}
// Response
{
"success": true,
"requestKey": "sha256(text+voice+speed)",
"status": "processing",
"parts": 1
}
Query | Bắt buộc | Mô tả |
---|---|---|
requestKey | Có | Key từ bước tạo. |
token | Khuyến nghị | API key (query hoặc header). |
curl "$BASE/status/parts/by-request?token=$TOKEN&requestKey=YOUR_KEY"
{}
// processing
{ "success":true, "requestKey":"...", "status":"processing", "data":[ "https://.../part0.mp3" ] }
// done
{ "success":true, "requestKey":"...", "status":"done", "data":[ "https://.../part0.mp3","https://.../part1.mp3" ] }
// error
{ "success":false, "requestKey":"...", "status":"error", "data":[...], "message":"..." }
Query | Bắt buộc | Mô tả |
---|---|---|
requestKey | Có | Key từ bước tạo. |
token | Khuyến nghị | API key. |
curl "$BASE/status/by-request?token=$TOKEN&requestKey=YOUR_KEY"
{}
// processing
{ "success": true, "requestKey":"...", "status":"processing" }
// done
{ "success": true, "requestKey":"...", "status":"done", "audioUrl":"https://cdn.../final_req_xxx.mp3" }
// error
{ "success": false, "requestKey":"...", "status":"error", "message":"..." }
Query | Bắt buộc | Mô tả |
---|---|---|
projectId | Có | Project ID khi tạo job. |
sessionId | Có | Session ID khi tạo job. |
sceneId | Không | Nếu cần. |
token | Khuyến nghị | API key. |
curl "$BASE/status?token=$TOKEN&projectId=P123&sessionId=S456"
curl "$BASE/status/parts?token=$TOKEN&projectId=P123&sessionId=S456"
Body | Bắt buộc | Mô tả |
---|---|---|
srt (text) hoặc file (multipart) | Có | Nội dung phụ đề SRT. |
voice | Không | Mặc định 0 . |
speed | Không | Mặc định 1.0 . |
type | Không | paid | free . |
curl -X POST "$BASE/srt?token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{
"voice": 402,
"speed": 1,
"type": "paid",
"srt": "1\n00:00:00,000 --> 00:00:02,000\nXin chào mọi người!\n\n2\n00:00:03,500 --> 00:00:05,000\nRất vui được gặp bạn."
}'
curl -X POST "$BASE/srt?token=$TOKEN" \
-H "Accept: application/json" \
-F "voice=0" \
-F "speed=1" \
-F "type=paid" \
-F "file=@/path/to/subtitle.srt;type=text/plain"
{}
Body | Bắt buộc | Mô tả |
---|---|---|
token | Có | API key (cũng có thể gửi qua header). |
curl -X POST "$BASE/user" \
-H "Content-Type: application/json" \
-d '{ "token": "$TOKEN" }'
{}
Query | Bắt buộc | Mô tả |
---|---|---|
token | Có | API key (hoặc qua header X-API-Key /Authorization ). |
curl "$BASE/user?token=$TOKEN"
{}
Query | Bắt buộc | Mô tả |
---|---|---|
token | Có | API key (query hoặc header). |
language | Không | VD: vi-VN , en-US |
gender | Không | male | female |
type | Không | VD: google , studio , ... |
curl "$BASE/voices?token=$TOKEN&language=vi-VN&gender=female&type=google"
{}
<p>
, <br>
, <div data-wordtype="pause">x</div>
; <break time="Xs"/>
tự đổi sang pause-div.tts_number
theo ký tự khi tạo job thành công; hoàn khi job/merge lỗi.start_ms/end_ms
mỗi cue, chèn im lặng cho gap, có time-stretch trong ngưỡng.