API nhân bản giọng nói và tạo nhạc với giọng chỉ định (không khuyến nghị)

Cập nhật 2026-09-18 · nhóm Suno-API

⛔ Chuỗi cũ, không khuyến nghị cho tích hợp mới. Trang này mô tả chuỗi persona ban đầu (voice_task_id / generate-with-voice). Nó vẫn hoạt động, nhưng không còn được khuyến nghị cho khách hàng; menu bên trái đánh dấu là "không khuyến nghị".

Với tích hợp mới, hãy dùng 【Khuyến nghị】 API hồ sơ giọng nói: tạo hồ sơ giọng nói từ một mẫu giọng (POST /api/music/voice-profile/create), rồi dùng nó để cover một bài hát chỉ định hoặc hát một bài mới. Hồ sơ giọng nói là tài nguyên hạng nhất: có thể liệt kê, truy vấn và xóa, và audio gốc được giữ vĩnh viễn.

Nếu sản phẩm của bạn cần vòng lặp đầy đủ "tạo giọng → dùng lại lâu dài → cover", hãy ưu tiên chuỗi mới.

Lưu ý quan trọng: giọng đã nhân bản có thể hết hạn.

voice_id / voice_task_id do nhân bản giọng nói tạo ra không phải tài nguyên dùng được mãi: chúng có thể ngừng hoạt động do thời hạn hiệu lực, trạng thái tài khoản hoặc thay đổi trạng thái giọng. Bên tích hợp không được nhân bản một lần rồi dùng mãi ID giọng đã lưu trong bộ nhớ đệm cục bộ.

Cách làm được khuyến nghị:

  • Lưu voice_task_id, voice_id, is_available, updated_at và thời điểm tạo thành công gần nhất.
  • Trước mỗi lần tạo nhạc bằng giọng đã nhân bản, hãy gọi GET /api/voice/clone/tasks/{voice_task_id} hoặc POST /api/voice/clone/tasks/{voice_task_id}/check và xác nhận is_available=true.
  • Nếu endpoint báo giọng không dùng được, tác vụ không tồn tại hoặc trả về selected voice is not ready, hãy yêu cầu người dùng nhân bản lại hoặc chọn giọng khác đang dùng được.
  • Không hứa với người dùng cuối rằng giọng đã nhân bản là "tài sản vĩnh viễn"; hãy hiển thị trong giao diện sản phẩm rằng "giọng có thể hết hạn và cần xác thực lại hoặc nhân bản lại".

Mô tả endpoint

Nhóm endpoint này tạo một giọng có thể dùng lại và tạo bài hát bằng giọng đó. Bên gọi chỉ cần API Key do nền tảng cấp; máy chủ xử lý việc gửi tác vụ, đồng bộ trạng thái, tính phí và tải xuống.

Xác thực: Authorization: Bearer YOUR_API_KEY

Tính phí:

Luồng gọi

  1. Gọi POST /api/voice/clone/validate để tải giọng gốc lên và nhận voice_task_id.
  2. Chờ hoặc thăm dò GET /api/voice/clone/tasks/{voice_task_id} cho tới khi nhận validate_info.
  3. Người dùng đọc to văn bản đó và ghi audio xác minh.
  4. Gọi POST /api/voice/clone/tasks/{voice_task_id}/generate để gửi audio xác minh.
  5. Gọi POST /api/voice/clone/tasks/{voice_task_id}/check hoặc tiếp tục truy vấn tác vụ cho tới khi is_available=true.
  6. Gọi POST /api/music/generate-with-voice để tạo bài hát bằng giọng đó.
  7. Endpoint tạo nhạc trả về tác vụ chỗ giữ chỗ trước; khi tạo xong và có song_id thật, bạn có thể dùng các endpoint tải xuống để lấy một tệp hoặc một gói.
  8. (Tùy chọn) Khi không cần giọng nữa, gọi DELETE /api/voice/clone/voices/{voice_task_id} để xóa; ngữ nghĩa ở mục 6.

Còn có nhân bản một bước: ở trang ghi âm/tải giọng gốc đầu tiên trong không gian làm việc, bạn có thể chọn hoàn tất trong một bước; hệ thống làm kiểm tra và tạo giọng cùng lúc, nên bạn không phải ghi audio xác minh thứ hai; giá 5 ¥ mỗi lần gọi và hoàn tiền nếu thất bại.

Trường của tác vụ giọng

Trường Kiểu Mô tả
voice_task_id number ID tác vụ giọng trong nền tảng; mọi endpoint sau đều dùng ID này
voice_id string ID giọng có thể dùng để tạo bài hát; trả về khi tác vụ dùng được
voice_name string Tên giọng
description string Mô tả giọng
style string Phong cách giọng
singer_skill_level string Trình độ hát; giá trị thường dùng: beginner, intermediate, professional
language string Ngôn ngữ giọng gốc, ví dụ zh, en
validate_info string Văn bản xác minh cần đọc to
validate_status string Trạng thái tác vụ kiểm tra
voice_status string Trạng thái tạo giọng
is_available boolean Đã dùng được để tạo bài hát hay chưa
status string Trạng thái tác vụ trên nền tảng
stage string Giai đoạn hiện tại
error_code string Mã lỗi khi thất bại
error_message string Nguyên nhân thất bại
source_duration_seconds number Thời lượng audio gốc, tính bằng giây
created_at number Dấu thời gian tạo
updated_at number Dấu thời gian cập nhật
completed_at number Dấu thời gian hoàn tất

1. Gửi giọng gốc để kiểm tra

Endpoint: POST /api/voice/clone/validate

Tham số body

Tham số Kiểu Bắt buộc Mặc định Mô tả
voice_url string Không - URL audio của giọng gốc. Cái này hoặc file_base64
file_base64 string Không - Audio dạng base64. Cái này hoặc voice_url
file_name string Không - Tên tệp; nên truyền khi dùng file_base64
voice_name string Không tạo tự động Tên giọng
description string Không - Mô tả giọng
style string Không - Phong cách giọng
singer_skill_level string Không beginner Trình độ hát
language string Không zh Ngôn ngữ giọng gốc
vocal_start_s number Có - Giây bắt đầu của đoạn giọng dùng được
vocal_end_s number Có - Giây kết thúc của đoạn giọng dùng được
source_duration_seconds number Không - Tổng thời lượng audio gốc, tính bằng giây

vocal_end_s - vocal_start_s phải đạt yêu cầu tối thiểu của đoạn giọng. Hãy tải lên bản ghi giọng rõ ràng, không có nhạc đệm hay tạp âm rõ rệt.

Ví dụ yêu cầu

curl -X POST https://www.suno-api.io/api/voice/clone/validate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_url": "https://example.com/source-voice.wav",
    "voice_name": "Giọng nữ tiếng Trung của tôi",
    "description": "Giọng nữ tiếng Trung trong trẻo, tự nhiên",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Ví dụ phản hồi

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Giọng nữ tiếng Trung của tôi",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Truy vấn tác vụ giọng

Endpoint: GET /api/voice/clone/tasks/{voice_task_id}

Ví dụ yêu cầu

curl https://www.suno-api.io/api/voice/clone/tasks/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Ví dụ phản hồi

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Giọng nữ tiếng Trung của tôi",
      "validate_info": "Hãy đọc to văn bản xác minh được trả về ở đây",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Tạo lại văn bản xác minh

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Gọi khi văn bản xác minh không phù hợp để đọc to hoặc khi cần kiểm tra lại.

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/regenerate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

4. Gửi audio xác minh và tạo giọng

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/generate

Tham số body

Tham số Kiểu Bắt buộc Mặc định Mô tả
verify_url string Không - URL audio đọc theo văn bản xác minh. Cái này hoặc file_base64
file_base64 string Không - Audio xác minh dạng base64. Cái này hoặc verify_url
file_name string Không - Tên tệp; nên truyền khi dùng file_base64
voice_name string Không tên tác vụ Tên giọng
description string Không mô tả tác vụ Mô tả giọng
style string Không phong cách tác vụ Phong cách giọng
singer_skill_level string Không thiết lập tác vụ Trình độ hát

Ví dụ yêu cầu

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verify_url": "https://example.com/verify-voice.wav",
    "voice_name": "Giọng nữ tiếng Trung của tôi"
  }'

5. Kiểm tra giọng có dùng được không

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/check

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/check \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Khi tác vụ dùng được, is_available trong phản hồi là true và trả về voice_id.

6. Xóa giọng

Endpoint: DELETE /api/voice/clone/voices/{voice_task_id}

Tính phí: miễn phí.

curl -X DELETE https://www.suno-api.io/api/voice/clone/voices/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Ví dụ phản hồi

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Trường Kiểu Mô tả
voice_task_id number ID tác vụ giọng đã bị xóa
deleted boolean Luôn là true; cho biết yêu cầu xóa đã được tiếp nhận

Sau khi xóa thì thế nào

7. Tạo bài hát bằng giọng đã nhân bản

Endpoint: POST /api/music/generate-with-voice

Tính phí: 1,2 ¥ mỗi lần gọi.

Tham số body

Tham số Kiểu Bắt buộc Mặc định Mô tả
voice_task_id number Có - ID tác vụ giọng đã dùng được
voice_id string Không - Trường xác minh tùy chọn; nếu truyền thì phải khớp với voice_id của tác vụ
customMode boolean Không false false là chế độ cảm hứng, true là chế độ nâng cao
prompt string Có - Ở chế độ cảm hứng là mô tả bài hát, ở chế độ nâng cao là lời bài hát. Cả hai đều không được để trống
style string Có ở chế độ nâng cao - Thẻ phong cách; không được để trống khi customMode=true
title string Có ở chế độ nâng cao - Tiêu đề bài hát; không được để trống khi customMode=true
negativeTags string Không - Phong cách loại trừ
instrumental boolean Không false Trường tương thích; tạo nhạc bằng giọng đã nhân bản luôn được xử lý như bài có giọng hát
waitAudio boolean Không false Trường tương thích; endpoint này luôn trả về tác vụ chỗ giữ chỗ theo cách bất đồng bộ và không chờ audio
model string Không suno-v6 Mô hình tạo bài thường; có thể dùng suno-v6, suno-v6-wild hoặc suno-v6-mini
vocalGender string Không - Ưu tiên giới tính giọng hát
lyricsMode string Không - Trường tương thích; chuỗi gửi bằng giọng đã nhân bản hiện tại không tự thay đổi chế độ lời
weirdnessConstraint number Không - Độ mạnh sáng tạo
styleWeight number Không - Trọng số phong cách
audioWeight number Không mặc định của nền tảng Audio Influence (mức độ quan trọng của audio tham chiếu), khoảng 0.0-1.0. Nếu không truyền, áp dụng mặc định của nền tảng (tương đương 25% trong giao diện chính thức); 0 là giá trị hợp lệ, nghĩa là không nghiêng về nguồn tham chiếu chút nào. Trường này gắn chặt với sourceClipId ở dòng dưới: khi có nguồn thì trỏ tới audio tham chiếu, khi không có nguồn thì trỏ tới giọng đã nhân bản; nền tảng chỉ có một thanh trượt này cho cả hai trường hợp, nên đừng tách thành hai tham số theo từng tình huống
sourceClipId string Không - ID clip thật trong không gian làm việc của bài hát nguồn. Truyền vào thì chuyển sang cover bằng giọng đã nhân bản; không truyền thì là tạo nhạc thường bằng giọng đã nhân bản
sourceAudioUrl string Không - Trường hiển thị của nguồn; không tham gia xác định quyền sở hữu hay tài khoản, máy chủ dựa vào bản ghi cơ sở dữ liệu
sourceTitle string Không - Trường hiển thị của nguồn; không tham gia xác định quyền sở hữu hay tài khoản
clientSubmissionId string Không - Trường tương thích Create UI; muốn khử trùng lặp đáng tin trong API khách hàng phải dùng header Idempotency-Key

Hỗ trợ suno-v6, suno-v6-wild và suno-v6-mini; mô hình để trống được xử lý như suno-v6. Các mô hình V5/V5.5 cũ đã ngừng, nhưng tác vụ lịch sử có thể vẫn hiển thị tên mô hình cũ.

Cấu trúc yêu cầu dùng chung cũng phân tích các trường tương thích Create UI như task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId, voiceId, nhưng chúng không phải tham số khách hàng hợp lệ của endpoint này: tác vụ giọng phải truyền qua voice_task_id, xác minh giọng tùy chọn qua voice_id, và việc tạo nhạc bằng giọng không bao giờ đọc các trường sound.

Cách điền tham số tạo nhạc

Tham số header

Header Bắt buộc Mô tả
Authorization: Bearer ... Có Token API khách hàng
Content-Type: application/json Có Nội dung yêu cầu JSON
Idempotency-Key Không, rất nên dùng Tối đa 128 ký tự. Cùng người dùng, token, endpoint, khóa và nội dung yêu cầu thì chỉ tính phí và tạo tác vụ một lần

Hành vi của Idempotency-Key:

Điều kiện cover qua sourceClipId

Cover từ nguồn trong API khách hàng được xử lý hoàn toàn ở phía máy chủ: quyền truy cập bài hát nguồn do máy chủ giải quyết và khách hàng không truyền thông tin tài khoản. Có thực hiện được hay không do phản hồi thực tế của endpoint quyết định.

Nguồn phải thuộc người dùng API hiện tại, là bài hát đã hoàn tất trong không gian làm việc và không ở trạng thái pending:, đồng thời có audio dùng được. Hỗ trợ tạo thường, nguồn tải lên thường và bài cuối của tải lên tăng cường; bản ghi trung gian của tải lên tăng cường bị từ chối trước khi tính phí. Máy chủ chỉ nhận ID bài hát nguồn do khách hàng gửi và không bao giờ nhận ID tài khoản; nguồn không dùng được hoặc chưa xong sẽ trả lỗi trước khi tính phí.

Ví dụ yêu cầu

curl -X POST https://www.suno-api.io/api/music/generate-with-voice \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_task_id": 123,
    "customMode": true,
    "prompt": "Viết một bài nhạc pop Trung Quốc về bờ biển trong đêm hè",
    "style": "Mandopop, warm piano, emotional",
    "title": "Gió biển đêm hè",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Ví dụ phản hồi

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "items": [
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Gió biển đêm hè",
        "prompt": "Viết một bài nhạc pop Trung Quốc về bờ biển trong đêm hè"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Gió biển đêm hè",
        "prompt": "Viết một bài nhạc pop Trung Quốc về bờ biển trong đêm hè"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Về tác vụ chỗ giữ chỗ và song_id cuối cùng

generate-with-voice là endpoint tạo nhạc bất đồng bộ. Phản hồi thành công chỉ nghĩa là tác vụ tạo nhạc đã được gửi, không phải bài hát đã xong.

Ý nghĩa các trường quan trọng trong phản hồi:

Trường Mô tả
client_request_id ID theo dõi của yêu cầu tạo nhạc này. Một yêu cầu thường tạo 2 bài và cả hai kết quả dùng cùng client_request_id.
items[].placeholder_id ID chỗ giữ chỗ cục bộ của nền tảng, thường ở dạng pending:{client_request_id}:{index}. Đây không phải ID bài hát cuối cùng.
items[].client_request_index Chỉ số kết quả trong cùng yêu cầu, thường là 0 và 1.
items[].status Trạng thái ban đầu sau khi gửi, ví dụ submitted. Thành công hay thất bại sau đó theo bản ghi tác vụ cuối cùng.

Lưu ý: placeholder_id bắt đầu bằng pending: không thể dùng làm song_id cuối cùng, cũng không thể truyền trực tiếp vào /api/music/query hay các endpoint tải xuống. Gọi /api/music/query chỉ với các giá trị pending:* có thể trả về mảng rỗng [], vì bài hát thật chưa xong hoặc tác vụ chỗ giữ chỗ chưa được thay bằng ID bài hát cuối cùng.

Ví dụ sai:

{
  "song_ids": "pending:cu_1780480000_abcd1234:0"
}

Luồng đúng:

  1. Gọi POST /api/music/generate-with-voice để gửi tác vụ tạo nhạc bằng giọng.
  2. Lưu client_request_id, items[].placeholder_id và items[].client_request_index từ phản hồi.
  3. Thăm dò GET /api/music/generate-with-voice/results?client_request_id=cu_xxx.
  4. Khi items[].song_id có giá trị và không bắt đầu bằng pending:, gọi /api/music/query, /api/music/download-file hoặc /api/music/download-all.

Phiên bản hiện tại bổ sung endpoint truy vấn công khai:

GET /api/music/generate-with-voice/results?client_request_id=cu_xxx

Nó trả về kết quả tác vụ của cùng client_request_id thuộc người dùng hiện tại, để khách hàng tự tra song_id cuối cùng. Trong danh sách trả về:

Nếu bạn chỉ lưu client_request_id hoặc ID chỗ giữ chỗ pending:*, hãy gọi endpoint kết quả này trước; nếu vẫn chưa tra được song_id thật, hãy gửi client_request_id cho hỗ trợ kỹ thuật để định vị.

Truy vấn kết quả tạo nhạc bằng giọng

Endpoint: GET /api/music/generate-with-voice/results

Tính phí: miễn phí.

Tham số truy vấn

Tham số Kiểu Bắt buộc Mô tả
client_request_id string Có ID theo dõi do generate-with-voice trả về

Ví dụ yêu cầu

curl -X GET "https://www.suno-api.io/api/music/generate-with-voice/results?client_request_id=cu_1780480000_abcd1234" \
  -H "Authorization: Bearer YOUR_API_KEY"

Ví dụ phản hồi khi đang tạo

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "processing",
    "items": [
      {
        "song_id": "",
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "processing",
        "type": "voice_generate",
        "title": "Gió biển đêm hè"
      }
    ]
  }
}

Ví dụ phản hồi khi hoàn tất

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "completed",
    "items": [
      {
        "song_id": "song_abc123",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "completed",
        "type": "voice_generate",
        "title": "Gió biển đêm hè",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Ý nghĩa status cấp cao nhất

Trạng thái Mô tả
not_found Với người dùng hiện tại chưa có bản ghi tác vụ nào cho client_request_id đó
processing Còn ít nhất một kết quả chưa xong; tiếp tục thăm dò
completed Tất cả kết quả đã xong; có thể truy vấn hoặc tải xuống bằng song_id
partial Một phần xong, một phần thất bại; xử lý các song_id đã xong trước
failed Tất cả kết quả thất bại; xem items[].error_message

8. Tải một tệp

Endpoint: POST /api/music/download-file

Tham số body

Tham số Kiểu Bắt buộc Mô tả
song_id string Có ID bài hát
kind string Có Loại tải: audio, cover, wav, video

Ví dụ yêu cầu

curl -X POST https://www.suno-api.io/api/music/download-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123",
    "kind": "audio"
  }' \
  --output song.mp3

Phản hồi là luồng tệp; Content-Type và tên tệp theo giá trị backend trả về.

9. Tải tài nguyên bài hát dạng gói

Endpoint: POST /api/music/download-all

Tham số body

Tham số Kiểu Bắt buộc Mô tả
song_id string Có ID bài hát

Ví dụ yêu cầu

curl -X POST https://www.suno-api.io/api/music/download-all \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123"
  }' \
  --output song.zip

Gói thường chứa audio, ảnh bìa và metadata.json; nếu loại tài nguyên nào chưa được tạo thì sẽ không có trong tệp nén.

Lỗi thường gặp

message Mô tả
voice audio is required Khi gửi giọng gốc không cung cấp voice_url lẫn file_base64
invalid voice task id ID tác vụ giọng trong đường dẫn không hợp lệ
voice validation is not ready Chưa có văn bản xác minh nên không thể gửi audio xác minh
selected voice is not ready Giọng đã chọn chưa thể tạo bài hát (chưa sẵn sàng, đã xóa hoặc không thuộc tài khoản hiện tại)
selected voice does not match voice task voice_id trong yêu cầu không khớp với tác vụ
voice task is required Thiếu voice_task_id khi tạo bài hát bằng giọng
record not found Tác vụ / bài hát không tồn tại, không thuộc tài khoản của API Key hiện tại, hoặc đã bị xóa (truy vấn tác vụ này sau khi xóa giọng cũng thấy kết quả tương tự)

Lỗi của nhóm này luôn trả về HTTP 200: hãy đánh giá kết quả bằng trường success trong nội dung (false là thất bại, nguyên nhân ở message) và đừng chỉ nhìn mã trạng thái HTTP. Ngữ nghĩa đầy đủ của việc xóa giọng (còn dùng được không, có khôi phục được không) ở mục 6.

Tiếp theo【Khuyến nghị】 API hồ sơ giọng nói

Lấy khóa API

Tạo khóa API trong bảng điều khiển sau khi đăng ký. Mỗi lần tạo tốn 0,6 ¥ và trả về 2 bản nhạc, tải xuống không giới hạn và không cần số điện thoại.

Lấy khóa API Quay lại tổng quan