Suno AI API cho phép bạn tạo nhạc và lời bài hát tự động bằng trí tuệ nhân tạo. Hệ thống hoạt động theo mô hình bất đồng bộ: bạn gửi yêu cầu để lấy taskId, sau đó poll để lấy kết quả.
Base URL
https://api.shopaikey.com
Xác thực
Tất cả endpoint yêu cầu header:
Authorization: Bearer <your-api-key>
Luồng sử dụng
1. POST /suno/submit/music → Nhận taskId
↓
2. GET /suno/fetch/{taskId} → Poll mỗi 3s cho đến khi status = "SUCCESS"
↓
3. Lấy audio_url, image_url từ kết quả
1. Tạo nhạc
Endpoint: POST /suno/submit/music
Gửi yêu cầu tạo nhạc. Suno AI sẽ tạo 2 bản nhạc cho mỗi yêu cầu. Có 2 chế độ nhập liệu:
- Mô tả (description): Mô tả ý tưởng bằng ngôn ngữ tự nhiên, GPT sẽ tự tạo prompt.
- Lời bài hát (lyrics): Nhập thẳng lời bài hát theo cấu trúc
[Verse],[Chorus]...
Tham số request body
* Lưu ý: Phải truyền ít nhất một trong hai:
gpt_description_prompthoặcprompt.
Ví dụ cURL — Chế độ mô tả
curl -X POST 'https://api.shopaikey.com/suno/submit/music' \
-H 'Authorization: Bearer <your-api-key>' \
-H 'Content-Type: application/json' \
-d '{
"mv": "chirp-hawk",
"gpt_description_prompt": "Một bản nhạc pop vui tươi về mùa hè và biển cả",
"title": "Mùa Hè Rực Rỡ",
"tags": "pop, summer, upbeat"
}'
Ví dụ cURL — Chế độ lyrics
curl -X POST 'https://api.shopaikey.com/suno/submit/music' \
-H 'Authorization: Bearer <your-api-key>' \
-H 'Content-Type: application/json' \
-d '{
"mv": "chirp-hawk",
"prompt": "[Verse 1]\nNắng chiều rơi nhẹ trên vai\nGió mang theo tiếng sóng biển dài\n\n[Chorus]\nMùa hè ơi, em ở đâu...",
"title": "Mùa Hè Ơi",
"tags": "pop, ballad",
"make_instrumental": false
}'
Ví dụ JavaScript
const response = await fetch('https://api.shopaikey.com/suno/submit/music', {
method: 'POST',
headers: {
'Authorization': 'Bearer <your-api-key>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
mv: 'chirp-hawk',
gpt_description_prompt: 'Một bản nhạc pop vui tươi về mùa hè và biển cả',
title: 'Mùa Hè Rực Rỡ',
tags: 'pop, summer, upbeat',
}),
});
const data = await response.json();
// data.code === "success"
const taskId = data.data;
console.log('Task ID:', taskId);
Response
{
"code": "success",
"data": "task_abc123xyz"
}
2. Tạo lời bài hát
Endpoint: POST /suno/submit/lyrics
Tạo lời bài hát từ mô tả chủ đề. Kết quả trả về lời bài hát theo cấu trúc verse/chorus.
Tham số request body
Ví dụ cURL
curl -X POST 'https://api.shopaikey.com/suno/submit/lyrics' \
-H 'Authorization: Bearer <your-api-key>' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "Viết lời bài hát về vượt qua khó khăn và đứng dậy sau thất bại",
"title": "Đứng Dậy",
"tags": "pop, inspirational"
}'
Ví dụ JavaScript
const response = await fetch('https://api.shopaikey.com/suno/submit/lyrics', {
method: 'POST',
headers: {
'Authorization': 'Bearer <your-api-key>',
'Content-Type': 'application/json',
},
body: JSON.stringify({
prompt: 'Viết lời bài hát về vượt qua khó khăn và đứng dậy sau thất bại',
title: 'Đứng Dậy',
}),
});
const data = await response.json();
const taskId = data.data;
Response
{
"code": "success",
"data": "task_def456uvw"
}
3. Lấy kết quả task
Endpoint: GET /suno/fetch/{taskId}
Poll endpoint này mỗi 3 giây cho đến khi status là "SUCCESS" hoặc "FAILED".
Ví dụ cURL
curl 'https://api.shopaikey.com/suno/fetch/task_abc123xyz' \
-H 'Authorization: Bearer <your-api-key>'
Ví dụ JavaScript — Tự động poll
async function pollTask(taskId, apiKey, intervalMs = 3000) {
return new Promise((resolve, reject) => {
const interval = setInterval(async () => {
const response = await fetch(
`https://api.shopaikey.com/suno/fetch/${taskId}`,
{ headers: { Authorization: `Bearer ${apiKey}` } }
);
const result = await response.json();
if (result.code !== 'success' || !result.data) return;
const status = result.data.status?.toLowerCase();
if (status === 'success') {
clearInterval(interval);
resolve(result.data.data); // mảng bài nhạc
} else if (status === 'failed') {
clearInterval(interval);
reject(new Error(result.data.fail_reason || 'Thất bại'));
}
// Tiếp tục poll nếu status là submitted / queueing / processing
}, intervalMs);
});
}
// Sử dụng
const songs = await pollTask('task_abc123xyz', '<your-api-key>');
console.log('Audio URL:', songs[0].audio_url);
Response — Tạo nhạc
Đang xử lý:
{
"code": "success",
"data": {
"status": "PROCESSING",
"fail_reason": null,
"data": []
}
}
Hoàn thành:
{
"code": "success",
"data": {
"status": "SUCCESS",
"fail_reason": null,
"data": [
{
"id": "clip_abc123",
"clip_id": "clip_abc123",
"audio_url": "https://cdn.suno.ai/audio/clip_abc123.mp3",
"video_url": "https://cdn.suno.ai/video/clip_abc123.mp4",
"image_url": "https://cdn.suno.ai/image/clip_abc123.jpg",
"title": "Mùa Hè Rực Rỡ",
"tags": "pop, summer, upbeat",
"prompt": "[Verse 1]\nNắng vàng trải dài trên cát...",
"model_name": "chirp-hawk",
"duration": 118.4
},
{
"id": "clip_def456",
"clip_id": "clip_def456",
"audio_url": "https://cdn.suno.ai/audio/clip_def456.mp3",
"video_url": "https://cdn.suno.ai/video/clip_def456.mp4",
"image_url": "https://cdn.suno.ai/image/clip_def456.jpg",
"title": "Mùa Hè Rực Rỡ",
"tags": "pop, summer, upbeat",
"prompt": "[Verse 1]\nNắng vàng trải dài trên cát...",
"model_name": "chirp-hawk",
"duration": 121.0
}
]
}
}
Kết quả tạo lời bài hát:
{
"code": "success",
"data": {
"status": "SUCCESS",
"fail_reason": null,
"data": [
{
"id": "lyrics_ghi789",
"title": "Đứng Dậy",
"text": "[Verse 1]\nKhi sóng gió ập vào bờ\nKhi con tim chưa nguôi chờ..."
}
]
}
}
Thất bại:
{
"code": "success",
"data": {
"status": "FAILED",
"fail_reason": "Content policy violation",
"data": []
}
}
Cấu trúc trường dữ liệu bài nhạc
Trạng thái task
Các model hỗ trợ
Thông báo: Từ ngày 09/09/2026, toàn bộ model Suno phiên bản cũ đã ngừng cung cấp. Mọi request truyền
mvkhông thuộc 3 giá trị V6 (chirp-hawk,chirp-hawk-wild,chirp-goose) sẽ bị tự động chuyển sangchirp-hawk(V6 bản tiêu chuẩn).
Model phiên bản cũ
Các giá trị mv dưới đây vẫn được chấp nhận, nhưng model gốc đã bị gỡ. Request truyền các giá trị này sẽ được tự động chuyển sang chirp-hawk, và trường model_name trong kết quả trả về sẽ là model V6 thực tế đã chạy chứ không phải giá trị bạn gửi lên.
Xử lý lỗi
{
"code": "error",
"message": "Invalid API key"
}
Best Practices
- Poll hợp lý: Gọi
/suno/fetch/{taskId}mỗi 3 giây, không nên gọi liên tục để tránh rate limit. - Timeout: Nếu sau 5 phút task vẫn chưa hoàn thành, có thể bỏ qua và thử lại.
- Xử lý 2 bài: Mỗi request tạo nhạc trả về 2 clip — hãy cho người dùng chọn bài ưa thích.
- Prompt rõ ràng: Mô tả chi tiết thể loại, cảm xúc, nhịp độ để AI tạo ra kết quả tốt hơn.
- Tags: Dùng tags để định hướng thể loại:
pop, rock, jazz, electronic, classical, hip-hop...