Suno 共通仕様とタスク照会
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 共通仕様とタスク照会
- Suno 音楽インターフェースの共通説明:認証、非同期タスクのライフサイクル、model / version、ソース音源の参照
- タスク照会:GET /v1/music/tasks/:task_id、completed / failed になるまでポーリング
GET
/
v1
/
music
/
tasks
/
{task_id}
Suno 共通仕様とタスク照会
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 音楽インターフェースに共通する仕様であり、各エンドポイント個別のドキュメントと併せて使用します。すべての生成 / 編集インターフェースは非同期タスクです:送信して
task_id を取得し、本ページの照会インターフェースをポーリングして結果を取得します。認証
すべてのリクエストで、リクエストヘッダーに以下を含める必要があります:Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
タスクのライフサイクル(すべてのインターフェースが非同期)
1
送信
POST /v1/music/generations/<operation> → 即座に task_id を返します:{ "code": 200, "data": [ { "status": "submitted", "task_id": "task_xxx" } ] }
2
ポーリング
GET /v1/music/tasks/:task_id を status が completed または failed になるまで実行します。生成中は status が pending で、progress は 待機 10 → 準備完了 50 → 完了 100 と進みます。ポーリング間隔は 3〜5s を推奨します。音楽生成は通常 30〜120s かかります。3
結果の取得
完了時、
data.result.music[] から audio_url / image_url / video_url などを取得します。submitted → pending → completed / failed。失敗した場合は、data.error.message に理由が示され、事前に差し引かれた額度が自動的に返還されます。
バージョン
v3.5 / v4 / v4.5 / v4.5+ / v4.5-all / v5 / v5.5。音質と課金に影響します。指定しない場合はデフォルトを使用します。対応状況とデフォルト値はエンドポイントごとに異なり、一部は一部のバージョンのみ対応し、一部はバージョンの区分がまったくありません。各エンドポイント個別のドキュメントを参照してください。
ソース音源の参照:task_id + audio_index
既存の楽曲に基づく操作(続き生成 / カバー / トラック分離 / ボーカル追加 / トリミング…)では、追加の id を一切記録する必要はありません。以下のみを渡します:task_id:ソース音源を生成したそのタスクのtask_idaudio_index:そのタスク結果music[]の何番目の曲か(1 始まり、デフォルト1。1 回の生成で通常 2 曲:1 と 2)
ソースを解決できない場合(タスクが未完了 / 番号が範囲外 /
task_id が存在しない)、送信時に 400 を返します。タスク照会:GET /v1/music/tasks/:task_id
string
必須
送信インターフェースが返した
task_id。status が completed または failed になるまでポーリングします。完了後、data.result.music[] から成果物を取得します。
Response
string
タスクの一意の識別子
string
タスクステータス:
submitted / pending / completed / failedinteger
進捗:待機
10 → 準備完了 50 → 完了 100object
結果データ
表示 属性
表示 属性
object
{
"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"
}
}
}