強化アップロード API
インターフェースの説明
強化アップロードはローカルの音声ファイルを送信し、システムがバックグラウンドで強化処理を行って再生可能な完成楽曲を生成します。送信するとすぐにタスク情報が返り、クライアントは照会エンドポイントで進捗をポーリングします。
送信エンドポイント: POST /api/music/enhanced-upload
単一タスク照会: GET /api/music/enhanced-upload/:id
タスクのキャンセル: POST /api/music/enhanced-upload/:id/cancel
一覧照会: GET /api/music/enhanced-upload
課金: 1 回 10 元。suno-enhanced-upload の固定価格で事前に課金されます。タスクが失敗した場合、または許可された段階でキャンセルした場合は、事前に引かれた費用が自動的に返金されます。実際の請求額は現在の管理画面の価格設定に従います。
呼び出しフロー
POST /api/music/enhanced-uploadを呼び出して音声ファイルをアップロードします。- 返ってきた
task_idを保存します。 GET /api/music/enhanced-upload/:idを呼び出して進捗と結果を照会します。- Suno の最終レンダリングが完了すると、サービスはそのタスクに紐づく Suno アカウントで Studio の認可ダウンロードエンドポイントを呼び出し、MP3 を CN2 メディアサービスに書き込みます。
- CN2 の資産準備が成功して初めてタスクは
completedになり、そのときレスポンスのaudio_urlから CDN の音声アドレスを取得します。
/api/forbidden は Suno Studio のメタデータに現れることがあるプレースホルダーアドレスで、再生もダウンロードもできるリソースではありません。お客様に返されることも、完了判定の根拠に使われることもありません。レンダリングが完了していても CN2 がまだ準備中の場合、エンドポイントは processing を返し続け audio_url を返しません。クライアントはポーリングを続け、空のアドレスを失敗と見なさないでください。
強化アップロードの送信
Headers
| パラメータ名 | 型 | 必須 | 説明 |
|---|---|---|---|
| Authorization | string | はい | Bearer YOUR_API_KEY |
| Content-Type | string | いいえ | multipart リクエストでは手動指定せず、クライアントに生成させてください |
Form パラメータ
| パラメータ名 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
| file | file | はい | - | ローカル音声ファイル、最大 80 MB |
| title | string | いいえ | ファイル名から拡張子を除いたもの | 楽曲タイトル |
リクエスト例
以下の例は本番検証時と同じ呼び出し方ですが、API Key はプレースホルダーに置き換えています。
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.aac" \
-F "title=Enhanced upload demo" \
"https://www.suno-api.io/api/music/enhanced-upload"
レスポンス結果
{
"success": true,
"message": "",
"data": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "queued",
"created_at": 1781137961,
"pre_consumed_quota": 5000000,
"billing_source": "wallet"
}
}
単一タスクの照会
リクエスト例
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload/3209"
処理中のレスポンス例
{
"success": true,
"message": "",
"data": {
"task": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "processing",
"type": "enhanced_upload",
"progress": {
"stage": "media_preparing",
"percent": 98,
"label": "正在准备播放资源",
"updated_at": 1781138500
},
"pre_consumed_quota": 5000000,
"billing_source": "wallet",
"created_at": 1781137961,
"updated_at": 1781138500
}
}
}
完了レスポンス例
{
"success": true,
"message": "",
"data": {
"task": {
"task_id": 3209,
"song_id": "56cbd0bb-0e8c-4a34-8729-55d5c05d9c53",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "completed",
"type": "enhanced_upload",
"audio_url": "https://media.code-go.com/assets/56cbd0bb-0e8c-4a34-8729-55d5c05d9c53-mp3.mp3",
"duration": 217.74,
"progress": {
"stage": "completed",
"percent": 100,
"label": "已完成",
"updated_at": 1781138943
},
"pre_consumed_quota": 5000000,
"billing_source": "wallet",
"created_at": 1781137961,
"updated_at": 1781138943,
"completed_at": 1781138943
}
}
}
タスクのキャンセル
キャンセルできるのは、タスクとバックエンドのワークフローがともに queued 段階にある間だけです。leasing、running、processing に入った後や完了後はキャンセルできません。
リクエスト例
curl.exe --http1.1 -s -S -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload/3209/cancel"
レスポンス結果
{
"success": true,
"message": "",
"data": {
"task_id": 3209,
"song_id": "pending:enhanced-upload:cu_20260611003241723483700xnCcQg",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"status": "cancelled"
}
}
タスクがすでに処理を開始している場合、エンドポイントは次を返します。
{
"success": false,
"message": "强化上传已开始处理,无法取消"
}
タスク一覧の照会
一覧エンドポイントは、現在の API Key が属するユーザーの強化アップロードタスクのみを返し、通常生成・カバー・続き生成などのタスクは混ざりません。
Query パラメータ
| パラメータ名 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
| p | number | いいえ | 1 | ページ番号 |
| page_size | number | いいえ | システム既定値 | 1 ページあたりの件数、最大 100 |
リクエスト例
curl.exe --http1.1 -s -S \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://www.suno-api.io/api/music/enhanced-upload?p=1&page_size=3"
レスポンス結果
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 3,
"total": 1,
"items": [
{
"task_id": 3209,
"song_id": "56cbd0bb-0e8c-4a34-8729-55d5c05d9c53",
"client_request_id": "cu_20260611003241723483700xnCcQg",
"title": "Enhanced upload demo",
"file_name": "source.aac",
"status": "completed",
"type": "enhanced_upload",
"audio_url": "https://media.code-go.com/assets/56cbd0bb-0e8c-4a34-8729-55d5c05d9c53-mp3.mp3",
"duration": 217.74,
"progress": {
"stage": "completed",
"percent": 100,
"label": "已完成",
"updated_at": 1781138943
},
"pre_consumed_quota": 5000000,
"billing_source": "wallet",
"created_at": 1781137961,
"updated_at": 1781138943,
"completed_at": 1781138943
}
]
}
}
返却フィールドの説明
| フィールド | 型 | 説明 |
|---|---|---|
| task_id | number | 強化アップロードタスク ID。以降の照会とキャンセルにこの値を使います |
| song_id | string | 処理中は pending:enhanced-upload:*、完了後は実在の楽曲 ID |
| client_request_id | string | クライアントのリクエスト追跡 ID |
| status | string | タスク状態。queued、processing、completed、failed、cancelled など |
| type | string | 常に enhanced_upload |
| audio_url | string | 完了後の音声アドレス |
| duration | number | 音声の長さ(秒) |
| progress.stage | string | 現在の処理段階 |
| progress.percent | number | 進捗のパーセント |
| progress.label | string | ユーザー向けに表示する進捗文言 |
| pre_consumed_quota | number | 今回の事前扣費額 |
| billing_source | string | 課金元。例えば wallet |
| error_message | string | 失敗理由 |
注意事項
- 現在このエンドポイントは multipart のファイルアップロードのみに対応し、JSON の
file_urlやfile_base64には対応していません。 - アップロードできるファイルは最大 80 MB です。
- 送信エンドポイントは非同期です。
queuedが返るのはタスクがキューに入ったという意味で、音声が完成したという意味ではありません。 - キャンセルはまだ処理が始まっていないタスクにのみ有効です。処理段階に入るとプラットフォームアカウントのワークフローは中断されません。
- クライアントコードに実際の API Key を露出させないでください。
強化アップロード完了後のカバー開始
強化アップロードが完了したら、その完了結果をソース clip として POST /api/music/generate-from-source を呼び出し、カバーを開始できます。
注意:カバーは同期エンドポイントで、レスポンスが返った時点で初めて注文が受理されます。実測では最大約 230 秒待つことがあります。クライアントのタイムアウトは 300 秒以上に設定し、タイムアウト後すぐに再試行しないでください。詳しくは新版 API 概要の「待ち時間とタイムアウト設定」をご覧ください。
まず GET /api/music/enhanced-upload/:id をポーリングし、task.status が completed になるまで待ちます。そのとき:
task.song_idは実在の楽曲 ID で、カバーエンドポイントが必要とするsourceClipIdでもあります。task.audio_urlはsourceAudioUrlとして一緒に渡すことをおすすめします。ソース clip と実行アカウントが一致しない場合にサーバーが処理しやすくなります。task.task_idは強化アップロードのタスク ID にすぎず、sourceClipIdには使えません。pending:enhanced-upload:*は処理段階のプレースホルダー ID で、カバーには使えません。
カバーを開始するときは、強化アップロードと同じ API Key を使い、以下のフィールド対応でリクエストを組み立ててください。
| カバーのリクエストフィールド | 値の取得元 |
|---|---|
sourceClipId |
強化アップロード完了結果の task.song_id |
sourceAudioUrl |
強化アップロード完了結果の task.audio_url |
sourceTitle |
強化アップロード完了結果の task.title |
残りの歌詞・スタイル・タイトル・モデルなどのパラメータはソース clip からのカバー APIに従って記入します。カバーエンドポイントが新しい clips[].song_id を返したら、POST /api/music/query で生成状態と最終的な音声を照会してください。