Suno Music Generation
Generate AI-powered music through AceDataCloud's Suno API.
Setup: See authentication for token setup.
Quick Start
curl -X POST https://api.acedata.cloud/suno/audios \
-H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"prompt": "a happy pop song about coding", "model": "chirp-v5-5", "callback_url": "https://api.acedata.cloud/health"}'
Async: All generation is async. See async task polling. Poll via
POST /suno/taskswith{"id": "<task_id>"}every 3-5 seconds.
Available Models
| Model | Best For |
|---|---|
chirp-v5-5 |
Latest, highest quality |
chirp-v5 |
High quality |
chirp-v4-5-plus |
Enhanced v4.5 |
chirp-v4-5 |
Good balance of quality and speed |
chirp-v4 |
Fast, reliable |
chirp-v3-5 |
Legacy, stable |
chirp-v3-0 |
Legacy |
Core Workflows
1. Quick Generation (Inspiration Mode)
Generate a song from a text description. Suno creates lyrics, style, and music automatically.
POST /suno/audios
{
"prompt": "an upbeat electronic track about the future of AI",
"model": "chirp-v5-5",
"instrumental": false
}
2. Custom Generation (Full Control)
Provide your own lyrics, title, and style for precise control.
POST /suno/audios
{
"custom": true,
"lyric": "[Verse]\nCode is poetry in motion\n[Chorus]\nWe build the future tonight",
"title": "Digital Dreams",
"style": "Synthwave, Electronic, Dreamy",
"model": "chirp-v5-5",
"vocal_gender": "f"
}
3. Extend a Song
Continue an existing song from a specific timestamp with new lyrics.
POST /suno/audios
{
"action": "extend",
"audio_id": "existing-audio-id",
"lyric": "[Bridge]\nNew section lyrics here",
"continue_at": 120.0,
"style": "Same style as original"
}
4. Cover / Remix
Create a new version of an existing song in a different style.
POST /suno/audios
{
"action": "cover",
"audio_id": "existing-audio-id",
"style": "Jazz, Acoustic, Mellow"
}
5. Full Song Creation Workflow
For best results follow this multi-step workflow:
- Generate lyrics —
POST /suno/lyricswith a topic/prompt - Optimize style —
POST /suno/styleto refine style description - Generate music —
POST /suno/audioswith custom action, lyrics + style - Poll task —
POST /suno/taskswithid(oridsfor batch) until status is complete - Optional: Extend — Use extend action to add more sections
- Optional: Concat — Use concat action to merge extended segments
- Optional: Convert — Get WAV (
/suno/wav), MIDI (/suno/midi), or MP4 (/suno/mp4)
Available Actions
| Action | Description |
|---|---|
generate |
Generate from prompt (default) |
extend |
Continue an existing audio from a timestamp |
upload_extend |
Upload external audio, then extend it |
upload_cover |
Upload external audio, then create a cover |
concat |
Concatenate extended segments into one track |
cover |
Copy the style of an existing audio |
artist_consistency |
Generate in a custom singer's style |
artist_consistency_vox |
Artist consistency with vocal focus |
stems |
Separate a track into stems |
all_stems |
Separate into all available stems |
replace_section |
Replace a specific time range in a song |
underpainting |
Add accompaniment to an uploaded song |
overpainting |
Add vocals to an uploaded song |
remaster |
Remaster an existing audio |
mashup |
Blend multiple audio IDs together |
samples |
Add samples to an uploaded song |
inspo |
Generate a song inspired by an existing audio |
Custom Music Models (Beta)
Custom models learn reusable musical characteristics from 6–24 authorized audio files. Creation is a paid, long-running operation. Ask the user to confirm the files and cost before submitting it.
Create
POST /suno/custom-models
{
"action": "create",
"name": "My Album Sound",
"audio_urls": [
"https://cdn.example.com/track-01.mp3",
"https://cdn.example.com/track-02.mp3",
"https://cdn.example.com/track-03.mp3",
"https://cdn.example.com/track-04.mp3",
"https://cdn.example.com/track-05.mp3",
"https://cdn.example.com/track-06.mp3"
]
}
Send a stable Idempotency-Key header and reuse it after network failures. Save the returned id; query it until status is ready.
Query and list
POST /suno/custom-models
{"action": "retrieve", "id": "<custom-model-id>"}
POST /suno/custom-models
{"action": "retrieve_batch", "status": "ready", "limit": 20, "offset": 0}
Generate
POST /suno/custom-models
{
"action": "generate",
"id": "<ready-custom-model-id>",
"lyric": "[Verse]\nOriginal lyrics here",
"style": "warm indie pop",
"title": "New Song",
"async": true
}
Async acceptance is not terminal success: poll the returned task and inspect response.success. A custom-model request never falls back to another model. The model must belong to the current Suno application and have status: "ready".
Archive
POST /suno/custom-models
{"action": "delete", "id": "<custom-model-id>"}
delete archives the platform resource and prevents further use. capacity_released: false means it does not promise that model capacity was released.
Auxiliary Endpoints
| Endpoint | Method | Purpose |
|---|---|---|
/suno/lyrics |
POST | Generate structured lyrics from a prompt (model: "default" or "remi-v1") |
/suno/style |
POST | Optimize/refine a style description |
/suno/mashup-lyrics |
POST | Combine two sets of lyrics |
/suno/mp4 |
POST | Get MP4 video version of a song |
/suno/wav |
POST | Convert to lossless WAV format |
/suno/midi |
POST | Extract MIDI data for DAW editing |
/suno/vox |
POST | Extract vocal track (stem separation) |
/suno/voices |
POST | Create a reusable voice from an audio URL; requires audio_url, with optional name and description |
/suno/timing |
POST | Get word-level timing/subtitles |
/suno/persona |
POST | Save a vocal style as a reusable persona; requires audio_id and name |
/suno/persona |
GET | List reusable personas |
/suno/persona |
DELETE | Delete a reusable persona |
/suno/upload |
POST | Upload external audio for extend/cover |
/suno/tasks |
POST | Query task status and results |
/suno/custom-models |
POST | Create, generate with, query, list, or archive custom music models |
Advanced Parameters
| Parameter | Type | Description |
|---|---|---|
lyric_prompt |
object | Structured prompt payload for auto-generating lyrics (used when custom: true without explicit lyric) |
negative_tags |
string | Style or genre tags to avoid (e.g., "heavy metal, distortion"); used in custom mode |
style_influence |
number | Strength of style influence (advanced custom mode, v5+ only) |
audio_weight |
number | Weight for audio reference when covering (advanced, v5+ only) |
duration |
integer | Target track length in seconds (typically 10–360). Best supported on generate with custom: true on newer models such as chirp-v5-5 |
Lyrics Format
Use section markers in square brackets:
[Verse 1]
Your verse lyrics here
[Chorus]
Catchy chorus lyrics
[Bridge]
Bridge section
[Outro]
Ending lyrics
Gotchas
- All generation is async — always set
"callback_url"to get a task id immediately, then poll/suno/tasksusing{"id":"<task_id>"}or{"ids":[...],"action":"retrieve_batch"} - CRITICAL: Check the
statefield — onlystate: "complete"withsuccess: truemeans done. Duringpending, the API may return intermediateaudio_urlvalues (streaming previews). Do NOT stop polling just becauseaudio_urlis non-empty - Lyrics max ~3000 characters. For longer songs, use the extend workflow
- Style tags are descriptive phrases, not enum values (e.g., "Synthwave, Electronic, Dreamy")
vocal_gender("f"/"m") is only supported on v4.5+ modelsvariation_category("high"/"normal"/"subtle") is only supported on v5+ modelsdurationis forwarded as you send it — support varies by model and action, and an unsupported combination may ignore it or return an error, so verify with one request before batching. Note the requestdurationis a target; thedurationin each returned clip is the actual length and will vary slightly- The
concataction merges extended song segments — requires audio_id of the extended track personarequires an existingaudio_idand aname; optionalvox_audio_id,vocal_start,vocal_end, anddescriptionrefine the vocal reference- Upload external audio via
/suno/uploadbefore using it with extend/cover
MCP:
pip install mcp-suno| Hosted:https://suno.mcp.acedata.cloud/mcp| See all MCP servers