Reglas generales de Suno V6 y consulta de tareas
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
Reglas generales de Suno V6 y consulta de tareas
Selección de versión Suno V6, modelos personalizados, ciclo de tareas asíncronas, referencia de pista de origen y estructura de resultados
GET
/
v1
/
music
/
tasks
/
{task_id}
Reglas generales de Suno V6 y consulta de tareas
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 las API de generación, edición y herramientas de Suno usan tareas asíncronas: envía la operación, obtén
task_id y consulta el resultado con la API de esta página.Autenticación
string
requerido
Autenticación con Bearer Token:
Authorization: Bearer <YOUR_API_KEY>.Versión V6 y selección del modelo
Los modelos públicos admiten estas versiones:v6v6-wildv6-mini
version o el custom_model_id devuelto por una tarea de creación. Las operaciones de edición compatibles usan v6 si se omite version. No se pueden enviar juntos version público y custom_model_id.
custom: true selecciona el modo de letra personalizada; custom_model_id, un modelo personalizado entrenado. Son conceptos distintos y el modo de letra no cambia automáticamente a la tarifa del modelo.Opciones generales de generación V6
Envía los siguientes campos solo si aparecen en el endpoint correspondiente:| Campo | Descripción |
|---|---|
variety | Variación de estilo: off / normal / high / extra / max |
max_mode | Modo Max, predeterminado false; cuando se admite se cobra 2× el precio estándar |
audio_format | mp3 / m4a / wav |
duration / duration_s | Duración objetivo, entero de 10 a 360 segundos; solo en operaciones indicadas |
max_mode: false a todas las operaciones. variety y Max son independientes; variety: "max" no activa la tarifa Max.
Límites de texto y pesos
| contenido | campo | límite |
|---|---|---|
| Descripción de inspiración | prompt (generación principal) / gpt_description (operaciones) | Hasta 3.000 caracteres |
| Letra | prompt (modo personalizado) | Hasta 5.000 caracteres |
| Estilo | style (generación principal) / tags (operaciones) | Hasta 1.000 caracteres |
| Título | title | Hasta 80 caracteres |
| Pesos | style_weight / weirdness / audio_weight | 0–1; el valor numérico 0 es válido |
weirdness; weirdness_constraint es un alias de compatibilidad. La generación principal sigue usando weirdness_constraint. La longitud se cuenta en caracteres Unicode.
Pista de origen de referencia
Basado en obras existentes:task_id: ID de tarea de API Mart para la pista de audio resultante.audio_index: posición original endata.result.music[]de la tarea de origen, desde 1; valor predeterminado1.
Las solicitudes nuevas referencian la pista de origen con
task_id + audio_index; no pueden sustituirse por audio_id, music_id o audio_url. Si no se encuentra el origen o el índice está fuera de rango se devuelve 400.Respuesta del envío
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01M24YMN4EV04M84R5QYM77R1E"
}
]
}
data[0].task_id. submitted solo indica que la tarea se aceptó, no que el audio final u otros resultados ya existan.
Consultar tarea
GET /v1/music/tasks/{task_id}
Añade ?language=zh para recibir las traducciones disponibles de los errores. Este parámetro no cambia el idioma de la canción ni de la letra.
string
requerido
ID de tarea devuelto por la API de envío.
data.status sea completed o failed. Puedes seguir usando el mismo ID tras recargar la página. No reenvíes automáticamente solicitudes POST de pago por un timeout de red.
Respuesta de consulta
integer
Código de estado de la respuesta.
object
Información de la tarea.
Mostrar Propiedades
Mostrar Propiedades
string
ID de tarea de la plataforma.
string
pending / processing / completed / failed / unknown.number
Progreso de la tarea, normalmente 0–100. Determina la finalización mediante
status.number
Hora de creación, en segundos Unix.
number
Tiempo estimado de procesamiento en segundos, solo como referencia y no como cuenta atrás garantizada.
number
Importe (USD).
number
Puntos consumidos por la tarea. Muestra directamente el valor devuelto por la API.
object
Resultado tras completarse; la estructura varía según la operación.
object
Mensaje de error; campos comunes:
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": ""
}
}
}
Procesamiento del resultado
- Los resultados musicales suelen estar en
data.result.music[], pero descargas, letras, MIDI, Persona y modelos personalizados tienen estructuras propias. durationes la duración real y puede incluir decimales; la duración objetivo no tiene por qué coincidir exactamente con el resultado final.- El valor de peso
0es válido y no debe ocultarse por una comprobación falsy de JavaScript. audio_urlno termina necesariamente en.mp3. Reproduce o descarga usando la URL realmente devuelta.- Con
status="unknown", conserva el ID de tarea y permite actualizar manualmente sin crear nuevas tareas de forma automática.
AbortController puede detener solicitudes del navegador y el polling, pero no cancela la tarea del servidor. Actualmente no existe un endpoint para cancelar una tarea Suno enviada.