Skip to main content
POST
cURL
The /generate endpoint supports 15 different task types, each requiring a different set of parameters. Before calling this endpoint, we strongly recommend using the Generate Schema endpoint to get the exact required/optional fields and a complete request example for your task type.

Quick Start

1

Check required parameters

Call GET /suno/v2/generate/schema?task=create to get the parameter schema and a request example for the create task.See Generate Schema →
2

Send generate request

Call POST /suno/v2/generate with the correct parameters for your task type.
3

Poll task status

Use the returned taskId to poll Get Task Status until status is success.

Task Types Overview

All tasks require the task and model fields. Use GET /suno/v2/generate/schema?task=xxx to get the full parameter details for any specific task type.

Common Parameters

These parameters are shared across most task types:

controls object

Examples

task=inspiration requires a real playlist_id from Create Playlist. The legacy pattern playlist_id: "inspiration" with playlist_clip_ids is deprecated. See the Inspiration workflow.
Not sure which parameters to pass? Call GET /suno/v2/generate/schema?task=your_task — it returns the required fields, optional fields, not-allowed fields, and a complete request example for each task type.Try Generate Schema →

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
task
enum<string>
required

Task type. Use GET /generate/schema?task=xxx to query required fields for each task.

Available options:
create,
extend,
upload_extend,
upload_cover,
cover,
use_styles_lyrics,
replace_section,
add_instrumental,
add_vocals,
gen_stem_two,
gen_stem_all,
mashup,
sample,
inspiration,
sound,
add_stems
Example:

"create"

model
string
required

Model version. Supports standard models (e.g. chirp-v50) and custom models (chirp-custom:).

Example:

"chirp-v50"

make_instrumental
boolean
default:false

Whether to make instrumental (no vocals). [Optional: all tasks]

Example:

false

prompt
string

Lyrics or prompt text. [Optional: all tasks] For replace_section: lyrics within infill_context_range (modified if replacement changes lyrics).

Example:

"[Verse]\nHello world, here I come...\n\n[Chorus]\nLa la la..."

continued_aligned_prompt
string

Full song lyrics after replacement. [Required: replace_section] Contains the complete lyrics of the entire song with the replaced section updated.

Example:

"[Verse 1]\nOriginal lyrics...\n\n[Chorus]\nNew replaced lyrics...\n\n[Verse 2]\nMore lyrics..."

infill_lyrics
string

Lyrics for the replaced section only. [Optional: replace_section] The specific lyrics within the range being replaced.

Example:

"[Bridge]\nThis is the new bridge section\nWith updated lyrics..."

gpt_description_prompt
string

Short description for GPT lyrics generation. [Optional: create, mashup, etc.]

Example:

"A happy pop song about summer vacation"

tags

Style tags. Supports string or array. [Optional: all tasks]

Example:

"Pop, Happy, Upbeat"

negative_tags

Negative style tags to exclude. [Optional: all tasks]

Example:

"Sad, Slow"

title
string

Song title. [Optional: all tasks]

Example:

"Summer Vibes"

clip_id
string

Source clip ID. [Required: extend, cover, use_styles_lyrics, replace_section, add_instrumental, add_vocals, gen_stem_*, add_stems, sample]

Example:

"clip_abc123"

continue_at
number

Continue position in seconds. [Optional: extend, upload_extend]

Required range: x >= 0
Example:

30

range
object

Target range { start_s, end_s }. [Required: replace_section, sample] For replace_section: the section to replace (duration should be > 6 seconds). For sample: the time range to sample from source clip.

Example:
infill_type
enum<string>

Infill mode for replace_section. [Optional: replace_section] "smart" = auto-select based on duration (default), "classic" = always use infill (better for long selections), "fixed" = always use fixed_infill (better for short selections).

Available options:
smart,
classic,
fixed
Example:

"smart"

infill_context_range
object

Infill context range (must encompass range). [Required: replace_section] Should extend ~30s before range.start_s and ~30s after range.end_s. If range starts within first 30s, use 0 for start_s. If range ends within last 30s of song, use song duration for end_s.

Example:
persona
object

Artist persona config for style mimicking. [Optional: create, cover, extend, replace_section]

Example:
controls
object

Advanced controls. Sliders (01): style_weight / audio_weight / weirdness_constraint. Optional duration (10360s) for custom length on chirp-v55+ (ignored on older models). [Optional: all generate tasks]

Example:
vocal_gender
enum<string>

Vocal gender (m=male, f=female). [Optional: all tasks]

Available options:
m,
f
Example:

"m"

audio_url
string<uri>

Audio URL for upload tasks. [Required: upload_extend, upload_cover]

Example:

"https://example.com/audio.mp3"

mashup_clip_ids
string[]

Two clip IDs for mashup [clip_a, clip_b]. [Required: mashup]

Example:
playlist_id
string

Suno playlist ID. [Required: inspiration] Must be obtained via /playlist/create → /playlist/addClips before calling /generate. Add inspiration clips (1–4, same account) to the playlist first. When combined with persona (vox_playlist_condition), the playlist must exist on the same account as the persona.

Example:

"119573ff-8e48-4fe6-9029-39c76c9a5597"

sound
object

Sound generation config. [Required: sound] description is the core sound prompt (also auto-used as title). type/key/bpm are optional advanced options. Tags are auto-assembled; user-provided tags are ignored for sound task.

Example:
stem_control_tags
string

Stem control tags for add_stems. [Optional: add_stems] Default "add ".

Example:

"add "

Response

201 - application/json
taskId
string
required

task id. Use this id to query task status.

Example:

"15c257ff-43f7-4678-bd41-202ad6b8488b"