Suno Allgemeine Konventionen und Aufgabenabfrage
curl --request GET \
--url https://api.apimart.ai/v1/music/tasks/{task_id}import requests
url = "https://api.apimart.ai/v1/music/tasks/{task_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
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",
]);
$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)
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}")
.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)
response = http.request(request)
puts response.read_body{
"task_id": "task_01ABC...",
"status": "completed",
"progress": 100,
"data": {
"result": {
"music": [
{
"audio_id": "<track id, used with audio_index to locate it for subsequent operations>",
"title": "Summer Breeze",
"duration": 128.5,
"lyrics": "……",
"tags": "electronic, upbeat",
"audio_url": "https://.../xxx.mp3",
"image_url": "https://.../cover.png",
"image_large_url": "https://.../cover_large.png",
"video_url": "https://.../mv.mp4"
}
]
}
}
}
{
"task_id": "task_01ABC...",
"status": "failed",
"progress": 100,
"data": {
"error": {
"message": "generation failed"
}
}
}
Suno
Suno Allgemeine Konventionen und Aufgabenabfrage
- Allgemeine Hinweise zur Suno-Musik-API: Authentifizierung, Lebenszyklus asynchroner Aufgaben, model / version, Referenz auf Quell-Audiospuren
- Aufgabenabfrage: GET /v1/music/tasks/:task_id, abfragen bis completed / failed
GET
/
v1
/
music
/
tasks
/
{task_id}
Suno Allgemeine Konventionen und Aufgabenabfrage
curl --request GET \
--url https://api.apimart.ai/v1/music/tasks/{task_id}import requests
url = "https://api.apimart.ai/v1/music/tasks/{task_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
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",
]);
$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)
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}")
.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)
response = http.request(request)
puts response.read_body{
"task_id": "task_01ABC...",
"status": "completed",
"progress": 100,
"data": {
"result": {
"music": [
{
"audio_id": "<track id, used with audio_index to locate it for subsequent operations>",
"title": "Summer Breeze",
"duration": 128.5,
"lyrics": "……",
"tags": "electronic, upbeat",
"audio_url": "https://.../xxx.mp3",
"image_url": "https://.../cover.png",
"image_large_url": "https://.../cover_large.png",
"video_url": "https://.../mv.mp4"
}
]
}
}
}
{
"task_id": "task_01ABC...",
"status": "failed",
"progress": 100,
"data": {
"error": {
"message": "generation failed"
}
}
}
Diese Seite enthält die allgemeinen Konventionen für alle Suno-Musik-APIs und wird zusammen mit der jeweiligen Einzeldokumentation der Endpunkte verwendet. Alle Generierungs- / Bearbeitungs-APIs sind asynchrone Aufgaben: Beim Absenden erhalten Sie eine
task_id, anschließend fragen Sie die Abfrage-API auf dieser Seite ab, um das Ergebnis zu erhalten.Authentifizierung
Alle Anfragen müssen im Anfrage-Header Folgendes mitführen:Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Aufgabenlebenszyklus (alle APIs sind asynchron)
1
Absenden
POST /v1/music/generations/<operation> → gibt sofort unsere task_id zurück:{ "code": 200, "data": [ { "status": "submitted", "task_id": "task_xxx" } ] }
2
Abfragen
GET /v1/music/tasks/:task_id bis status completed oder failed ist. Während der Generierung ist status pending und progress läuft von Warteschlange 10 → bereit 50 → fertig 100. Empfohlenes Abfrageintervall 3–5s; die Musikgenerierung dauert in der Regel 30–120s.3
Ergebnis abrufen
Nach Abschluss
audio_url / image_url / video_url usw. aus data.result.music[] abrufen.submitted → pending → completed / failed. Bei einem Fehlschlag gibt data.error.message den Grund an, und das vorab reservierte Guthaben wird automatisch zurückerstattet.
Version
v3.5 / v4 / v4.5 / v4.5+ / v4.5-all / v5 / v5.5, beeinflusst Klangqualität und Abrechnung; ohne Angabe wird die Standardversion verwendet. Verfügbare Versionen und Standardwerte unterscheiden sich je Endpunkt — manche unterstützen nur eine Teilmenge, und manche haben gar keine Versionsdimension; maßgeblich ist die jeweilige Endpunkt-Dokumentation.
Quell-Audiospur referenzieren: task_id + audio_index
Für Operationen auf Basis vorhandener Songs (Fortsetzen / Cover / Stem-Trennung / Gesang hinzufügen / Zuschneiden …) müssen Sie sich keine zusätzliche id merken, übergeben Sie nur:task_id: unseretask_idder Aufgabe, die die Quell-Audiospur erzeugt hataudio_index: welcher Song aus dem Ergebnismusic[]dieser Aufgabe (1-basiert, Standard1; eine Generierung erzeugt in der Regel 2 Songs: 1 und 2)
Wenn die Quelle nicht aufgelöst werden kann (Aufgabe nicht abgeschlossen / Index außerhalb des Bereichs /
task_id nicht gefunden), wird bereits beim Absenden ein 400 zurückgegeben.Aufgabe abfragen: GET /v1/music/tasks/:task_id
string
erforderlich
Die von der Absende-API zurückgegebene, unsere
task_id.status completed oder failed ist. Nach Abschluss die Produkte aus data.result.music[] abrufen.
Response
string
Eindeutige Kennung der Aufgabe
string
Aufgabenstatus:
submitted / pending / completed / failedinteger
Fortschritt: Warteschlange
10 → bereit 50 → fertig 100object
Ergebnisdaten
Anzeigen Eigenschaften
Anzeigen Eigenschaften
object
Vorhanden, wenn
status completed istAnzeigen result Eigenschaften
Anzeigen result Eigenschaften
array
Ergebnisliste (eine Generierung erzeugt in der Regel 2 Songs)
{
"task_id": "task_01ABC...",
"status": "completed",
"progress": 100,
"data": {
"result": {
"music": [
{
"audio_id": "<track id, used with audio_index to locate it for subsequent operations>",
"title": "Summer Breeze",
"duration": 128.5,
"lyrics": "……",
"tags": "electronic, upbeat",
"audio_url": "https://.../xxx.mp3",
"image_url": "https://.../cover.png",
"image_large_url": "https://.../cover_large.png",
"video_url": "https://.../mv.mp4"
}
]
}
}
}
{
"task_id": "task_01ABC...",
"status": "failed",
"progress": 100,
"data": {
"error": {
"message": "generation failed"
}
}
}