API công khai NTSWebAI
Gọi dịch vụ text-to-speech, speech-to-text và dịch phụ đề từ ứng dụng của bạn bằng API key.
https://app.ntstool.com/api/v1/public-apiXác thực
Mọi request đính kèm header Authorization: Bearer <khóa_API>. Lấy/tạo khóa trong trang Tài khoản (cần xác minh SĐT + đã nạp credit hoặc gói trả phí).
Header bắt buộc
Authorization: Bearer <khóa_API_của_bạn>Lấy số dư credit
/public-api/balanceTrả về số dư credit hiện tại (base_balance + daily_balance), credit miễn phí trong ngày, gói trả phí đang còn hạn và hạng VIP.
Response mẫu
{
"success": true,
"data": {
"credit_balance": 105000,
"base_balance": 100000,
"daily_balance": 5000,
"free_daily_credit": 5000,
"free_chars_used": 0,
"free_daily_char_limit": 1000000,
"plans": [
{
"plan_id": "pro",
"name": "Chuyên nghiệp",
"daily_allowance": 100000,
"expires_at": "2026-07-23 00:00:00"
}
],
"vip": {
"tier": 1,
"name": "Đồng"
}
}
}Mã ví dụ
curl --request GET \
--url https://app.ntstool.com/api/v1/public-api/balance \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Danh sách giọng
/public-api/voicesDanh sách giọng đọc (phân trang + lọc). Mỗi giọng có `voice_id` là chuỗi opaque, dùng trực tiếp cho `voices[].voice_id` ở endpoint tạo TTS.
| Tên | Bắt buộc | Kiểu | Mô tả | Ví dụ |
|---|---|---|---|---|
| languagequery | — | string | Mã ngôn ngữ BCP-47 (vd `vi-VN`, `en-US`). | vi-VN |
| genderquery | — | string | `male` hoặc `female`. | |
| tierquery | — | string | `free` / `standard` / `professional` / `professional_clone`. | |
| searchquery | — | string | Tìm theo tên hoặc mô tả giọng. | |
| sortquery | — | string | `popular` (mặc định) / `least` / `name`. | popular |
| offsetquery | — | number | Bỏ qua N kết quả đầu. | 0 |
| limitquery | — | number | Số kết quả tối đa (mặc định 20). | 20 |
Response mẫu
{
"success": true,
"data": [
{
"voice_id": "6748abc1234567890def0123",
"name": "Hoài My",
"language": "vi-VN",
"gender": "female",
"tier": "standard",
"price_base": 1
}
],
"total": 100,
"has_more": true
}Mã ví dụ
curl --request GET \
--url 'https://app.ntstool.com/api/v1/public-api/voices?language=vi-VN&sort=popular&offset=0&limit=20' \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Tạo dự án TTS
/public-api/ttsTạo dự án text-to-speech rồi START luôn (giới hạn luồng y hệt giao diện web). Trả về `project_id` + `req_id` để theo dõi. Dự án sẽ hiện trên trang `/tts` của tài khoản.
Body (JSON)
| Tên | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|
| name | ● | string | Tên dự án (hiển thị trên web). |
| source_type | — | string | `text` | `srt` | `vtt` | `ass` (mặc định `text`). |
| has_timing | — | boolean | `true` nếu có dấu thời gian (SRT/VTT/ASS). |
| lines | ● | array | Mảng dòng: `[{ text, vocal_no }]` — `vocal_no` map sang `voices`. |
| voices | ● | array | Mảng giọng: `[{ vocal_no, voice_id }]` — `voice_id` lấy từ `/voices`. |
Response mẫu
{
"success": true,
"data": {
"project_id": "abc123def456789...",
"req_id": "fedcba987654321...",
"status": "pending",
"cost": 30
}
}Mã ví dụ
curl --request POST \
--url https://app.ntstool.com/api/v1/public-api/tts \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"name": "My TTS project",
"source_type": "text",
"has_timing": false,
"lines": [
{
"text": "Xin chào, đây là bản test của API.",
"vocal_no": 1
}
],
"voices": [
{
"vocal_no": 1,
"voice_id": "6748abc1234567890def0123"
}
]
}'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Lấy kết quả
/public-api/tts/{project_id}Poll trạng thái dự án. Khi `status` = `done`, `audio_url` là URL file âm thanh (presigned 48 giờ); `srt_url` là file phụ đề (nếu có).
| Tên | Bắt buộc | Kiểu | Mô tả | Ví dụ |
|---|---|---|---|---|
| project_idpath | ● | string | ID dự án (trả về từ `POST /tts`). | abc123def456789... |
Response mẫu
{
"success": true,
"data": {
"project_id": "abc123def456789...",
"name": "My TTS project",
"status": "done",
"progress": 100,
"audio_url": "https://cdn.example.com/tts/user/abc.mp3?...",
"srt_url": "",
"queue_position": null,
"created_at": "2026-06-23 10:00:00",
"updated_at": "2026-06-23 10:02:30"
}
}Mã ví dụ
curl --request GET \
--url https://app.ntstool.com/api/v1/public-api/tts/abc123def456789... \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Danh sách model STT
/public-api/stt/modelsDanh sách model nhận dạng giọng nói (Speech-to-Text). Mỗi model có `model_id` (dùng khi tạo dự án) và `credit_per_minute` (tỷ lệ trừ credit theo số phút audio).
Response mẫu
{
"success": true,
"data": [
{
"model_id": "whisper-standard",
"name": "Whisper Standard",
"credit_per_minute": 100,
"description": "Nhận dạng giọng nói đa ngôn ngữ, có timestamp theo từ."
}
]
}Mã ví dụ
curl --request GET \
--url https://app.ntstool.com/api/v1/public-api/stt/models \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Tạo dự án STT (nhận dạng)
/public-api/stt/transcribeTạo dự án nhận dạng giọng nói rồi START luôn (giới hạn 2 luồng như web). Gửi dạng `multipart/form-data` hoặc `application/x-www-form-urlencoded`: hoặc `url_file` (link video/audio công khai) HOẶC tải lên `file` (multipart). Trả `project_id` + `req_id` để poll. Trừ credit theo PHÚT khi worker xử lý xong. Dự án hiện trên trang `/stt` của tài khoản.
Body (JSON)
| Tên | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|
| model_id | ● | string | ID model STT (lấy từ `/stt/models`). |
| url_file | — | string | Link video/audio công khai (YouTube/TikTok/link file trực tiếp). Bỏ trống nếu tải `file`. |
| file | — | string | File video/audio (multipart/form-data). Dùng khi KHÔNG có `url_file`. |
| language | — | string | Mã ngôn ngữ nói (vd `vi`, `en`). Bỏ trống = tự động nhận diện. |
| name | — | string | Tên dự án (hiển thị trên /stt). |
Response mẫu
{
"success": true,
"data": {
"project_id": "abc123def456789...",
"req_id": "fedcba987654321...",
"status": "pending"
}
}Mã ví dụ
curl --request POST \
--url https://app.ntstool.com/api/v1/public-api/stt/transcribe \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data model_id=whisper-standard \
--data url_file=https://example.com/audio.mp3 \
--data language= \
--data 'name=My transcription'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Lấy kết quả STT
/public-api/stt/{project_id}Poll trạng thái dự án STT. Khi `status` = `done`, `transcript_url` là URL file JSON kết quả (chuẩn Whisper: `segments` + `words`, presigned 48 giờ). Tải URL đó để lấy nội dung phụ đề; xuất txt/srt/vtt/ass tự thực hiện phía bạn.
| Tên | Bắt buộc | Kiểu | Mô tả | Ví dụ |
|---|---|---|---|---|
| project_idpath | ● | string | ID dự án (trả về từ `POST /stt/transcribe`). | abc123def456789... |
Response mẫu
{
"success": true,
"data": {
"project_id": "abc123def456789...",
"name": "My transcription",
"status": "done",
"progress": 100,
"duration_seconds": 184.5,
"segment_count": 42,
"language": "vi",
"transcript_url": "https://cdn.example.com/stt/user/abc.json?...",
"queue_position": null,
"created_at": "2026-06-26 10:00:00",
"updated_at": "2026-06-26 10:03:10"
}
}Mã ví dụ
curl --request GET \
--url https://app.ntstool.com/api/v1/public-api/stt/abc123def456789... \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Danh sách model dịch
/public-api/translate/modelsDanh sách model dịch phụ đề + danh sách ngôn ngữ đích hỗ trợ. Mỗi model có `model_id` (dùng khi tạo dự án) và `price_base` (tỷ lệ trừ credit / ký tự bản dịch). `languages` là tên ngôn ngữ đích hợp lệ cho `target_lang`.
Response mẫu
{
"success": true,
"data": {
"models": [
{
"model_id": "context-10",
"name": "Ngữ cảnh phim 10",
"price_base": 10,
"description": "Dịch theo ngữ cảnh, chất lượng phim."
}
],
"languages": [
"Vietnamese",
"English",
"Japanese",
"Korean"
]
}
}Mã ví dụ
curl --request GET \
--url https://app.ntstool.com/api/v1/public-api/translate/models \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Tạo dự án dịch phụ đề
/public-api/translate/subtitleGửi NỘI DUNG phụ đề định dạng SRT (`content`) rồi START luôn (giới hạn luồng + hàng đợi như web). Trả `project_id` + `req_id` để poll. Trừ credit theo số ký tự BẢN DỊCH khi xong. Dự án hiện trên trang `/translate` của tài khoản. `detect_mode`: `none` (không nhận dạng người nói) / `gender` (Nam–Nữ) / `multi` (nhiều người nói).
Body (JSON)
| Tên | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|
| content | ● | string | Nội dung phụ đề SRT (raw text — gồm số thứ tự, mốc thời gian, văn bản). |
| target_lang | ● | string | Tên ngôn ngữ đích (PHẢI thuộc `languages` của `/translate/models`). |
| model_id | ● | string | ID model dịch (lấy từ `/translate/models`). |
| source_lang | — | string | Tên ngôn ngữ nguồn. Bỏ trống = để engine tự nhận. |
| detect_mode | — | string | `none` (mặc định) / `gender` / `multi` — nhận dạng người nói. |
| name | — | string | Tên dự án (hiển thị trên /translate). |
Response mẫu
{
"success": true,
"data": {
"project_id": "abc123def456789...",
"req_id": "fedcba987654321...",
"status": "pending"
}
}Mã ví dụ
curl --request POST \
--url https://app.ntstool.com/api/v1/public-api/translate/subtitle \
--header 'Authorization: Bearer <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"content": "1\n00:00:01,000 --> 00:00:02,500\nHello world\n\n2\n00:00:03,000 --> 00:00:04,000\nHow are you?",
"target_lang": "Vietnamese",
"model_id": "context-10",
"source_lang": "English",
"detect_mode": "none",
"name": "My translation"
}'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.Lấy kết quả dịch
/public-api/translate/{project_id}Poll trạng thái dự án dịch. Mảng `lines` cập nhật dần: mỗi dòng có `text` (gốc), `translate_text` (bản dịch), `vocal` (số người nói khi `detect_mode` ≠ `none`). Khi `status` = `done` là dịch xong; bạn tự dựng SRT/VTT/ASS/JSON từ `lines`.
| Tên | Bắt buộc | Kiểu | Mô tả | Ví dụ |
|---|---|---|---|---|
| project_idpath | ● | string | ID dự án (trả về từ `POST /translate/subtitle`). | abc123def456789... |
Response mẫu
{
"success": true,
"data": {
"project_id": "abc123def456789...",
"name": "My translation",
"status": "done",
"progress": 100,
"source_lang": "English",
"target_lang": "Vietnamese",
"detect_mode": "none",
"segment_count": 2,
"translated_lines": 2,
"lines": [
{
"line_no": 1,
"start_time": "00:00:01,000",
"end_time": "00:00:02,500",
"text": "Hello world",
"translate_text": "Xin chào thế giới",
"vocal": 0
}
],
"queue_position": null,
"created_at": "2026-06-29 10:00:00",
"updated_at": "2026-06-29 10:01:20"
}
}Mã ví dụ
curl --request GET \
--url https://app.ntstool.com/api/v1/public-api/translate/abc123def456789... \
--header 'Authorization: Bearer <YOUR_API_KEY>'Snippet hiển thị payload mẫu — chỉnh giá trị trong code sau khi sao chép. Bạn có thể dùng panel "Thử ngay" bên dưới để gửi request với dữ liệu tùy ý.
Thử ngay
Gọi API thật bằng khóa của bạn.
Chưa có kết quả. Bấm “Gửi” để thử.