Продление и загрузка
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>"
}Четыре операции делят один endpoint —
{operation} выбирает поведение:
POST https://toapis.com/v1/music/generations/{operation}
Authorizations
string
обязательно
Bearer Token. 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 upstream отклоняет.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_idboolean
Max-тариф
uploadExtend — загрузка + продление(0.05,Max0.10)
Загружает аудио и продолжает с метки времени. Всегда в кастомном режиме.string
обязательно
Фиксированное
"suno"string
обязательно
URL исходного аудио
number
обязательно
Точка продолжения(сек)
string
Текст продолжения
string
Стиль
boolean
Max-тариф
Response
string
ID задачи для опроса
string
submitted