> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenlab.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Tạo Nhạc

> Tạo một tác vụ tạo nhạc bằng Suno

Tạo nhạc và lời bài hát bằng AI. Đây là một API bất đồng bộ. Phản hồi tạo trả về danh tính tác vụ và, khi có sẵn, cũng có thể bao gồm `poll_url` ưu tiên.

## Nội dung yêu cầu

<ParamField body="model" type="string" default="suno_music">
  Model để sử dụng: `suno_music` để tạo nhạc, `suno_lyrics` chỉ để tạo lời bài hát.
</ParamField>

<ParamField body="prompt" type="string">
  Mô tả âm nhạc. Bắt buộc cho yêu cầu music, lyrics, upload-cover và upload-extend; bỏ qua với add-instrumental.
</ParamField>

<ParamField body="title" type="string">
  Tiêu đề cho bài hát được tạo.
</ParamField>

<ParamField body="tags" type="string">
  Các thẻ phong cách (ví dụ: "pop, upbeat, electronic").
</ParamField>

<ParamField body="negative_tags" type="string">
  Phong cách cần tránh. Bắt buộc khi `audio_operation` là `add-instrumental`.
</ParamField>

<ParamField body="action" type="string">
  Loại tạo: `MUSIC` (mặc định) hoặc `LYRICS`.
</ParamField>

<ParamField body="mv" type="string">
  Phiên bản mô hình Suno chính thức. Bắt buộc khi tạo nhạc (khi bỏ qua `action` hoặc dùng `MUSIC`); bỏ qua cho yêu cầu chỉ tạo lời bài hát. Giá trị được hỗ trợ: `chirp-v3-5`, `chirp-v4`, `chirp-v4-5`, `chirp-v4.5`, `chirp-v4-5plus`, `chirp-v4.5plus`, `chirp-v4-5all`, `chirp-v4.5all`, `chirp-v5`, `chirp-v5-5`, `chirp-v5.5`.
</ParamField>

<ParamField body="make_instrumental" type="boolean">
  Đặt thành `true` để tạo đầu ra nhạc không lời, không có giọng hát.
</ParamField>

<ParamField body="audio_url" type="string">
  URL âm thanh tham chiếu hoặc đã tải lên có thể truy cập công khai. Nếu không gửi `audio_operation`, TokenLab dùng luồng upload-cover.
</ParamField>

<ParamField body="audio_operation" type="string">
  Chế độ âm thanh tải lên: `upload-cover`, `upload-extend`, hoặc `add-instrumental`. `upload-extend` cần `continue_at`; `add-instrumental` cần `audio_url`, `title`, `tags`, và `negative_tags`.
</ParamField>

<ParamField body="continue_clip_id" type="string">
  ID của một clip trước đó để tiếp tục.
</ParamField>

<ParamField body="continue_at" type="number">
  Mốc thời gian tính bằng giây để bắt đầu nối tiếp. Bắt buộc khi `audio_operation` là `upload-extend`.
</ParamField>

## Phản hồi

<ResponseField name="id" type="string">
  ID tác vụ để kiểm tra trạng thái.
</ResponseField>

<ResponseField name="task_id" type="string">
  Bí danh của mã tác vụ bất đồng bộ khi được adapter trả về.
</ResponseField>

<ResponseField name="poll_url" type="string">
  URL polling ưu tiên khi có sẵn.
</ResponseField>

<ResponseField name="status" type="string">
  Trạng thái tác vụ: `pending`, `processing`, `completed`, hoặc `failed`.
</ResponseField>

<ResponseField name="created" type="integer">
  Dấu thời gian Unix khi tạo tác vụ.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1/music/generations" \
    -H "Authorization: Bearer sk-your-api-key" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "suno_music",
      "mv": "chirp-v4",
      "prompt": "An upbeat electronic dance track with heavy bass",
      "title": "Night Drive",
      "tags": "electronic, EDM, energetic"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.tokenlab.sh/v1/music/generations",
      headers={"Authorization": "Bearer sk-your-api-key"},
      json={
          "model": "suno_music",
          "mv": "chirp-v4",
          "prompt": "An upbeat electronic dance track with heavy bass",
          "title": "Night Drive",
          "tags": "electronic, EDM, energetic"
      }
  )

  task_id = response.json()["id"]
  print(f"Task ID: {task_id}")
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.tokenlab.sh/v1/music/generations', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer sk-your-api-key',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'suno_music',
      mv: 'chirp-v4',
      prompt: 'An upbeat electronic dance track with heavy bass',
      title: 'Night Drive',
      tags: 'electronic, EDM, energetic'
    })
  });

  const data = await response.json();
  console.log(`Task ID: ${data.id}`);
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "encoding/json"
      "fmt"
      "net/http"
  )

  func main() {
      payload := map[string]interface{}{
          "model":  "suno_music",
          "mv":     "chirp-v4",
          "prompt": "An upbeat electronic dance track with heavy bass",
          "title":  "Night Drive",
          "tags":   "electronic, EDM, energetic",
      }
      body, _ := json.Marshal(payload)

      req, _ := http.NewRequest("POST", "https://api.tokenlab.sh/v1/music/generations", bytes.NewBuffer(body))
      req.Header.Set("Authorization", "Bearer sk-your-api-key")
      req.Header.Set("Content-Type", "application/json")

      client := &http.Client{}
      resp, _ := client.Do(req)
      defer resp.Body.Close()

      var result map[string]interface{}
      json.NewDecoder(resp.Body).Decode(&result)
      fmt.Printf("Task ID: %s\n", result["id"])
  }
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://api.tokenlab.sh/v1/music/generations');

  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'Content-Type: application/json',
          'Authorization: Bearer sk-your-api-key'
      ],
      CURLOPT_POSTFIELDS => json_encode([
          'model' => 'suno_music',
          'mv' => 'chirp-v4',
          'prompt' => 'An upbeat electronic dance track with heavy bass',
          'title' => 'Night Drive',
          'tags' => 'electronic, EDM, energetic'
      ])
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  $data = json_decode($response, true);
  echo "Task ID: " . $data['id'];
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "status": "pending",
    "created": 1706000000,
    "model": "suno_music"
  }
  ```
</ResponseExample>
