Apiframe API Documentation
  • Get Started
  • My Account
    • Image credits
    • Generation modes
    • Delete My Account
  • Clients
    • Node.js Library
    • Python Client
    • Go Client
  • MEDIA UPLOAD APIS
    • Upload Image
    • Upload Audio
  • MIDJOURNEY
    • Authentication
    • Imagine
    • Reroll
    • Upscales
      • Upscale 1x
      • Upscale: Creative and Subtle
      • Upscale: 2x and 4x
    • Variations
    • Faceswap
    • Inpaint (Vary Region)
    • Outpaint (Zoom Out)
    • Pan
    • Shorten
    • Describe
    • Blend
    • Seed
    • Fetch
    • Fetch Many
    • Account Info
    • Statuses
    • Postman Collection
  • AI Photos
    • Upload and Prepare
    • Train
    • Generate
    • Best Input Images
  • IDEOGRAM
    • Imagine
    • Remix
    • Upscale
    • Describe
  • FLUX
    • Imagine
  • LUMA AI API
    • IMAGINE
    • EXTEND
  • SUNO AI API
    • IMAGINE
    • UPLOAD
    • EXTEND
    • LYRICS
  • UDIO AI API
    • IMAGINE
  • RUNWAY ML API
    • IMAGINE
  • KLING AI API
    • IMAGINE
    • VIRTUAL TRY ON
  • SORA AI API
  • Webhooks
  • MJ Banned Words
  • Help Me With Integration
  • FAQ
Powered by GitBook
On this page

Was this helpful?

  1. SUNO AI API

EXTEND

Extend a previously generated song or an uploaded audio.

POST https://api.apiframe.pro/suno-extend

Headers

Name
Value

Content-Type

application/json

Authorization*

Your APIFRAME API Key

Body

Name
Type
Description

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
{}

{
    "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

PreviousUPLOADNextLYRICS

Last updated 3 months ago

Was this helpful?

This endpoint doesn't generate the songs instantly; you can use the endpoint to fetch the result or use .

The result (posted to the webhook_url or retrieved with the endpoint) looks like this:

Fetch
webhooks
Fetch