연장과 업로드
curl --request POST \
--url https://toapis.com/v1/music/generations/extend \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"task_id": "<string>",
"continue_at": 123,
"audio_index": 123,
"prompt": "<string>",
"title": "<string>",
"style": "<string>",
"max_mode": true,
"audioFilePath": "<string>",
"audio_url": "<string>",
"custom": true,
"gpt_description": "<string>",
"persona_id": "<string>"
}
'import requests
url = "https://toapis.com/v1/music/generations/extend"
payload = {
"model": "<string>",
"task_id": "<string>",
"continue_at": 123,
"audio_index": 123,
"prompt": "<string>",
"title": "<string>",
"style": "<string>",
"max_mode": True,
"audioFilePath": "<string>",
"audio_url": "<string>",
"custom": True,
"gpt_description": "<string>",
"persona_id": "<string>"
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
task_id: '<string>',
continue_at: 123,
audio_index: 123,
prompt: '<string>',
title: '<string>',
style: '<string>',
max_mode: true,
audioFilePath: '<string>',
audio_url: '<string>',
custom: true,
gpt_description: '<string>',
persona_id: '<string>'
})
};
fetch('https://toapis.com/v1/music/generations/extend', 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://toapis.com/v1/music/generations/extend",
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([
'model' => '<string>',
'task_id' => '<string>',
'continue_at' => 123,
'audio_index' => 123,
'prompt' => '<string>',
'title' => '<string>',
'style' => '<string>',
'max_mode' => true,
'audioFilePath' => '<string>',
'audio_url' => '<string>',
'custom' => true,
'gpt_description' => '<string>',
'persona_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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://toapis.com/v1/music/generations/extend"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"task_id\": \"<string>\",\n \"continue_at\": 123,\n \"audio_index\": 123,\n \"prompt\": \"<string>\",\n \"title\": \"<string>\",\n \"style\": \"<string>\",\n \"max_mode\": true,\n \"audioFilePath\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"custom\": true,\n \"gpt_description\": \"<string>\",\n \"persona_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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://toapis.com/v1/music/generations/extend")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"task_id\": \"<string>\",\n \"continue_at\": 123,\n \"audio_index\": 123,\n \"prompt\": \"<string>\",\n \"title\": \"<string>\",\n \"style\": \"<string>\",\n \"max_mode\": true,\n \"audioFilePath\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"custom\": true,\n \"gpt_description\": \"<string>\",\n \"persona_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://toapis.com/v1/music/generations/extend")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"task_id\": \"<string>\",\n \"continue_at\": 123,\n \"audio_index\": 123,\n \"prompt\": \"<string>\",\n \"title\": \"<string>\",\n \"style\": \"<string>\",\n \"max_mode\": true,\n \"audioFilePath\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"custom\": true,\n \"gpt_description\": \"<string>\",\n \"persona_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>",
"status": "<string>"
}Suno 음악
연장과 업로드
extend 연장, uploadTask/uploadCover/uploadExtend 업로드 소스
POST
/
v1
/
music
/
generations
/
extend
연장과 업로드
curl --request POST \
--url https://toapis.com/v1/music/generations/extend \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"task_id": "<string>",
"continue_at": 123,
"audio_index": 123,
"prompt": "<string>",
"title": "<string>",
"style": "<string>",
"max_mode": true,
"audioFilePath": "<string>",
"audio_url": "<string>",
"custom": true,
"gpt_description": "<string>",
"persona_id": "<string>"
}
'import requests
url = "https://toapis.com/v1/music/generations/extend"
payload = {
"model": "<string>",
"task_id": "<string>",
"continue_at": 123,
"audio_index": 123,
"prompt": "<string>",
"title": "<string>",
"style": "<string>",
"max_mode": True,
"audioFilePath": "<string>",
"audio_url": "<string>",
"custom": True,
"gpt_description": "<string>",
"persona_id": "<string>"
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
task_id: '<string>',
continue_at: 123,
audio_index: 123,
prompt: '<string>',
title: '<string>',
style: '<string>',
max_mode: true,
audioFilePath: '<string>',
audio_url: '<string>',
custom: true,
gpt_description: '<string>',
persona_id: '<string>'
})
};
fetch('https://toapis.com/v1/music/generations/extend', 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://toapis.com/v1/music/generations/extend",
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([
'model' => '<string>',
'task_id' => '<string>',
'continue_at' => 123,
'audio_index' => 123,
'prompt' => '<string>',
'title' => '<string>',
'style' => '<string>',
'max_mode' => true,
'audioFilePath' => '<string>',
'audio_url' => '<string>',
'custom' => true,
'gpt_description' => '<string>',
'persona_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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://toapis.com/v1/music/generations/extend"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"task_id\": \"<string>\",\n \"continue_at\": 123,\n \"audio_index\": 123,\n \"prompt\": \"<string>\",\n \"title\": \"<string>\",\n \"style\": \"<string>\",\n \"max_mode\": true,\n \"audioFilePath\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"custom\": true,\n \"gpt_description\": \"<string>\",\n \"persona_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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://toapis.com/v1/music/generations/extend")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"task_id\": \"<string>\",\n \"continue_at\": 123,\n \"audio_index\": 123,\n \"prompt\": \"<string>\",\n \"title\": \"<string>\",\n \"style\": \"<string>\",\n \"max_mode\": true,\n \"audioFilePath\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"custom\": true,\n \"gpt_description\": \"<string>\",\n \"persona_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://toapis.com/v1/music/generations/extend")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"task_id\": \"<string>\",\n \"continue_at\": 123,\n \"audio_index\": 123,\n \"prompt\": \"<string>\",\n \"title\": \"<string>\",\n \"style\": \"<string>\",\n \"max_mode\": true,\n \"audioFilePath\": \"<string>\",\n \"audio_url\": \"<string>\",\n \"custom\": true,\n \"gpt_description\": \"<string>\",\n \"persona_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>",
"status": "<string>"
}4개 작업이 동일 엔드포인트를 공유하며
{operation}이 동작을 결정합니다:
POST https://toapis.com/v1/music/generations/{operation}
Authorizations
string
필수
Bearer Token. API Key:API Key 관리 페이지
extend — 곡 연장(0.05,Max0.10)
기존 태스크의 지정 시점부터 이어서 생성.custom은 기본 true.
string
필수
고정
"suno"string
필수
원본 태스크 ID
number
필수
재개 위치(초)
number
트랙 번호
string
이어질 가사(custom 모드)
string
제목
string
스타일 태그
boolean
Max 티어 $0.10
curl --request POST \
--url https://toapis.com/v1/music/generations/extend \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{"model":"suno","task_id":"tsk_aud_xxx","continue_at":60,"prompt":"[Chorus] ..."}'
uploadTask — 업로드 등록($0.004)
공개 오디오 URL을 태스크로 등록. 산출물은sample/addVocals/addInstrumental/addStem의 필수 소스입니다.
string
필수
고정
"suno"string
필수
공개 접근 가능한 오디오 URL
model + audioFilePath만 전송. version 등 불필요한 필드는 업스트림에서 거부됩니다.curl --request POST \
--url https://toapis.com/v1/music/generations/uploadTask \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{"model":"suno","audioFilePath":"https://example.com/my-vocals.mp3"}'
uploadCover — 업로드+커버(0.05,Max0.10)
string
필수
고정
"suno"string
필수
원본 오디오 URL
boolean
커스텀 가사 모드
string
가사(custom=true) / 설명
string
영감 설명(custom=false일 때 필수)
string
목표 스타일
string
보컬 페르소나.
custom_model_id와 상호 배타boolean
Max 티어
uploadExtend — 업로드+연장(0.05,Max0.10)
오디오를 업로드하고 지정 시점부터 연장. 항상 커스텀 모드로 처리.string
필수
고정
"suno"string
필수
원본 오디오 URL
number
필수
재개 위치(초)
string
이어질 가사
string
스타일
boolean
Max 티어
Response
string
태스크 ID
string
submitted