Regras gerais do Suno V6 e consulta de tarefas
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
Regras gerais do Suno V6 e consulta de tarefas
Seleção de versão Suno V6, modelos personalizados, ciclo de tarefas assíncronas, referência da faixa de origem e estrutura de resultados
GET
/
v1
/
music
/
tasks
/
{task_id}
Regras gerais do Suno V6 e consulta de tarefas
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": ""
}
}
}
Todas as APIs Suno de geração, edição e ferramentas usam tarefas assíncronas: envie a operação, obtenha
task_id e consulte o resultado com a API desta página.Autenticação
string
obrigatório
Autenticação Bearer Token:
Authorization: Bearer <YOUR_API_KEY>.Versão V6 e seleção do modelo
Modelos públicos aceitam estas versões:v6v6-wildv6-mini
version ou o custom_model_id retornado por uma tarefa de criação. Operações de edição compatíveis usam v6 quando version é omitida. Não envie version pública com custom_model_id.
custom: true seleciona o modo de letra personalizada; custom_model_id, um modelo treinado. São conceitos diferentes e o modo de letra não muda automaticamente para a tarifa do modelo.Opções gerais de geração V6
Envie os campos a seguir somente quando aparecerem no endpoint específico:| Campo | Descrição |
|---|---|
variety | Variação de estilo: off / normal / high / extra / max |
max_mode | Modo Max, padrão false; quando aceito, cobra 2× o preço padrão |
audio_format | mp3 / m4a / wav |
duration / duration_s | Duração alvo, inteiro de 10 a 360 segundos; apenas nas operações indicadas |
max_mode: false em todas as operações. variety e Max são independentes; variety: "max" não ativa a cobrança Max.
Limites de texto e pesos
| conteúdo | campo | limite |
|---|---|---|
| Descrição de inspiração | prompt (geração principal) / gpt_description (operações) | Até 3.000 caracteres |
| Letra | prompt (modo personalizado) | Até 5.000 caracteres |
| Estilo | style (geração principal) / tags (operações) | Até 1.000 caracteres |
| Título | title | Até 80 caracteres |
| Pesos | style_weight / weirdness / audio_weight | 0–1; o valor numérico 0 é válido |
weirdness; weirdness_constraint é um alias. A geração principal continua usando weirdness_constraint. O tamanho é contado em caracteres Unicode.
Faixa de origem de referência
Com base em obras existentes:task_id: ID de tarefa do API Mart para a faixa de áudio de saída.audio_index: posição original emdata.result.music[]da tarefa de origem, a partir de 1; padrão1.
Novas solicitações referenciam a faixa de origem com
task_id + audio_index; audio_id, music_id ou audio_url não substituem esses campos. Origem ausente ou índice fora do intervalo retorna 400.Resposta do envio
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01M24YMN4EV04M84R5QYM77R1E"
}
]
}
data[0].task_id. submitted só indica que a tarefa foi aceita, não que o áudio final já esteja disponível.
Consultar tarefa
GET /v1/music/tasks/{task_id}
Adicione ?language=zh para receber traduções disponíveis das mensagens de falha. Isso não muda o idioma da música ou da letra.
string
obrigatório
ID da tarefa retornado pela API de envio.
data.status ser completed ou failed. O mesmo ID pode ser usado após recarregar a página. Não reenvie POSTs pagos automaticamente por timeout de rede.
Resposta da consulta
integer
Código de status da resposta.
object
Informações da tarefa.
Mostrar Propriedades
Mostrar Propriedades
string
ID de tarefa da plataforma.
string
pending / processing / completed / failed / unknown.number
Progresso da tarefa, normalmente 0–100. Determine a conclusão por
status.number
Hora de criação, em segundos Unix.
number
Tempo estimado de processamento em segundos, apenas como referência, não como contagem regressiva garantida.
number
Valor (USD).
number
Pontos consumidos pela tarefa. Exiba diretamente o valor retornado pela API.
object
Resultado após a conclusão; a estrutura varia conforme a operação.
object
Mensagem de falha; campos comuns:
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": ""
}
}
}
Processamento do resultado
- Resultados musicais costumam ficar em
data.result.music[], mas downloads, letras, MIDI, Persona e modelos personalizados usam estruturas próprias. durationé a duração real e pode ser decimal; a duração alvo pode não coincidir exatamente com o resultado.- O peso
0é válido e não deve ser ocultado por uma verificação falsy do JavaScript. audio_urlnão termina necessariamente em.mp3. Reproduza ou baixe usando a URL realmente retornada.- Com
status="unknown", mantenha o ID da tarefa e permita atualização manual sem criar novas tarefas automaticamente.
AbortController pode parar solicitações do navegador e polling, mas não cancela a tarefa do servidor. Não há endpoint para cancelar uma tarefa Suno enviada.