Integration Guide
Suno submits music or lyric tasks first, then uses polling or webhooks to retrieve songs, lyrics, WAV files, and timing data.
Suno uses an asynchronous task model. The music generation endpoint only submits a task; it does not return the final audio synchronously. Store the returned task ID, then call /suno/fetch/{task_id} or receive completion through callback_url.
| Scenario | Endpoint | Notes |
|---|---|---|
| Generate music | POST /suno/submit/music | Supports inspiration mode, custom lyrics, instrumental generation, continuation, and stem separation |
| Generate lyrics | POST /suno/submit/lyrics | Creates a lyric-generation task from a prompt |
| Fetch one task | GET /suno/fetch/{task_id} | Reads status, progress, songs, lyrics, and metadata |
| Batch fetch tasks | POST /suno/fetch | Refreshes multiple task IDs |
| Fetch song feed | GET /suno/feed/{clip_id} | Fetches song details by clip ID |
| Get WAV | GET /suno/act/wav/{clip_id} | Returns a WAV file URL |
| Get timing | GET /suno/act/timing/{clip_id} | Returns lyric and audio timing data |
Base Paths
Default Suno-style endpoints:
https://{BASE_URL}/suno/submit/music
https://{BASE_URL}/suno/fetchCompatible prefixes:
| Format | Prefix |
|---|---|
| GoAmz | {{BaseURL}}/suno/v1 |
| GoAmz v3.5 | {{BaseURL}}/suno/v1/mv-3.5 |
| SunoAPI | {{BaseURL}}/suno |
Generate Music
custom_mode selects the generation mode. The default 0 is inspiration mode; 1 is custom lyrics mode. In inspiration mode prompt can be up to 200 characters; in custom mode it can be up to 3000 characters and is suitable for full lyrics.
curl --location 'https://api.modelsell.com/suno/submit/music' \
--header 'Authorization: Bearer $MODELSELL_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"callback_url": "https://example.com/webhooks/suno",
"custom_mode": 1,
"make_instrumental": 0,
"prompt": "[Verse]\nWind moves without a sound\nShadows drift like a dream\n\n[Chorus]\nThe long season keeps its memory",
"mv": "chirp-v4",
"title": "Long Season",
"tags": "Trance, bass drop, female vocal",
"negative_tags": "dance pop"
}'The response can contain either one task ID or an array of task objects. Persist all returned task IDs and keep polling:
{
"code": 200,
"msg": "成功",
"data": [
{
"task_id": "f9761a3e-b396-4060-a35b-a26bbce7ba9b",
"status": 1,
"title": "",
"prompt": "美女"
}
],
"exec_time": 0.659346
}Models And Key Fields
| Field | Notes |
|---|---|
mv | Model version. Supported values include chirp-v4, chirp-v3-5, chirp-bluejay, chirp-auk, and chirp-fenix; chirp-fenix maps to Suno 5.5 / latest |
custom_mode | 0 for inspiration mode, 1 for custom lyrics mode |
make_instrumental | Pass 1 to generate instrumental music |
prompt | Up to 200 characters in inspiration mode, up to 3000 in custom mode; famous artist names may fail to generate |
tags | Style tags, up to 120 characters |
negative_tags | Styles or elements to exclude |
callback_url | Webhook URL. Completed results are sent with POST |
continue_clip_id | Previous official clip_id for continuation or stem separation; an existing task_id may also be accepted |
continue_at | Continuation timestamp in seconds |
metadata.control_sliders | Advanced controls such as style_weight, weirdness_constraint, and audio_weight |
Poll Tasks And Read Results
The task response contains status and result data. On success, read data[].audio_url for MP3, data[].image_url for cover art, and data[].metadata for style and prompt information.
curl --location 'https://api.modelsell.com/suno/fetch/f9761a3e-b396-4060-a35b-a26bbce7ba9b' \
--header 'Authorization: Bearer $MODELSELL_API_KEY'import os
import time
import requests
base_url = "https://api.modelsell.com"
headers = {"Authorization": f"Bearer {os.environ['MODELSELL_API_KEY']}"}
task_id = "f9761a3e-b396-4060-a35b-a26bbce7ba9b"
while True:
resp = requests.get(f"{base_url}/suno/fetch/{task_id}", headers=headers, timeout=30)
resp.raise_for_status()
payload = resp.json()
task = payload.get("data", payload)
if task.get("status") == "SUCCESS":
for song in task.get("data", []):
print(song.get("title"), song.get("audio_url"))
break
if task.get("status") == "FAILURE":
raise RuntimeError(task.get("fail_reason") or "Suno task failed")
time.sleep(5)Lyrics, WAV, And Timing
Generate lyrics first when you want to review or edit lyrics before sending them to music generation:
curl --location 'https://api.modelsell.com/suno/submit/lyrics' \
--header 'Authorization: Bearer $MODELSELL_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"prompt":"dance"}'After a music task succeeds, use the song clip ID to request WAV or timing data:
curl --location 'https://api.modelsell.com/suno/act/wav/90f72668-ba0d-4fa7-95e6-f71bebda88b7' \
--header 'Authorization: Bearer $MODELSELL_API_KEY'curl --location 'https://api.modelsell.com/suno/act/timing/90f72668-ba0d-4fa7-95e6-f71bebda88b7' \
--header 'Authorization: Bearer $MODELSELL_API_KEY'Integration Tips
Persist task_id, song clip_id, submit payload, status, audio URL, cover URL, and failure reason on your backend. Treat submitted, generating, succeeded, and failed as separate frontend states. For reliable delivery, poll or receive webhooks on the backend first, save results, then push updates to the frontend.
Speech Synthesis
Previous Page
Generate Music
提交 Suno 音乐生成任务,成功后返回 Suno 任务 ID,可通过 `/suno/fetch/{task_id}` 查询结果。生成音乐接口只提交任务,不直接返回最终音频;部分兼容接口会一次返回两个 Suno 任务 ID,客户端需要分别轮询或等待 Webhook 回调。 支持 Suno 灵感模式、固定自定义歌词模式、续写、纯音乐和音轨分离等参数组合。灵感模式通常传入 `gpt_description_prompt`、`tags`、`mv` 和 `title`;固定自定义歌词模式传入 `prompt` 歌词文本;音轨分离可传入 `task: gen_stem`、`continue_clip_id`、`stem_task` 等字段。`prompt` 在自定义模式最多 3000 字,灵感模式最多 200 字;`tags` 风格标签最多 120 字。传入知名艺术家名称可能无法生成。 `mv` 表示 Suno 模型版本,常用可选值包括 `chirp-v4`、`chirp-v3-5`、`chirp-bluejay`、`chirp-auk`、`chirp-fenix`。其中 `chirp-fenix` 对应 Suno 5.5 / 最新版;不传时通常按渠道默认模型处理。 已兼容 GoAmz 格式,GoAmz 接入地址前缀为 `{{BaseURL}}/suno/v1`,GoAmz 切换 v3.5 接入地址前缀为 `{{BaseURL}}/suno/v1/mv-3.5`。已兼容 SunoAPI 格式,SunoAPI 接入地址前缀为 `{{BaseURL}}/suno`。