curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": False
},
"out_task_id": "suno_extend_123456"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "suno_extend",
"params": map[string]interface{}{
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false,
},
"out_task_id": "suno_extend_123456",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/openapi/submit";
$payload = [
"model" => "suno_extend",
"params" => [
"audio_url" => "https://example.com/song.mp3",
"prompt" => "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at" => 60,
"suno_model" => "V5",
"instrumental" => false
],
"out_task_id" => "suno_extend_123456"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://aireiter.com/api/openapi/submit")
payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
}
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://aireiter.com/api/openapi/submit")!
let payload: [String: Any] = [
"model": "suno_extend",
"params": [
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
],
"out_task_id": "suno_extend_123456"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://aireiter.com/api/openapi/submit";
var payload = @"
{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://aireiter.com/api/openapi/submit";
const char *payload = "{\"model\":\"suno_extend\",\"params\":{\"audio_url\":\"https://example.com/song.mp3\",\"prompt\":\"Switch to a brighter chorus, keep the guitar unchanged\",\"continue_at\":60,\"suno_model\":\"V5\",\"instrumental\":false},\"out_task_id\":\"suno_extend_123456\"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://aireiter.com/api/openapi/submit"];
NSDictionary *payload = @{
@"model": @"suno_extend",
@"params": @{
@"audio_url": @"https://example.com/song.mp3",
@"prompt": @"Switch to a brighter chorus, keep the guitar unchanged",
@"continue_at": @60,
@"suno_model": @"V5",
@"instrumental": @NO
},
@"out_task_id": @"suno_extend_123456"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://aireiter.com/api/openapi/submit"
let payload = {|{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://aireiter.com/api/openapi/submit');
final payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://aireiter.com/api/openapi/submit"
payload <- list(
model = "suno_extend",
params = list(
audio_url = "https://example.com/song.mp3",
prompt = "Switch to a brighter chorus, keep the guitar unchanged",
continue_at = 60,
suno_model = "V5",
instrumental = FALSE
),
out_task_id = "suno_extend_123456"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "suno_extend_123456",
"status": "pending",
"created_at": "2026-08-26T10:12:11.000Z"
}
}
{
"statusCode": 400,
"message": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
Suno
Suno Continuation
- Extend a segment of public audio into a longer track
- Asynchronous processing mode, returning a task ID for subsequent queries
- Uses a public audio URL, no upstream task ID required
- You can specify which second of the original track to continue from
POST
/
api
/
openapi
/
submit
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": False
},
"out_task_id": "suno_extend_123456"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "suno_extend",
"params": map[string]interface{}{
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false,
},
"out_task_id": "suno_extend_123456",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/openapi/submit";
$payload = [
"model" => "suno_extend",
"params" => [
"audio_url" => "https://example.com/song.mp3",
"prompt" => "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at" => 60,
"suno_model" => "V5",
"instrumental" => false
],
"out_task_id" => "suno_extend_123456"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://aireiter.com/api/openapi/submit")
payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
}
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://aireiter.com/api/openapi/submit")!
let payload: [String: Any] = [
"model": "suno_extend",
"params": [
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
],
"out_task_id": "suno_extend_123456"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://aireiter.com/api/openapi/submit";
var payload = @"
{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://aireiter.com/api/openapi/submit";
const char *payload = "{\"model\":\"suno_extend\",\"params\":{\"audio_url\":\"https://example.com/song.mp3\",\"prompt\":\"Switch to a brighter chorus, keep the guitar unchanged\",\"continue_at\":60,\"suno_model\":\"V5\",\"instrumental\":false},\"out_task_id\":\"suno_extend_123456\"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://aireiter.com/api/openapi/submit"];
NSDictionary *payload = @{
@"model": @"suno_extend",
@"params": @{
@"audio_url": @"https://example.com/song.mp3",
@"prompt": @"Switch to a brighter chorus, keep the guitar unchanged",
@"continue_at": @60,
@"suno_model": @"V5",
@"instrumental": @NO
},
@"out_task_id": @"suno_extend_123456"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://aireiter.com/api/openapi/submit"
let payload = {|{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://aireiter.com/api/openapi/submit');
final payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://aireiter.com/api/openapi/submit"
payload <- list(
model = "suno_extend",
params = list(
audio_url = "https://example.com/song.mp3",
prompt = "Switch to a brighter chorus, keep the guitar unchanged",
continue_at = 60,
suno_model = "V5",
instrumental = FALSE
),
out_task_id = "suno_extend_123456"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "suno_extend_123456",
"status": "pending",
"created_at": "2026-08-26T10:12:11.000Z"
}
}
{
"statusCode": 400,
"message": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
The model name for Suno Extend in AIReiter is
suno_extend. Upload an audio track or reuse the audio URL from the previous generation result to continue generating.Authorizations
string
required
All endpoints require Bearer Token authentication.Get the API Key:Visit API Key management page to get your API Key.When using it, add the following to the request headers:
Authorization: Bearer YOUR_API_KEY
Body
string
required
Model name, fixed as:
suno_extend
object
required
Model parameters object.
Show params Object Properties
Show params Object Properties
string | string[]
required
The audio URL to continue, and it must be publicly accessible. If an array is passed, use the first item.Audio requirements:
- Format: MP3, WAV
- Duration: no more than 8 minutes
- Size: no more than 20MB
string
Optional. Describe how you want the continuation to develop, for example, a louder chorus, a quieter outro, or the addition of a new instrument.
number
default:"60"
The second in the original track from which to continue. Range
0 to 240, and it must be shorter than the original audio duration. Default 60, usually placed after the verse or chorus.string
default:"V5"
Suno version:
V4V4_5V4_5PLUSV4_5ALLV5- Default valueV5_5
boolean
default:"false"
Whether the continuation is instrumental only.
false- Continue with vocalstrue- Instrumental only
string
required
Initiator task ID.User-defined task identifier, required. Only letters, numbers, underscores, and hyphens are supported, with a length of 1-64 characters. You can later use this ID to query the task status and results.
Response
string
Initiator task ID, can be used to query the result.
string
Initial status, usually
"pending".string
Creation time, in ISO format.
Query Task
Suno Extend is an asynchronous music continuation model. After submitting the task, please useout_task_id to query the task status. Once completed, output usually contains 2 continuation results, and each item includes audio, url, title, and text.
string
required
The initiator task ID passed in when submitting the task.
curl --request POST \
--url https://aireiter.com/api/openapi/query \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"out_task_id": "suno_extend_123456"
}'
output example is:
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "suno_extend_123456",
"status": "completed",
"created_at": "2026-08-26T10:12:11.000Z",
"completed_at": "2026-08-26T10:14:41.000Z",
"output": [
{
"audio": "https://s1.pxz.ai/upload/audio-generator/20260826/suno-extend-0.mp3",
"url": "https://s1.pxz.ai/upload/audio-generator/20260826/suno-extend-cover-0.jpeg",
"title": "Morning Coffee (Extended)",
"text": "[Chorus]\\nLet the guitar keep going..."
}
]
}
}
Request Examples
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": False
},
"out_task_id": "suno_extend_123456"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "suno_extend",
"params": map[string]interface{}{
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false,
},
"out_task_id": "suno_extend_123456",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://aireiter.com/api/openapi/submit";
$payload = [
"model" => "suno_extend",
"params" => [
"audio_url" => "https://example.com/song.mp3",
"prompt" => "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at" => 60,
"suno_model" => "V5",
"instrumental" => false
],
"out_task_id" => "suno_extend_123456"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://aireiter.com/api/openapi/submit")
payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
}
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://aireiter.com/api/openapi/submit")!
let payload: [String: Any] = [
"model": "suno_extend",
"params": [
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
],
"out_task_id": "suno_extend_123456"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://aireiter.com/api/openapi/submit";
var payload = @"
{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://aireiter.com/api/openapi/submit";
const char *payload = "{\"model\":\"suno_extend\",\"params\":{\"audio_url\":\"https://example.com/song.mp3\",\"prompt\":\"Switch to a brighter chorus, keep the guitar unchanged\",\"continue_at\":60,\"suno_model\":\"V5\",\"instrumental\":false},\"out_task_id\":\"suno_extend_123456\"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://aireiter.com/api/openapi/submit"];
NSDictionary *payload = @{
@"model": @"suno_extend",
@"params": @{
@"audio_url": @"https://example.com/song.mp3",
@"prompt": @"Switch to a brighter chorus, keep the guitar unchanged",
@"continue_at": @60,
@"suno_model": @"V5",
@"instrumental": @NO
},
@"out_task_id": @"suno_extend_123456"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://aireiter.com/api/openapi/submit"
let payload = {|{
"model": "suno_extend",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Switch to a brighter chorus, keep the guitar unchanged",
"continue_at": 60,
"suno_model": "V5",
"instrumental": false
},
"out_task_id": "suno_extend_123456"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://aireiter.com/api/openapi/submit');
final payload = {
model: "suno_extend",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Switch to a brighter chorus, keep the guitar unchanged",
continue_at: 60,
suno_model: "V5",
instrumental: false
},
out_task_id: "suno_extend_123456"
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json'
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://aireiter.com/api/openapi/submit"
payload <- list(
model = "suno_extend",
params = list(
audio_url = "https://example.com/song.mp3",
prompt = "Switch to a brighter chorus, keep the guitar unchanged",
continue_at = 60,
suno_model = "V5",
instrumental = FALSE
),
out_task_id = "suno_extend_123456"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "suno_extend_123456",
"status": "pending",
"created_at": "2026-08-26T10:12:11.000Z"
}
}
{
"statusCode": 400,
"message": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
Mode Notes
continue_at is the timestamp in the original track, not the total duration after continuation. Please make sure that this number of seconds falls within the original audio duration.Please pass in a publicly accessible audio URL. Local files must first be uploaded to an address that can be accessed publicly.