curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "認証に失敗しました。API キーを確認してください。",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "アカウント残高が不足しています",
"type": "payment_required"
}
}
Suno
音声ファイルのダウンロード
- Suno の楽曲を MP3、M4A、WAV 形式でダウンロード
- 1 回のリクエストで複数形式を指定し、各ファイルの URL を取得
- task_id と audio_index で元の楽曲を選択
- 非同期で送信し、音楽タスク API から結果を取得
POST
/
v1
/
music
/
generations
/
download
curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "認証に失敗しました。API キーを確認してください。",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "アカウント残高が不足しています",
"type": "payment_required"
}
}
旧
POST /v1/music/generations/wav は非推奨です。当面は互換性のため利用でき、新 API に formats: ["wav"] を渡す場合と同等です。新規実装では POST /v1/music/generations/download を使用してください。元の楽曲を選択: 音声を作成したタスクの
task_id を渡し、audio_index で結果の music[] から楽曲を選びます。インデックスは 1 始まりで、既定値は 1 です。curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "認証に失敗しました。API キーを確認してください。",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "アカウント残高が不足しています",
"type": "payment_required"
}
}
認証
リクエストパラメータ
string
デフォルト:"suno"
モデル名。
suno を使用し、省略時も suno になります。string
必須
元の楽曲を作成したときに返されたタスク ID。元タスクは現在のアカウントに属し、完了済みで、ダウンロード可能な音声を含む必要があります。楽曲生成、延長、カバー、ステム分離などは利用できますが、歌詞や BPM 解析などのテキストのみのタスクは利用できません。
integer
デフォルト:"1"
元タスクの
music[] 結果からダウンロードする楽曲番号。1から開始- 既定値:
1 - 元タスク内の楽曲数を超える値は不可
string[]
ダウンロードする形式の配列。1 項目以上必要です。対応形式:
mp3、m4a、wav。複数形式を同時に指定できます。大文字小文字は区別せず、重複は自動削除され、結果はリクエスト順で返ります。string
1 形式だけの場合、
formats の代わりに使用できます。例:"format": "mp3"formats または format のどちらかを使用してください。両方を省略するか空配列にすると HTTP 400 が返ります。送信レスポンス
成功するとダウンロードタスク用の新しいtask_id が返ります。
data は配列です。data[0].task_id を読み取ってください。この ID は新しいダウンロードタスクのもので、リクエストに渡した元楽曲の task_id とは異なります。ダウンロード結果の照会
送信レスポンスのダウンロードタスク ID を使用します。GET /v1/music/tasks/{task_id}
completed または failed でなければ 2 秒ごとに最大 60 秒間ポーリングしてください。
完了
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "completed",
"progress": 100,
"cost": 0.01,
"credits_cost": 0.1,
"result": {
"music_id": "518c74ee-62ac-4ccd-b3d9-7003acd12ad7",
"files": [
{
"format": "mp3",
"url": "https://assets.apimart.ai/audio/example.mp3"
},
{
"format": "wav",
"url": "https://assets.apimart.ai/audio/example.wav"
}
],
"wavUrl": "https://assets.apimart.ai/audio/example.wav"
}
}
}
result.files[] を使用します。
| フィールド | 型 | 説明 |
|---|---|---|
format | string | mp3 / m4a / wav |
url | string | ファイル URL |
result.wavUrl は旧 WAV API との互換性のためだけに存在します。新しいコードは常に result.files[] を使用してください。処理中
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "processing",
"progress": 50,
"created": 1756800000
}
}
result はありません。ポーリングを続けてください。
失敗
失敗タスクは自動返金されcost: 0 になります。error.message を表示し、再試行を案内してください。
ファイル URL
通常は APIMart のファイルドメインが返ります。保存処理に失敗した場合は上流 CDN の URL が返ることがあり、有効期間は保証されません。URL を取得したら早めにダウンロードして保存してください。一時 URL を長期保存先として扱わないでください。
エラー
入力検証エラーはタスク作成・課金前に HTTP 400 を返します。| エラー文字列 | 原因 |
|---|---|
formats is required / must contain at least one | 形式が未指定 |
unsupported format | mp3 / m4a / wav 以外 |
task_id is required / invalid task_id format | 元タスク ID がない、または不正 |
source task not found | 元タスクがない、または別アカウントのもの |
audio_index N out of range | 楽曲番号が範囲外 |
track #N has no music_id | 元タスクが未完了、または音声なし |
model_price_not_configured の場合は suno@download の価格が未設定です。サポートへ連絡してください。
課金と再ダウンロード
- 複数形式を 1 回で指定した場合、課金も 1 回です
- 同じ楽曲を再度送信すると、同じ形式でも再課金されます
- 後から別形式を要求する場合も新しい課金になります
- 失敗タスクは自動返金されます
返された URL を再利用し、リクエスト中はダウンロードボタンを無効にして重複送信・課金を防いでください。
旧 API からの移行
| 項目 | 旧 | 新 |
|---|---|---|
| パス | /v1/music/generations/wav | /v1/music/generations/download |
| 形式 | WAV のみ | MP3 / M4A / WAV、複数可 |
| パラメータ | — | formats または format |
| 結果 | result.wavUrl | result.files[] |
/generations/download を使用してください。
Response
integer
レスポンスコード。成功時は 200