curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "[Verse]\\nThe streetlights draw the rain into long threads\\n[Chorus]\\nThis old song has put on new clothes",
"suno_model": "V5",
"custom_mode": true,
"instrumental": false,
"title": "Rainy Night Cover",
"style": "lo-fi jazz, close-mic vocals",
"vocal_gender": "f"
},
"out_task_id": "suno_cover_custom_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": False,
"instrumental": False
},
"out_task_id": "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
"params": map[string]interface{}{
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false,
},
"out_task_id": "suno_cover_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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_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_cover",
"params" => [
"audio_url" => "https://example.com/song.mp3",
"prompt" => "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model" => "V5",
"custom_mode" => false,
"instrumental" => false
],
"out_task_id" => "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
"params": [
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
],
"out_task_id": "suno_cover_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_cover\",
\"params\": {
\"audio_url\": \"https://example.com/song.mp3\",
\"prompt\": \"Turn it into rainy-night jazz, close-up vocals, lo-fi\",
\"suno_model\": \"V5\",
\"custom_mode\": false,
\"instrumental\": false
},
\"out_task_id\": \"suno_cover_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_cover\",\"params\":{\"audio_url\":\"https://example.com/song.mp3\",\"prompt\":\"Turn it into rainy-night jazz, close-up vocals, lo-fi\",\"suno_model\":\"V5\",\"custom_mode\":false,\"instrumental\":false},\"out_task_id\":\"suno_cover_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_cover",
@"params": @{
@"audio_url": @"https://example.com/song.mp3",
@"prompt": @"Turn it into rainy-night jazz, close-up vocals, lo-fi",
@"suno_model": @"V5",
@"custom_mode": @NO,
@"instrumental": @NO
},
@"out_task_id": @"suno_cover_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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
params = list(
audio_url = "https://example.com/song.mp3",
prompt = "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model = "V5",
custom_mode = FALSE,
instrumental = FALSE
),
out_task_id = "suno_cover_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_cover_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 Cover
- Convert a public audio track into a new style cover while keeping the melody close to the original
- Asynchronous processing mode returns a task ID for later querying
- Uses a public audio URL and does not pass an upstream clip ID
- Supports simple mode and custom mode
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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "[Verse]\\nThe streetlights draw the rain into long threads\\n[Chorus]\\nThis old song has put on new clothes",
"suno_model": "V5",
"custom_mode": true,
"instrumental": false,
"title": "Rainy Night Cover",
"style": "lo-fi jazz, close-mic vocals",
"vocal_gender": "f"
},
"out_task_id": "suno_cover_custom_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": False,
"instrumental": False
},
"out_task_id": "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
"params": map[string]interface{}{
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false,
},
"out_task_id": "suno_cover_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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_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_cover",
"params" => [
"audio_url" => "https://example.com/song.mp3",
"prompt" => "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model" => "V5",
"custom_mode" => false,
"instrumental" => false
],
"out_task_id" => "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
"params": [
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
],
"out_task_id": "suno_cover_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_cover\",
\"params\": {
\"audio_url\": \"https://example.com/song.mp3\",
\"prompt\": \"Turn it into rainy-night jazz, close-up vocals, lo-fi\",
\"suno_model\": \"V5\",
\"custom_mode\": false,
\"instrumental\": false
},
\"out_task_id\": \"suno_cover_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_cover\",\"params\":{\"audio_url\":\"https://example.com/song.mp3\",\"prompt\":\"Turn it into rainy-night jazz, close-up vocals, lo-fi\",\"suno_model\":\"V5\",\"custom_mode\":false,\"instrumental\":false},\"out_task_id\":\"suno_cover_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_cover",
@"params": @{
@"audio_url": @"https://example.com/song.mp3",
@"prompt": @"Turn it into rainy-night jazz, close-up vocals, lo-fi",
@"suno_model": @"V5",
@"custom_mode": @NO,
@"instrumental": @NO
},
@"out_task_id": @"suno_cover_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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
params = list(
audio_url = "https://example.com/song.mp3",
prompt = "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model = "V5",
custom_mode = FALSE,
instrumental = FALSE
),
out_task_id = "suno_cover_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_cover_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 Cover’s model name in AIReiter is
suno_cover. The melody stays close to the original song, and the prompt mainly changes the style, vocals, and production.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, use the following fixed value:
suno_cover
object
required
Model parameter object.
Show params object properties
Show params object properties
string
required
What the cover should sound like after conversion. The melody will stay close to the original song; this is where you change the style, vocals, and production.When custom mode is enabled and the track is not instrumental, the prompt is treated as lyrics. The V5 / V5.5 / V4.5 series supports up to 5000 characters.
string | string[]
required
The audio URL to be covered. It must be publicly accessible. If an array is provided, the first item is used.Audio requirements:
- Formats MP3, WAV
- Duration must not exceed 8 minutes
- No more than 20MB
string
default:"V5"
Suno versions:
V4V4_5V4_5PLUSV4_5ALLV5- default valueV5_5
boolean
default:"false"
Whether to enable custom mode.
false- Simple mode, onlypromptandaudio_urlare requiredtrue- Custom mode,titleandstylemust be specified
boolean
default:"false"
Whether to convert it into instrumental only.
false- Keep vocalstrue- Instrumental only
string
default:"m"
Preferred vocal gender. Ignored for instrumental tracks.
m- Male vocals, default valuef- Female vocals
string
Song title. Only valid in custom mode, up to 100 characters. Required when
custom_mode is enabled.string
The new style and production direction. Only valid in custom mode, up to 1000 characters. Required when
custom_mode is enabled.string
required
Initiator task ID.A user-defined task identifier. Required. Only letters, numbers, underscores, and hyphens are supported, with a length of 1-64 characters. You can use this ID later to query the task status and results.
Response
string
Initiator task ID, can be used to query the result.
string
Initial status, usually for
"pending".string
Creation time, in ISO format.
Query Task
Suno Cover is an asynchronous cover model. After submitting the task, useout_task_id to query the task status. Once completed, output usually contains 2 cover results, and each item includes audio, url, title, and text.
string
required
The requester task ID passed 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_cover_123456"
}'
output:
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "suno_cover_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-cover-0.mp3",
"url": "https://s1.pxz.ai/upload/audio-generator/20260826/suno-cover-art-0.jpeg",
"title": "Rainy Night Jazz",
"text": "[Verse]\\nStreetlights pull the rain into long lines..."
}
]
}
}
Request Examples
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_123456"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "[Verse]\\nThe streetlights draw the rain into long threads\\n[Chorus]\\nThis old song has put on new clothes",
"suno_model": "V5",
"custom_mode": true,
"instrumental": false,
"title": "Rainy Night Cover",
"style": "lo-fi jazz, close-mic vocals",
"vocal_gender": "f"
},
"out_task_id": "suno_cover_custom_123456"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "suno_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": False,
"instrumental": False
},
"out_task_id": "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
"params": map[string]interface{}{
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false,
},
"out_task_id": "suno_cover_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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_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_cover",
"params" => [
"audio_url" => "https://example.com/song.mp3",
"prompt" => "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model" => "V5",
"custom_mode" => false,
"instrumental" => false
],
"out_task_id" => "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
"params": [
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
],
"out_task_id": "suno_cover_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_cover\",
\"params\": {
\"audio_url\": \"https://example.com/song.mp3\",
\"prompt\": \"Turn it into rainy-night jazz, close-up vocals, lo-fi\",
\"suno_model\": \"V5\",
\"custom_mode\": false,
\"instrumental\": false
},
\"out_task_id\": \"suno_cover_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_cover\",\"params\":{\"audio_url\":\"https://example.com/song.mp3\",\"prompt\":\"Turn it into rainy-night jazz, close-up vocals, lo-fi\",\"suno_model\":\"V5\",\"custom_mode\":false,\"instrumental\":false},\"out_task_id\":\"suno_cover_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_cover",
@"params": @{
@"audio_url": @"https://example.com/song.mp3",
@"prompt": @"Turn it into rainy-night jazz, close-up vocals, lo-fi",
@"suno_model": @"V5",
@"custom_mode": @NO,
@"instrumental": @NO
},
@"out_task_id": @"suno_cover_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_cover",
"params": {
"audio_url": "https://example.com/song.mp3",
"prompt": "Turn it into rainy-night jazz, close-up vocals, lo-fi",
"suno_model": "V5",
"custom_mode": false,
"instrumental": false
},
"out_task_id": "suno_cover_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_cover",
params: {
audio_url: "https://example.com/song.mp3",
prompt: "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model: "V5",
custom_mode: false,
instrumental: false
},
out_task_id: "suno_cover_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_cover",
params = list(
audio_url = "https://example.com/song.mp3",
prompt = "Turn it into rainy-night jazz, close-up vocals, lo-fi",
suno_model = "V5",
custom_mode = FALSE,
instrumental = FALSE
),
out_task_id = "suno_cover_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_cover_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
Simple mode only requires
prompt and audio_url. For custom mode, please pass both title and style.Please provide a publicly accessible audio URL. Local files must first be uploaded to an address that can be read publicly.