Generate Schema
curl --request GET \
--url https://api.mountsea.ai/suno/v2/generate/schemaimport requests
url = "https://api.mountsea.ai/suno/v2/generate/schema"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.mountsea.ai/suno/v2/generate/schema', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mountsea.ai/suno/v2/generate/schema",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mountsea.ai/suno/v2/generate/schema"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.mountsea.ai/suno/v2/generate/schema")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mountsea.ai/suno/v2/generate/schema")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"task": "<string>",
"description": "<string>",
"required": [
{}
],
"optional": [
{}
],
"notAllowed": [
{}
],
"example": {}
}Suno
Generate Schema
Get the required and optional fields for each generate task type
GET
/
suno
/
v2
/
generate
/
schema
Generate Schema
curl --request GET \
--url https://api.mountsea.ai/suno/v2/generate/schemaimport requests
url = "https://api.mountsea.ai/suno/v2/generate/schema"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.mountsea.ai/suno/v2/generate/schema', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mountsea.ai/suno/v2/generate/schema",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mountsea.ai/suno/v2/generate/schema"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.mountsea.ai/suno/v2/generate/schema")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mountsea.ai/suno/v2/generate/schema")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"task": "<string>",
"description": "<string>",
"required": [
{}
],
"optional": [
{}
],
"notAllowed": [
{}
],
"example": {}
}Machine-readable required / optional / example for each Generate task. The same content, written out per task, is on Generate tasks. Legacy model names (
chirp-v55 and older) are still accepted and always auto-converted to v6 Pro.
For task=create, example is a map: custom / simple_idea / simple_audio_refs. Simple = omit prompt + no persona + at least one of gpt_description_prompt / audio_refs / attached_styles / attached_lyrics / image_urls / video_url. attached_lyrics pins full lyrics while prompt stays empty. image_urls is 1–5 jpeg or png URLs. video_url is one mp4 URL (at most 500MB). All three are Simple only. audio_refs is ByModel (no same-account / ById requirement).
replace_simple = replace_section where the server computes infill_context_range / mode / lyrics from clip_id + range. Schema examples include replaceSection / replaceSimple.
Recommended Workflow: Before calling
/generate, first call this endpoint with your desired task type to understand exactly which fields to include in your request.Query Parameters
string
The task type to get schema for. If not provided, returns schemas for all tasks.
| Value | Description |
|---|---|
create | New song — Custom or Simple (see Generate) |
extend | Extend existing music |
upload_extend | Extend uploaded audio |
upload_cover | Cover uploaded audio |
cover | Create cover of existing clip |
use_styles_lyrics | Use styles from existing clip with new lyrics |
replace_section | Replace a section — you compute context / lyrics |
replace_simple | Simple replace — server computes context (stored as replace_section) |
add_instrumental | Add instrumental to audio |
add_vocals | Add vocals to audio |
gen_stem_two | Generate two-track stems |
gen_stem_all | Generate all stems |
mashup | Mashup two songs |
sample | Sample from existing clip |
inspiration | Generate from inspiration playlist |
sound | Generate sound effects |
add_stems | Add stems onto a clip |
Response
Returns an array of task schema objects containing:string
The task type identifier.
string
Human-readable description of the task.
array
List of required fields with their descriptions, types, and examples.
array
List of optional fields with their descriptions, types, and examples.
array
List of fields that will be ignored for this task type.
object
A complete request example for this specific task.
Example
curl -X GET "https://api.mountsea.ai/suno/v2/generate/schema" \
-H "Authorization: Bearer your-api-key"
curl -X GET "https://api.mountsea.ai/suno/v2/generate/schema?task=extend" \
-H "Authorization: Bearer your-api-key"
// Get schema for extend task
const response = await fetch('https://api.mountsea.ai/suno/v2/generate/schema?task=extend', {
method: 'GET',
headers: {
'Authorization': 'Bearer your-api-key'
}
});
const schemas = await response.json();
console.log(schemas);
import requests
# Get schema for create task
response = requests.get(
'https://api.mountsea.ai/suno/v2/generate/schema',
params={'task': 'create'},
headers={'Authorization': 'Bearer your-api-key'}
)
schemas = response.json()
print(schemas)
Response Example
[
{
"task": "extend",
"description": "Extend existing music",
"required": [
{
"field": "clip_id",
"description": "Source clip ID",
"example": "clip_abc123",
"type": "string"
}
],
"optional": [
{
"field": "continue_at",
"description": "Continue position in seconds",
"example": 30,
"type": "number"
},
{
"field": "tags",
"description": "Style tags",
"example": "Pop, Happy",
"type": "string"
},
{
"field": "prompt",
"description": "Lyrics or prompt text",
"example": "[Verse]\nHello world...",
"type": "string"
}
],
"notAllowed": [
"range",
"audio_url"
],
"example": {
"task": "extend",
"model": "chirp-v6",
"clip_id": "clip_abc123",
"continue_at": 30,
"tags": "Pop, Happy"
}
}
]
Task Types Overview
| Task | Description | Key Required Fields |
|---|---|---|
create | Custom or Simple | model — examples: custom / simple_idea / simple_audio_refs |
extend | Extend existing clip | clip_id, model |
upload_extend | Extend uploaded audio | audio_url, model |
upload_cover | Cover uploaded audio | audio_url, model |
cover | Cover existing clip | clip_id, model |
use_styles_lyrics | Use styles with new lyrics | clip_id, model |
replace_section | Replace audio section | clip_id, range, infill_context_range, continued_aligned_prompt, model |
replace_simple | Simple replace | clip_id, range, model — examples: replaceSection / replaceSimple |
add_instrumental | Add instrumental | clip_id, range, model |
add_vocals | Add vocals | clip_id, range, model |
gen_stem_two | Two-track stems | clip_id, model |
gen_stem_all | All stems | clip_id, model |
mashup | Mashup two songs | mashup_clip_ids, model |
sample | Sample from existing clip | clip_id, range, model |
inspiration | Generate from real playlist | playlist_id, model — see Inspiration Guide |
sound | Generate sound effects | sound, model |
add_stems | Add stems onto a clip | clip_id, model — optional stem_control_tags |
All tasks require
task and model fields. Use this endpoint to get the complete list of required and optional fields for each specific task type.