Đa phương tiện

Suno AI — Tạo nhạc

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

code
https://api.shopaikey.com

Xác thực

Tất cả endpoint yêu cầu header:

code
Authorization: Bearer <your-api-key>

Luồng sử dụng

code
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

Tên tham sốKiểuBắt buộcMô tả
mvstringCóPhiên bản model. Xem danh sách model bên dưới
gpt_description_promptstringKhông*Mô tả nhạc (chế độ mô tả). GPT sẽ tự tạo lời và prompt
promptstringKhông*Lời bài hát trực tiếp (chế độ lyrics)
titlestringKhôngTiêu đề bài hát
tagsstringKhôngThể loại nhạc, ví dụ: pop, upbeat, electronic
make_instrumentalbooleanKhôngtrue để tạo nhạc không lời. Mặc định: false

* Lưu ý: Phải truyền ít nhất một trong hai: gpt_description_prompt hoặc prompt.

Ví dụ cURL — Chế độ mô tả

code
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

code
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

code
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
{
  "code": "success",
  "data": "task_abc123xyz"
}
TrườngKiểuMô tả
codestring"success" nếu gửi thành công
datastringtaskId để poll kết quả
messagestringThông báo lỗi (khi code !== "success")

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

Tên tham sốKiểuBắt buộcMô tả
promptstringCóMô tả chủ đề lời bài hát
titlestringKhôngTiêu đề bài hát
tagsstringKhôngThể loại nhạc, ví dụ: pop, romantic

Ví dụ cURL

code
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

code
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
{
  "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

code
curl 'https://api.shopaikey.com/suno/fetch/task_abc123xyz' \
  -H 'Authorization: Bearer <your-api-key>'

Ví dụ JavaScript — Tự động poll

code
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
{
  "code": "success",
  "data": {
    "status": "PROCESSING",
    "fail_reason": null,
    "data": []
  }
}

Hoàn thành:

code
{
  "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
{
  "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
{
  "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ườngKiểuMô tả
id / clip_idstringID clip nhạc
audio_urlstringURL file MP3 để phát hoặc tải xuống
video_urlstringURL file MP4 (có hình ảnh kèm nhạc)
image_urlstringURL ảnh thumbnail bài hát
titlestringTiêu đề bài hát
tagsstringThể loại nhạc
promptstringLời bài hát đã tạo
model_namestringModel đã sử dụng
durationnumberThời lượng tính bằng giây

Trạng thái task

Trạng tháiÝ nghĩa
SUBMITTEDĐã gửi, chờ xếp hàng
QUEUEINGĐang xếp hàng chờ xử lý
PROCESSINGĐang tạo nhạc/lời
SUCCESSHoàn thành, có thể lấy kết quả
FAILEDThất bại, xem fail_reason

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 mv không thuộc 3 giá trị V6 (chirp-hawk, chirp-hawk-wild, chirp-goose) sẽ bị tự động chuyển sang chirp-hawk (V6 bản tiêu chuẩn).

Giá trị mvPhiên bảnNgày phát hànhGiới hạn promptGiới hạn tagsThời lượng tối đa
chirp-hawkV609/09/20265.000 ký tự1.000 ký tự8 phút
chirp-hawk-wildV6 wild09/09/20265.000 ký tự1.000 ký tự8 phút
chirp-gooseV6 mini09/09/20265.000 ký tự1.000 ký tự8 phút

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.

Giá trị mvPhiên bản gốc
chirp-v3.0v3.0
chirp-v3.5v3.5
chirp-v4v4.0
chirp-aukv4.5
chirp-bluejayv4.5+
chirp-crowv5.0
chirp-fenixv5.5

Xử lý lỗi

code
{
  "code": "error",
  "message": "Invalid API key"
}
Mã HTTPNguyên nhân
401API key thiếu hoặc không hợp lệ
400Request body thiếu tham số bắt buộc
500Lỗi server hoặc upstream

Best Practices

  1. 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.
  2. Timeout: Nếu sau 5 phút task vẫn chưa hoàn thành, có thể bỏ qua và thử lại.
  3. 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.
  4. 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.
  5. Tags: Dùng tags để định hướng thể loại: pop, rock, jazz, electronic, classical, hip-hop...

Bài cùng nhóm · Đa phương tiện