Suno APIの使い方:1曲生成とダウンロード
Suno APIの使い方は4ステップです。APIキーを作成し、/api/music/createで生成、
song_idで確認、MP3/WAVをダウンロードします。1回0.6元です。
現在の既定生成モデルは
suno-v6です。suno-v2からsuno-v5-5までの通常生成 モデルは終了しており、過去のタスクには残っていても新規リクエストには使えません。
お使いの AI アシスタントを開き、次の一文を送ってください。Agent Kit の onboarding に従って設定を完了します。
次のアドレスから suno-api agent kit をダウンロード、インストール、設定してください https://www.suno-api.io/suno-agent-kit.zip
おすすめ:AI に接続作業を任せる
AI は 00_START_HERE.md を読み、登録、API Key の保存、残高確認、全機能の説明、最初の生成を案内します。課金操作は実行前に確認し、タイムアウト時に自動で再送しません。
ステップ 1:API キーを取得する
- https://www.suno-api.io を開きます。
- API キーを取得 をクリックして登録またはログインします。メールアドレスだけで 登録でき、電話番号は不要です。
- コンソールのトークン管理で新しいキーを作成します。
- キーは一度しか表示されないので、すぐにコピーしてください。最初の有料呼び出しの前に 交換コードで残高をチャージします。
ステップ 2:リクエストを設定する
すべての呼び出しで同じベース URL とヘッダーを使います。
POST https://www.suno-api.io
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
ステップ 3:最初のリクエストを送る
例 1 — 1 行の説明から生成する
曲の説明を書くと、歌詞・メロディ・編曲まで自動で作られます。
curl -X POST https://www.suno-api.io/api/music/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--max-time 300 \
-d '{
"description": "春の訪れを歌った軽快なフォーク",
"model": "suno-v6"
}'
レスポンス例:
[
{
"song_id": "abc123",
"status": "pending",
"song_title": "春の物語",
"description": "春の訪れを歌った軽快なフォーク",
"created_at": "2026-04-22T10:30:00Z"
},
{
"song_id": "def456",
"status": "pending",
"song_title": "春の足音",
"description": "春の訪れを歌った軽快なフォーク",
"created_at": "2026-04-22T10:30:00Z"
}
]
1 回の生成で 2 つの異なるテイクが返るので、良い方を選べます。料金は 1 回 0.6 元です。
例 2 — 生成の進行状況を確認する
返ってきた song_id を照会 API に渡します。
curl -X POST https://www.suno-api.io/api/music/query \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"song_ids": ["abc123", "def456"],
"model": "suno-v6"
}'
生成中のレスポンス:
[
{
"song_id": "abc123",
"status": "processing",
"song_title": "春の物語",
"progress": "60%"
}
]
完了時のレスポンス:
[
{
"song_id": "abc123",
"status": "completed",
"song_title": "春の物語",
"audio_url": "https://media.code-go.com/assets/abc123-mp3.mp3",
"video_url": "https://media.code-go.com/assets/abc123-mp4.mp4",
"cover_url": "https://media.code-go.com/assets/abc123-cover.jpg",
"duration": 168
}
]
status は pending、submitted、processing を経て completed になります。処理中は
アドレスが空のことがあるため、audio_url の有無ではなく status で判断してください。
ステップ 4:ファイルをダウンロードする
status が completed になったら audio_url をそのまま取得します。MP3 と WAV の
ダウンロードは無制限で、追加料金もありません。編集用に無劣化音源が必要な場合は WAV
API を使ってください。
⚠️ メディア URL は 7 日で失効します。
audio_url(および WAV などのリンク)は当社のオブジェクトストレージから配信されます。7 日以内にご自身のストレージへ保存してください。失効後は古い URL が 404 になりますが、歌曲照会 API を呼び直すと新しい有効な URL を取得できます(再生成は不要、追加課金もありません)。
よくある使い方
動画のBGM
{
"description": "製品紹介動画向けの落ち着いた lo-fi BGM、ボーカルなし、起伏は控えめ",
"instrumental": true,
"model": "suno-v6"
}
instrumental を true にすると、ボーカルなしのインストゥルメンタルのみを生成します。
歌詞とスタイルを指定する
{
"lyrics": "[Verse 1]\n街の灯りがゆっくり消えていく\n\n[Chorus]\n僕らは歩き続ける",
"style": "acoustic pop, 温かい女性ボーカル, 92 BPM",
"model": "suno-v6"
}
完了までポーリングする
import time
import requests
API_KEY = "sk-your-key-here"
BASE = "https://www.suno-api.io"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
created = requests.post(
f"{BASE}/api/music/create",
headers=HEADERS,
json={"description": "春の訪れを歌った軽快なフォーク", "model": "suno-v6"},
).json()
song_ids = [track["song_id"] for track in created]
for _ in range(60):
time.sleep(10)
tracks = requests.post(
f"{BASE}/api/music/query",
headers=HEADERS,
json={"song_ids": song_ids, "model": "suno-v6"},
).json()
if all(track.get("status") == "completed" for track in tracks):
for track in tracks:
print(track["song_title"], track["audio_url"])
break
エラー処理
主なステータスコード
| コード | 意味 | 対応 |
|---|---|---|
| 200 | 成功 | レスポンス本文を読みます |
| 400 | 不正なリクエスト(パラメータの欠落・形式エラー) | リファレンスと突き合わせます |
| 401 | API キーがない、または無効 | Authorization ヘッダーを確認します |
| 402 | 残高不足 | チャージしてから再試行します |
| 403 | キーが無効化、またはアカウント停止 | サポートにお問い合わせください |
| 429 | レート制限 | 指数バックオフで再試行します |
| 500 | サーバーエラー | 再試行し、続く場合は問い合わせます |
エラー応答の形式
{
"error": {
"message": "Invalid API key provided",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
待ち時間とタイムアウト(重要): 生成系エンドポイントは同期インターフェースで、レスポンスが返った時点で初めて注文が受理され生成に投入されます。実測では多くのリクエストが 1〜3 秒で返り、約 10% が 30 秒を超え、最長は約 230 秒です。クライアントのタイムアウトは 300 秒以上に設定してください(上の例の
--max-time 300)。レスポンスが無いことは未生成を意味せず、タイムアウト直後に再試行しないでください(注文が重複し二重課金になります)。 接続が切れた場合は少し後にGET /api/music/songsで確認できます。詳しくは新版 API 概要の「待ち時間とタイムアウト設定」をご覧ください。
ベストプラクティス
- キーはサーバー側でのみ使ってください。ブラウザや配布するアプリに含めないでください。
- ポーリング間隔は 10〜15 秒が目安です。詰めすぎないでください。
song_idは保存してください。生成した音源を後から取得する唯一の識別子です。429と500は再試行し、400と401は原因を直してから送ってください。- 失敗した生成は自動で返金されるため、費用は発生しません。
- クライアントのタイムアウト: 生成系エンドポイントは応答が返った時点で受理完了です。タイムアウトは 300 秒以上に設定してください。
- 再試行: 明確な失敗応答(4xx/5xx)にだけ再試行します。接続のタイムアウトや切断のあとは、まず
GET /api/music/songsで受理済みかどうかを確認し、注文の重複と二重課金を避けてください。