Общие правила Suno V6 и получение задач
curl --request GET \
--url https://api.apimart.ai/v1/music/tasks/{task_id} \
--header 'Authorization: <authorization>'import requests
url = "https://api.apimart.ai/v1/music/tasks/{task_id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.apimart.ai/v1/music/tasks/{task_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apimart.ai/v1/music/tasks/{task_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apimart.ai/v1/music/tasks/{task_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apimart.ai/v1/music/tasks/{task_id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apimart.ai/v1/music/tasks/{task_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "completed",
"progress": 100,
"created": 1789041600,
"cost": 0.12,
"credits_cost": 1.2,
"result": {
"music": [
{
"audio_id": "example-track-id",
"status": "complete",
"title": "follow the lights",
"lyrics": "[Verse]\nthe late wind blows over familiar streets",
"tags": "pop, acoustic",
"display_tags": "Pop, Acoustic",
"negative_tags": "harsh vocals",
"style_weight": 0.7,
"weirdness_constraint": 0,
"audio_weight": 0.4,
"duration": 119.8,
"audio_url": "https://example.com/result.mp3",
"image_url": "https://example.com/cover.jpg",
"image_large_url": "https://example.com/cover-large.jpg"
}
]
}
}
}
{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "failed",
"progress": 0,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "task failure reason",
"type": "task_failed",
"code": "task_failed",
"param": ""
}
}
}
Suno
Общие правила Suno V6 и получение задач
Версии Suno V6, пользовательские модели, цикл асинхронных задач, ссылки на исходные дорожки и структура результатов
GET
/
v1
/
music
/
tasks
/
{task_id}
Общие правила Suno V6 и получение задач
curl --request GET \
--url https://api.apimart.ai/v1/music/tasks/{task_id} \
--header 'Authorization: <authorization>'import requests
url = "https://api.apimart.ai/v1/music/tasks/{task_id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.apimart.ai/v1/music/tasks/{task_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apimart.ai/v1/music/tasks/{task_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apimart.ai/v1/music/tasks/{task_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apimart.ai/v1/music/tasks/{task_id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apimart.ai/v1/music/tasks/{task_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "completed",
"progress": 100,
"created": 1789041600,
"cost": 0.12,
"credits_cost": 1.2,
"result": {
"music": [
{
"audio_id": "example-track-id",
"status": "complete",
"title": "follow the lights",
"lyrics": "[Verse]\nthe late wind blows over familiar streets",
"tags": "pop, acoustic",
"display_tags": "Pop, Acoustic",
"negative_tags": "harsh vocals",
"style_weight": 0.7,
"weirdness_constraint": 0,
"audio_weight": 0.4,
"duration": 119.8,
"audio_url": "https://example.com/result.mp3",
"image_url": "https://example.com/cover.jpg",
"image_large_url": "https://example.com/cover-large.jpg"
}
]
}
}
}
{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "failed",
"progress": 0,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "task failure reason",
"type": "task_failed",
"code": "task_failed",
"param": ""
}
}
}
Все API Suno для генерации, редактирования и инструментов используют асинхронные задачи: отправьте операцию, получите
task_id и запросите результат через API этой страницы.Аутентификация
string
обязательно
Аутентификация Bearer Token:
Authorization: Bearer <YOUR_API_KEY>.Версия V6 и выбор модели
Публичные модели поддерживают версии:v6v6-wildv6-mini
version или custom_model_id из задачи создания модели. Операции редактирования используют v6, если version не указана. Публичную version и custom_model_id нельзя отправлять вместе.
custom: true выбирает режим пользовательского текста, а custom_model_id — обученную модель. Это разные понятия; режим текста не включает тариф модели автоматически.Общие параметры генерации V6
Отправляйте следующие поля, только если они указаны для конкретного endpoint:| Поле | Описание |
|---|---|
variety | Вариативность стиля: off / normal / high / extra / max |
max_mode | Режим Max, по умолчанию false; при поддержке оплачивается по двойной цене |
audio_format | mp3 / m4a / wav |
duration / duration_s | Целевая длительность, целое от 10 до 360 секунд; только для указанных операций |
max_mode: false. variety и Max независимы: variety: "max" не включает тарификацию Max.
Ограничения текста и весов
| Содержимое | Поле | Ограничение |
|---|---|---|
| Описание идеи | prompt (основная генерация) / gpt_description (операции) | До 3 000 символов |
| Текст песни | prompt (пользовательский режим) | До 5 000 символов |
| Стиль | style (основная генерация) / tags (операции) | До 1 000 символов |
| Название | title | До 80 символов |
| Веса | style_weight / weirdness / audio_weight | 0–1; число 0 допустимо |
weirdness; weirdness_constraint — совместимый псевдоним. Основная генерация по-прежнему использует weirdness_constraint. Длина считается в символах Unicode.
Исходная дорожка
На основе существующих работ:task_id: ID задачи API Mart для выходной аудиодорожки.audio_index: исходная позиция вdata.result.music[]задачи-источника, начиная с 1; по умолчанию1.
Новые запросы ссылаются на исходную дорожку через
task_id + audio_index; audio_id, music_id и audio_url их не заменяют. Отсутствующий источник или индекс вне диапазона возвращает 400.Ответ на отправку
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01M24YMN4EV04M84R5QYM77R1E"
}
]
}
data[0].task_id. submitted означает только принятие задачи, а не наличие готового аудио или других результатов.
Получение задачи
GET /v1/music/tasks/{task_id}
Добавьте ?language=zh, чтобы получить доступные переводы ошибок. Параметр не меняет язык песни или текста.
string
обязательно
ID задачи, возвращённый API отправки.
completed или failed. После обновления страницы можно использовать тот же ID. Не повторяйте платный POST автоматически из-за сетевого тайм-аута.
Ответ на запрос
integer
Код статуса ответа.
object
Информация о задаче.
Показать Свойства
Показать Свойства
string
ID задачи платформы.
string
pending / processing / completed / failed / unknown.number
Прогресс задачи, обычно 0–100. Завершение определяйте по
status.number
Время создания в секундах Unix.
number
Оценка времени обработки в секундах, только для справки, а не гарантированный обратный отсчёт.
number
Сумма (USD).
number
Баллы, израсходованные задачей. Показывайте значение ответа API без изменений.
object
Результат после завершения; структура зависит от операции.
object
Сообщение об ошибке; обычные поля:
message / type / code / param.{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "completed",
"progress": 100,
"created": 1789041600,
"cost": 0.12,
"credits_cost": 1.2,
"result": {
"music": [
{
"audio_id": "example-track-id",
"status": "complete",
"title": "follow the lights",
"lyrics": "[Verse]\nthe late wind blows over familiar streets",
"tags": "pop, acoustic",
"display_tags": "Pop, Acoustic",
"negative_tags": "harsh vocals",
"style_weight": 0.7,
"weirdness_constraint": 0,
"audio_weight": 0.4,
"duration": 119.8,
"audio_url": "https://example.com/result.mp3",
"image_url": "https://example.com/cover.jpg",
"image_large_url": "https://example.com/cover-large.jpg"
}
]
}
}
}
{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "failed",
"progress": 0,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "task failure reason",
"type": "task_failed",
"code": "task_failed",
"param": ""
}
}
}
Обработка результата
- Музыкальные результаты обычно находятся в
data.result.music[], но загрузки, тексты, MIDI, Persona и пользовательские модели имеют собственные структуры. duration— фактическая длительность и может быть дробной; целевая длительность не обязана точно совпадать с результатом.- Вес
0допустим и не должен скрываться из-за falsy-проверки JavaScript. audio_urlне обязана оканчиваться на.mp3. Используйте фактически возвращённую URL.- При
status="unknown"сохраняйте ID задачи и разрешайте ручное обновление, не создавая новую задачу автоматически.
AbortController останавливает запросы браузера и опрос, но не серверную задачу. Endpoint отмены отправленной задачи Suno отсутствует.