Skip to main content
POST
Source Audio Reference: No additional IDs are needed for tracks based on existing songs. Just pass task_id (the task ID from the previous run of this task) + audio_index (which result track in the data.result.music[] list, 1-based, default is 1).
custom determines which fields take effect. All submitted fields must still meet their type, range, and length requirements, even when they do not take effect in the current mode. With custom=true, prompt (lyrics), title, tags, negative_tags, auto_lyrics, style_weight, weirdness, and audio_weight take effect, while gpt_description is ignored. With custom=false, only gpt_description is used; it is required, and omitting it returns 400 during submission. vocal_gender takes effect in both modes. If custom is omitted, the backend infers it in this order: prompt present → true; no prompt but gpt_description present → false; otherwise, tags or title present → true.

Authorizations

string
required
All endpoints require authentication using a Bearer TokenGet an API Key:Visit the API Key management page to get your API KeyAdd the following to the request headers when using it:

Body

string
default:"suno"
Audio model. Currently pass suno (defaults to suno if omitted).
string
required
The source task’s task_id. It must identify an uploadTask upload task; a missing, non-upload, or invalid source returns 400 during submission.
integer
default:"1"
Selects a track from the source task’s data.result.music[] array (1-based: 1 is the first track; default 1).
number
required
Sampling start point (seconds). If missing, returns 400 immediately.
number
required
Sample end time in seconds. It must satisfy 0 ≤ start_s < end_s and cannot exceed the known source duration.
boolean
default:"false"
Whether purely instrumental (true=no vocals). If omitted, defaults to false (with vocals).
string
default:"v6"
Public version: v6 / v6-wild / v6-mini. Defaults to v6; omit this field when using custom_model_id.
string
The full UUID returned by the model-creation task. Mutually exclusive with version.
boolean
true=custom mode (prompt used as lyrics); false=inspiration mode (uses gpt_description); if omitted, inferred from the content (see the Warning above).
string
Conditionally required: provide lyrics when custom=true && instrumental=false. The field is inactive in inspiration mode, but any submitted value must still meet the length limit.
string
Inspiration prompt. Required when custom=false — if missing, the request fails with 400 at submission (nothing is charged).
string
Title. Only takes effect when custom=true.
string
Style tags. Only takes effect when custom=true.
string
Style tags to exclude. Only takes effect when custom=true.
boolean
true=rewrite the provided lyrics creatively. Only takes effect when custom=true.
number
Style weight, 0.00–1.00 (out-of-range values return 400 directly at submission time). Only takes effect when custom=true.
number
Creativity weight, from 0.00 to 1.00. weirdness_constraint is accepted as a legacy alias; use weirdness for new requests.
number
Audio weight, 0.00–1.00. Only takes effect when custom=true.
string
Vocal gender: Male / Female. Works in both modes.
string
Style variation: off / normal / high / extra / max. Optional.
boolean
default:"false"
Enables Max mode. Requires custom mode and is billed at twice the standard price.
string
Output audio format: mp3 / m4a / wav. This endpoint does not support a target-duration field.
The source task must be an uploadTask upload task. Both start_s and end_s are required; the service does not fill in defaults such as 0 or 60.
Get Result: This is an asynchronous task. After submission, you will receive task_id and then poll GET /v1/music/tasks/{task_id} every 3–5 seconds until status becomes completed or failed (music generation usually takes 30–120 seconds; while generation is in progress, status may be pending or processing, and progress is an integer from 0 to 100 and is not guaranteed to change at fixed intervals). Once completed, read audio_url from data.result.music[]. In case of failure, data.error.message provides the reason and the deducted amount will be automatically refunded.

Response

integer
Response status code
array
Returned data array