EXTEND
Extend a previously generated song or an uploaded audio.
POST https://api.apiframe.pro/suno-extend
Headers
Content-Type
application/json
Authorization*
Your APIFRAME API Key
Body
parent_task_id*
string
the id of the original suno task
song_id*
string
the song_id of one of the two generated songs to extend
continue_at
float
The timestamp from where the song should be extended
from_upload
boolean
Set to true if you are extending an audio you uploaded.
prompt
string
the text prompt for Suno AI, just describe the song.
lyrics
string
lyrics for the song to generate
title
string
a title for the song
tags
string
style tags for the song, ex: 'rap pop'
webhook_url
string
The final results of this task and updates will be posted at this URL.
webhook_secret
string
Will be passed as x-webhook-secret in the webhook call headers for authentication.
Response
// Success, the task has been submitted
{
"task_id": "29e983ca-7e86-4017-a9e3-ef6fe9cd5f2a"
}// Bad request
{
"errors": [{ msg: "Invalid request" }]
}// Invalid API Key
{}// A server error occured
{}This endpoint doesn't generate the songs instantly; you can use the Fetch endpoint to fetch the result or use webhooks.
The result (posted to the webhook_url or retrieved with the Fetch endpoint) looks like this:
{
"task_id": "29e983ca-7e86-4017-a9e3-xxxxxxxxx",
"task_type": "suno",
"status": "finished",
"video_url": "https://...........xxxx.mp4",
"songs": [
{
"lyrics": "....",
"song_id": "ea6813ad-03ce-4a0b-a616-xxxxxxxxx",
"audio_url": "https://....xxxxxxxxx.mp3",
"image_url": "https://....xxxxxxxxx.jpeg",
"video_url": "https://....xxxxxxxxx.mp4"
},
{
"lyrics": "...",
"song_id": "21ad7efc-4954-4ae4-ae2a-xxxxxxxx",
"audio_url": "https://....xxxxxxxxx.mp3",
"image_url": "https://....xxxxxxxxx.jpeg",
"video_url": "https://....xxxxxxxxx.mp4"
}
]
}If the job is not completed, you will get a result like this:
{
"task_id": "29e983ca-7e86-4017-a9e3-xxxxxxxxx",
"task_type": "suno",
"status": "processing",
"percentage": 56,
"video_url": "https://...........xxxx.mp4",
"songs": [
{
"lyrics": "....",
"song_id": "ea6813ad-03ce-4a0b-a616-xxxxxxxxx",
"audio_url": "https://....xxxxxxxxx.mp3",
"image_url": "https://....xxxxxxxxx.jpeg",
"video_url": "https://....xxxxxxxxx.mp4"
},
{
"lyrics": "...",
"song_id": "21ad7efc-4954-4ae4-ae2a-xxxxxxxx",
"audio_url": "https://....xxxxxxxxx.mp3",
"image_url": "https://....xxxxxxxxx.jpeg",
"video_url": "https://....xxxxxxxxx.mp4"
}
]
}Code samples
const axios = require('axios');
const data = JSON.stringify({
"parent_task_id": "xxxxxxxxx",
"song_id": "xxxxxxxxxx",
"webhook_url": "https://........",
"webhook_secret": "abc123"
});
const config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://api.apiframe.pro/suno-extend',
headers: {
'Content-Type': 'application/json',
'Authorization': 'YOUR_API_KEY'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import requests
import json
url = "https://api.apiframe.pro/suno-extend"
payload = json.dumps({
"parent_task_id": "xxxxxxxxx",
"song_id": "xxxxxxxxxx",
"webhook_url": "https://........",
"webhook_secret": "abc123"
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'YOUR_API_KEY'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.apiframe.pro/suno-extend',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"parent_task_id": "xxxxxxxxx",
"song_id": "xxxxxxxxxx",
"webhook_url": "https://........",
"webhook_secret": "abc123"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: YOUR_API_KEY'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"parent_task_id\": \"xxxxxxxxxxx\",\r\n \"song_id\": \"xxxxxxxxxxx\",\r\n \"webhook_url\": \"https://........\",\r\n \"webhook_secret\": \"abc123\"\r\n}");
Request request = new Request.Builder()
.url("https://api.apiframe.pro/suno-extend")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "YOUR_API_KEY")
.build();
Response response = client.newCall(request).execute();var headers = {
'Content-Type': 'application/json',
'Authorization': 'YOUR_API_KEY'
};
var data = json.encode({
"parent_task_id": "xxxxxxxxx",
"song_id": "xxxxxxxxxx",
"webhook_url": "https://........",
"webhook_secret": "abc123"
});
var dio = Dio();
var response = await dio.request(
'https://api.apiframe.pro/luma-extend',
options: Options(
method: 'POST',
headers: headers,
),
data: data,
);
if (response.statusCode == 200) {
print(json.encode(response.data));
}
else {
print(response.statusMessage);
}var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.apiframe.pro/suno-extend");
request.Headers.Add("Authorization", "YOUR_API_KEY");
var content = new StringContent("{\r\n \"parent_task_id\": \"xxxxxxxxxxx\",\r\n \"song_id\": \"xxxxxxxxxxx\",\r\n \"webhook_url\": \"https://........\",\r\n \"webhook_secret\": \"abc123\"\r\n}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());require "uri"
require "json"
require "net/http"
url = URI("https://api.apiframe.pro/suno-extend")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "YOUR_API_KEY"
request.body = JSON.dump({
"parent_task_id": "xxxxxxxxx",
"song_id": "xxxxxxxxxx",
"webhook_url": "https://........",
"webhook_secret": "abc123"
})
response = https.request(request)
puts response.read_body
Last updated
Was this helpful?