suno-api
Sunoは、短い文章のアイデアから音楽を作成します。ドキュメントの自動ワークフローは2曲を生成し、インストゥルメンタルの選択肢も備えています。完成した音声と楽曲メタデータは、生成タスクを通じて返されます。
モデルについて
この説明はモデルの機能を紹介するものです。Ailootで利用できる入力、出力、オプションは、選択したメソッドごとに以下に記載されています。
Sunoは、文章のアイデアを楽曲に変える音楽生成サービスです。ドキュメントの自動ワークフローは、作りたい音楽の短い説明とインストゥルメンタルの選択を受け取り、2曲を生成します。完成した楽曲で聞きたいテーマ、雰囲気、音楽の方向性を、制作指示で定めてください。
まず、音楽に担わせる役割を決めます。解説のための落ち着いた背景音楽、短い動画のための勢いのある導入、旅を振り返る歌などは、それぞれ制作指示の具体的な目的になります。求める雰囲気と、その目的に重要な音楽的特徴を、いくつかの明確なフレーズで記述してください。
ボーカルのある楽曲では、創作の指示文でテーマと言語を明確にします。楽曲で表現したいアイデアと、歌唱で伝えたい調子を記述してください。完成した結果を聞き、歌声、歌詞、アレンジがどのように組み合わさっているかを確認します。確認用に、生成された楽曲情報を音声と一緒に保存してください。
インストゥルメンタルを作成する場合は、ドキュメントのインストゥルメンタル選択を使用し、音楽の方向性をテキストで記述します。求める雰囲気と、プロジェクトにとって重要であれば前面に出したい楽器を指定してください。話し声の下に流す部分や、映像の切り替えを支える部分も含め、編集映像内で使用する位置に合わせて完成した楽曲を確認します。
自動ワークフローは、送信したアイデアから2曲を生成します。別々の候補として扱い、完成した音声ファイルを両方保存してください。それぞれの導入、展開、終わりまで聞きます。雰囲気、アレンジ、予定する用途への適合性も含め、実際の楽曲を同じ目的に照らして比較してください。
生成はタスク単位で管理されます。結果を確認する間は返されたタスクIDを保存し、完成した楽曲と進行中の項目を区別してください。ドキュメントの結果には、タイトル、ステータス、音声の保存先、長さなど、楽曲ごとの情報が含まれます。完成した音声そのものを、利用可能なメタデータと元の制作指示と一緒に保存してください。
動画やプレゼンテーションでは、実際の素材に選んだ音楽を合わせて試聴します。意図する音量で、導入、切り替え、終わりを確認してください。編集に合う区間に印を付け、後から変更できるよう楽曲全体を保存します。適切な音楽の抜粋は、完成作品の声、映像、進行の速さとの関係の中で評価してください。
文章のアイデア、インストゥルメンタルの選択、モデルの選択、完成したすべての楽曲をまとめて保存します。候補を修正する必要がある場合は、話し声の下で流すにはアレンジが過密、導入の展開が遅すぎる、といった音楽上の食い違いを特定してください。有用な方向性は保ち、その問題に関係する制作指示の部分を変更します。
Ailoot Ultra · Music POST /v1/music/generations suno-api
suno-apiはじめに
Sunoは、短い文章のアイデアから音楽を作成します。ドキュメントの自動ワークフローは2曲を生成し、インストゥルメンタルの選択肢も備えています。完成した音声と楽曲メタデータは、生成タスクを通じて返されます。
- 対応する入力
- テキスト
- 結果
- 音声 · 画像 · 動画
Ailootで利用可能 · 入力とメソッド
Ailoot Ultra · Music POST /v1/music/generations
- 入力の種類
text- 出力の種類
audio,image,video
| フィールド | 種類 | 要件 | 値と制限 | デフォルト |
|---|---|---|---|---|
フィールドmodel | 種類string | 要件必須 | 値と制限 suno-api 条件: この Ailoot ルーティングセレクターをそのまま使用してください。 | デフォルト— |
フィールドgpt_description_prompt | 種類string | 要件必須 | 値と制限 条件: 楽曲のアイデアや歌のテーマを記述してください。 | デフォルト— |
フィールドmv | 種類string | 要件必須 | 値と制限 chirp-fenix, chirp-crow, chirp-bluejay, chirp-auk, chirp-v4, chirp-v3-5 条件: ドキュメントに記載された Suno のバージョンを明示的に選択してください。例では chirp-crow (v5) を使用しています。 | デフォルト— |
フィールドmake_instrumental | 種類boolean | 要件必須 | 値と制限 条件: インストゥルメンタル曲には true、歌には false を設定してください。 | デフォルト— |
メソッドのパラメータとライフサイクル
| パラメータ | 仕様 |
|---|---|
パラメータcontent_type | 仕様application/json |
パラメータrequired | 仕様model, gpt_description_prompt, mv, make_instrumental |
パラメータoptional | 仕様 |
パラメータmaterial_types | 仕様text |
パラメータconditions | 仕様この Ailoot ルーティングセレクターをそのまま使用してください。, 楽曲のアイデアや歌のテーマを記述してください。, ドキュメントに記載された Suno のバージョンを明示的に選択してください。例では chirp-crow (v5) を使用しています。, インストゥルメンタル曲には true、歌には false を設定してください。 |
ライフサイクル: submit_once_poll_original
GET /v1/music/generations/{request_id}
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
料金
最終料金の計算方法
表示料金は生成前の費用の見積もりです。最終請求額は、元の生成処理に記録された費用から計算されます。実測された出力時間や予測数量が、そのまま最終的な課金数量になるわけではありません。
料金情報はリクエストの機能を追加しません。対応するパラメーターは選択したメソッドに記載されています。
- 高速モード
- 未指定 高速モードが選択されている場合
- Flex モード
- 未指定 flex モードが選択されている場合
- 最大推論量
- 未指定 推論量が最大で、調整に既定値(default)を使用する場合
比較用の推定料金
設定別の価格
各料金を表示された条件と照合してください。選択肢となる設定の各組には、いずれか1つの料金を適用します。
| 設定 | 料金表 | 予測数量 | 課金数量 | 料金 |
|---|---|---|---|---|
| 設定基本トークン料金 | 料金表基本料金 | 予測数量— | 課金数量— | 料金 入力 · 入力トークン · 比較専用の見積もり — / 1K トークン 出力 · 出力トークン · 比較専用の見積もり — / 1K トークン 入力 · キャッシュ読み取り · 比較専用の見積もり — / 1K トークン 入力 · キャッシュ書き込み · 比較専用の見積もり — / 1K トークン 入力 · キャッシュ書き込み、1時間 · 比較専用の見積もり — / 1K トークン |
| 設定リクエストごと | 料金表— | 予測数量— | 課金数量リクエスト1件 | 料金 入力 · 比較専用の見積もり $0.2 リクエストあたり |
| 設定生成費用の見積もり | 料金表— | 予測数量生成1回分の概算 | 課金数量— | 料金 出力 · 推定生成コスト · 比較専用の見積もり $0.2 生成前の見積もり この見積もりは追加料金ではなく、完了した生成処理に対する固定料金でもありません。 |
Ailootはリクエスト前に見積額を確保します。結果の取得後、実測使用量に基づいて最終料金を精算します。ストリーミング時の精算には最終の使用量記録を使用します。金額の確保と精算の仕組み →
リクエスト例
Ailoot Ultra · Music
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
cat > request.json <<'JSON'
{
"model": "suno-api",
"gpt_description_prompt": "古诗词",
"mv": "chirp-crow",
"make_instrumental": false
}
JSON
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/music/generations \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
# Create once; retain id, polling_url, original task identifiers and every header.
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_STATUS'
import json,os,subprocess
from pathlib import Path
from urllib.parse import urljoin,urlsplit
r=json.loads(Path("result.json").read_text())
u=urljoin("https://api.ailoot.ai",r["polling_url"])
p=urlsplit(u)
if p.scheme!="https" or p.netloc!="api.ailoot.ai" or p.username or p.password:
raise SystemExit("Unexpected returned polling URL; preserve the response")
subprocess.run(["curl","--fail-with-body","--silent","--show-error",u,"-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"],"-D","status-headers.txt","-o","status.json"],check=True)
# Read this same original polling_url again while pending.
# Preserve unknown/result_pending_check; do not repeat creation.
PY_STATUS
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_ASSETS'
import json,os,subprocess
from pathlib import Path
from urllib.parse import urljoin,urlsplit
r=json.loads(Path("status.json").read_text())
roles={}
def visit(v,path=""):
if isinstance(v,dict):
for k,x in v.items(): visit(x,path+"/"+k)
elif isinstance(v,list):
for i,x in enumerate(v): visit(x,path+"/"+str(i))
elif isinstance(v,str):
u=urljoin("https://api.ailoot.ai",v); p=urlsplit(u)
if p.scheme=="https" and p.netloc=="api.ailoot.ai" and not p.username and not p.password and p.path.startswith("/v1/media/assets/") and p.path.endswith("/content"):
roles.setdefault(u,[]).append(path)
visit(r)
if not roles: raise SystemExit("No completed owned assets; retain the original status")
manifest=[]
for i,(u,paths) in enumerate(roles.items()):
target=Path(f"asset-{i}.bin")
subprocess.run(["curl","--fail-with-body","--silent","--show-error",u,"-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"],"-o",str(target)],check=True)
raw=target.read_bytes()
if not raw: raise SystemExit("Empty asset; retain original status and metadata")
ext="glb" if raw[:4]==b"glTF" else "png" if raw[:8]==b"\x89PNG\r\n\x1a\n" else "jpg" if raw[:3]==b"\xff\xd8\xff" else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "mp4" if raw[4:8]==b"ftyp" else "bin"
name=f"asset-{i}.{ext}"
if target.name!=name: target.rename(name)
manifest.append({"file":name,"response_paths":paths,"bytes":len(raw)})
Path("asset-manifest.json").write_text(json.dumps(manifest,indent=2))
print("Saved",len(manifest),"unique owned assets; every response role retained")
PY_ASSETS
結果を受け取って保存
Ailoot Ultra · Music
返された画像をすべてダウンロードするか、Base64の内容を保存
GET /v1/music/generations/{request_id}GET /v1/media/assetsGET /v1/media/assets/{asset_id}
完了した結果をすべて保存
返された完全なレスポンス、ファイル、コンテンツ部分をすべて保存してください。
完全なレスポンスとヘッダー、元の識別子、実際のすべての出力、および使用量/会計の全フィールドを保持してください。一意の所有アセットをそれぞれ保存し、それを参照するすべての役割を保持してください。
元のレスポンスを確認する場合
返された公開タスクまたは操作のidと、すべてのヘッダーを保持してください。元のタスクだけを読み取ってください。unknownまたはresult_pending_checkであっても、別の作成を行うことは認められません。
レスポンスのフィールド
| フィールド | 種類 |
|---|---|
フィールドid | 種類string |
フィールドpolling_url | 種類string |
フィールドprovider_task_id | 種類string |
フィールドdata.task_id | 種類string |
フィールドdata.status | 種類string |
フィールドdata.data[].audio_url | 種類string |
フィールドdata.data[].image_url | 種類string |
フィールドdata.data[].image_large_url | 種類string |
フィールドdata.data[].video_url | 種類string |
エイリアス
モデルのエイリアス
Ailoot Ultra suno-api
メソッドパスのエイリアス
上記に表示されたメソッドパスを使用してください。
関連する呼び出し用ID
FAQ · suno-api
- 利用できる入力と結果は何ですか?
POST /v1/music/generations·suno-api:text→audio,image,video- リクエストはどの項目を使用しますか?
POST /v1/music/generations·suno-api:model,gpt_description_prompt,mv,make_instrumental