Skip to main content
POST
/
suno
/
v2
/
studio
/
addSection
Studio add section (phase 1)
curl --request POST \
  --url https://api.mountsea.ai/suno/v2/studio/addSection \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "clip_id": "<string>",
  "insert_at_s": 1,
  "duration_s": 16,
  "lyrics": "<string>",
  "tags": "<string>",
  "negative_tags": "<string>",
  "model": "chirp-v55",
  "title": "<string>"
}
'
import requests

url = "https://api.mountsea.ai/suno/v2/studio/addSection"

payload = {
"clip_id": "<string>",
"insert_at_s": 1,
"duration_s": 16,
"lyrics": "<string>",
"tags": "<string>",
"negative_tags": "<string>",
"model": "chirp-v55",
"title": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
clip_id: '<string>',
insert_at_s: 1,
duration_s: 16,
lyrics: '<string>',
tags: '<string>',
negative_tags: '<string>',
model: 'chirp-v55',
title: '<string>'
})
};

fetch('https://api.mountsea.ai/suno/v2/studio/addSection', 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/studio/addSection",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'clip_id' => '<string>',
'insert_at_s' => 1,
'duration_s' => 16,
'lyrics' => '<string>',
'tags' => '<string>',
'negative_tags' => '<string>',
'model' => 'chirp-v55',
'title' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.mountsea.ai/suno/v2/studio/addSection"

payload := strings.NewReader("{\n \"clip_id\": \"<string>\",\n \"insert_at_s\": 1,\n \"duration_s\": 16,\n \"lyrics\": \"<string>\",\n \"tags\": \"<string>\",\n \"negative_tags\": \"<string>\",\n \"model\": \"chirp-v55\",\n \"title\": \"<string>\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.mountsea.ai/suno/v2/studio/addSection")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"clip_id\": \"<string>\",\n \"insert_at_s\": 1,\n \"duration_s\": 16,\n \"lyrics\": \"<string>\",\n \"tags\": \"<string>\",\n \"negative_tags\": \"<string>\",\n \"model\": \"chirp-v55\",\n \"title\": \"<string>\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.mountsea.ai/suno/v2/studio/addSection")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"clip_id\": \"<string>\",\n \"insert_at_s\": 1,\n \"duration_s\": 16,\n \"lyrics\": \"<string>\",\n \"tags\": \"<string>\",\n \"negative_tags\": \"<string>\",\n \"model\": \"chirp-v55\",\n \"title\": \"<string>\"\n}"

response = http.request(request)
puts response.read_body
{
  "taskId": "15c257ff-43f7-4678-bd41-202ad6b8488b"
}
Insert a new section at insert_at_s via infill generation. Returns 2 candidates. Poll Get Task Status until success, then call Add Section Commit.
Billed like music creation (create). Task result includes candidate clips plus Studio project context needed for phase 2.
Part of the Studio Editing group.

Parameters

FieldTypeRequiredDescription
clip_idstringYesSource clip
insert_at_snumberYesInsert position in the original song (seconds)
duration_snumberNoNew section length, 4–32 seconds (default 16)
lyricsstringNoLyrics for the new section; omit for instrumental
tagsstringNoStyle tags; inherits original style if omitted
negative_tagsstringNoStyles to exclude
modelstringNoModel version (default chirp-v55 / chirp-fenix)
titlestringNoCandidate title

Example

curl -X POST https://api.mountsea.ai/suno/v2/studio/addSection \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "clip_id": "5a3c023f-d1ed-4a85-b61e-168dde2b6659",
    "insert_at_s": 32,
    "duration_s": 16,
    "lyrics": "[Bridge]\nTake me higher tonight",
    "tags": "Pop, Emotional",
    "model": "chirp-v55"
  }'
After polling succeeds, pick a candidate clip id and proceed to Add Section Commit.

Authorizations

Authorization
string
header
required

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

Body

application/json
clip_id
string
required

原歌曲 clip_id

insert_at_s
number
required

在原曲的这个秒数处插入新段落

Required range: x >= 0
duration_s
number
default:16

新段落时长,范围 4~32,默认 16

Required range: 4 <= x <= 32
lyrics
string

新段落歌词;不传则为纯音乐

tags
string

风格;不传则继承原曲风格

negative_tags
string

排除风格

model
string

模型版本,默认 chirp-v55 / chirp-fenix

Example:

"chirp-v55"

title
string

候选标题

Response

201 - application/json
taskId
string
required

task id. Use this id to query task status.

Example:

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