Dành cho lập trình viên

API tạo giọng đọc

Nối kho 68 giọng AI của Tân Seven Voice vào phần mềm của bạn: tool ghép video, n8n, Make, chatbot, hay bất cứ thứ gì gọi được HTTP. Trừ ký tự thẳng từ tài khoản bạn đang dùng trên web.

Địa chỉ gốc (base URL)
https://idnfafxgrbabypfokgve.supabase.co/functions/v1/api

1. Lấy khoá API

Đăng nhập trang tài khoản → tab Tài khoản → mục 🔌 Khoá API cho lập trình viên → bấm Tạo khoá mới.

Khoá có dạng tsv_xxxxxxxx…chỉ hiện đúng một lần — hãy lưu lại ngay. Mỗi tài khoản giữ tối đa 5 khoá; xoá khoá cũ bất cứ lúc nào.

⚠️ Khoá API = tiền của bạn. Đừng đặt khoá trong code chạy ở trình duyệt hay đẩy lên GitHub công khai — ai cầm được khoá là tiêu được ký tự của bạn. Hãy để khoá ở phía máy chủ hoặc trong biến môi trường.

Mọi lệnh gọi đều gửi kèm khoá ở header:

Authorization: Bearer tsv_xxxxxxxx…

Hoặc dùng header x-api-key: tsv_xxxxxxxx… — cái nào cũng được.

2. Tạo giọng đọc — POST /tts

Ví dụ nhanh bằng curl, lưu thẳng ra file MP3:

curl -X POST "https://idnfafxgrbabypfokgve.supabase.co/functions/v1/api/tts" \
  -H "Authorization: Bearer tsv_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"text":"Xin chào, đây là Tân Seven Voice.","voice":"Minh Đức","lang":"vi","response":"binary"}' \
  --output giong.mp3

Các tham số

TênBắt buộcÝ nghĩa
textNội dung cần đọc. Tối đa 200.000 ký tự mỗi lần gọi. Tiếng Việt: số, ngày tháng, giờ, tiền được đọc thành chữ tự động.
voiceKhôngTên giọng, VD "Minh Đức". Mặc định Minh Đức. Xem đủ 68 giọng ở mục 3.
langKhôngMã ngôn ngữ của giọng: vi, en, zh, ja, e (Tây Ban Nha), p (Bồ), f (Pháp), i (Ý), h (Hindi). Mặc định vi.
speedKhôngTốc độ đọc, 0.5 – 1.5. Mặc định 1.0.
formatKhôngmp3 (mặc định) hoặc wav.
responseKhôngbinary = trả thẳng file audio. Bỏ trống = trả JSON có audio_base64.
voice_idKhôngDùng giọng nhân bản của chính bạn (lấy id ở tab Nhân bản giọng nói). Có tham số này thì voice bị bỏ qua.
styleKhôngChỉ cho giọng nhân bản — cảm xúc đọc, VD "📖 Kể chuyện".

Kết quả trả về (mặc định JSON)

{
  "audio_base64": "SUQzBAAAAAAA…",
  "format": "mp3",
  "cost": 41,
  "credits": 9764,
  "seconds": 3.85,
  "voice": "Minh Đức"
}

Nếu gửi "response":"binary", kết quả là file audio thô; số liệu nằm ở header X-CostX-Credits-Remaining.

3. Danh sách giọng — GET /voices

Trả về đủ 68 giọng kèm ngôn ngữ, thể loại, giới tính/vùng miền. Không tốn ký tự, không cần khoá.

curl "https://idnfafxgrbabypfokgve.supabase.co/functions/v1/api/voices"
{
  "total": 68,
  "voices": [
    { "name": "Minh Đức",  "lang": "vi", "genre": "📰 Tin tức",   "info": "Nam · Bắc" },
    { "name": "Ngọc Linh", "lang": "vi", "genre": "📖 Kể chuyện", "info": "Nữ · Bắc" },
    …
  ]
}

4. Xem ký tự còn lại — GET /me

curl "https://idnfafxgrbabypfokgve.supabase.co/functions/v1/api/me" \
  -H "Authorization: Bearer tsv_xxxxxxxx"
{ "credits": 9764, "name": "Tân" }

5. Ví dụ Python

import requests

API  = "https://idnfafxgrbabypfokgve.supabase.co/functions/v1/api"
KEY  = "tsv_xxxxxxxx"          # để trong biến môi trường, đừng viết thẳng vào code

r = requests.post(f"{API}/tts",
    headers={"Authorization": f"Bearer {KEY}"},
    json={
        "text": "Chào mừng bạn đến với kênh của Tân Seven.",
        "voice": "Ngọc Linh",
        "lang": "vi",
        "speed": 1.0,
        "response": "binary",
    }, timeout=300)

r.raise_for_status()
open("giong.mp3", "wb").write(r.content)
print("Còn lại:", r.headers.get("X-Credits-Remaining"), "ký tự")

Văn bản dài

Một lần gọi nhận tối đa 200.000 ký tự, nhưng bài càng dài thì càng lâu và dễ hết thời gian chờ. Cách chạy êm nhất: cắt thành đoạn ~1.000 ký tự, gọi 2–3 đoạn song song rồi ghép file lại — giống hệt cách trang web đang làm.

6. Mã lỗi

NghĩaNên làm gì
401Thiếu khoá, khoá sai hoặc đã bị xoáKiểm tra lại header Authorization
402Hết ký tự trong tài khoảnNạp thêm ở trang tài khoản
429Gọi quá nhanh (giới hạn 60 lần/phút · 600 lần/giờ · 2.000 lần/ngày) Chờ số giây ghi ở retry_after rồi gọi lại
202Máy chủ đang khởi động (khoảng 1 phút đầu) Chờ ~60 giây rồi gọi lại — không bị trừ ký tự
502Máy chủ giọng lỗiGọi lại; ký tự đã được hoàn tự động
✅ Bạn chỉ bị trừ ký tự khi audio được tạo thành công. Mọi trường hợp lỗi hay máy chủ đang khởi động đều được hoàn lại tự động.

7. Tính phí