curl -X POST https://api.apimart.ai/v1/music/generations/addStem \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm string section"
}'
import requests
url = "https://api.apimart.ai/v1/music/generations/addStem"
payload = {
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": False,
"gpt_description": "join the warm string section"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/addStem";
const payload = {
model: "suno",
task_id: "task_01ABC",
audio_index: 1,
version: "v6",
custom: false,
gpt_description: "Add warm string section"
};
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://api.apimart.ai/v1/music/generations/addStem"
payload := map[string]interface{}{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm strings section",
}
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://api.apimart.ai/v1/music/generations/addStem";
String payload = """
{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm strings section"
}
""";
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://api.apimart.ai/v1/music/generations/addStem";
$payload = [
"model" => "suno",
"task_id" => "task_01ABC",
"audio_index" => 1,
"version" => "v6",
"custom" => false,
"gpt_description" => "Add warm string section"
];
$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://api.apimart.ai/v1/music/generations/addStem")
payload = {
model: "suno",
task_id: "task_01ABC",
audio_index: 1,
version: "v6",
custom: false,
gpt_description: "Add warm string section"
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
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://api.apimart.ai/v1/music/generations/addStem")!
let payload: [String: Any] = [
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm string section"
]
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://api.apimart.ai/v1/music/generations/addStem";
var payload = @"{
""model"": ""suno"",
""task_id"": ""task_01ABC"",
""audio_index"": 1,
""version"": ""v6"",
""custom"": false,
""gpt_description"": ""join the warm string section""
}";
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://api.apimart.ai/v1/music/generations/addStem";
const char *payload = "{"
"\"model\":\"suno\","
"\"task_id\":\"task_01ABC\","
"\"audio_index\":1,"
"\"version\":\"v6\","
"\"custom\":false,"
"\"gpt_description\":\"join the warm string section\""
"}";
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://api.apimart.ai/v1/music/generations/addStem"];
NSDictionary *payload = @{
@"model": @"suno",
@"task_id": @"task_01ABC",
@"audio_index": @1,
@"version": @"v6",
@"custom": @NO,
@"gpt_description": @"join the warm string section"
};
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://api.apimart.ai/v1/music/generations/addStem"
let payload = {|{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the string section"
}|}
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://api.apimart.ai/v1/music/generations/addStem');
final payload = {
'model': 'suno',
'task_id': 'task_01ABC',
'audio_index': 1,
'version': 'v6',
'custom': false,
'gpt_description': 'join the string section'
};
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://api.apimart.ai/v1/music/generations/addStem"
payload <- list(
model = "suno",
task_id = "task_01ABC",
audio_index = 1,
version = "v6",
custom = FALSE,
gpt_description = "Add warm string section"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Paramètres de requête invalides",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Échec de l'authentification, veuillez vérifier votre clé API",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant, veuillez recharger puis réessayer",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Accès interdit, vous n'avez pas l'autorisation d'accéder à cette ressource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Requêtes trop fréquentes, veuillez réessayer plus tard",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Erreur interne du serveur, veuillez réessayer plus tard",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Erreur de passerelle, le serveur est temporairement indisponible",
"type": "bad_gateway"
}
}
Suno
Ajouter une piste (add stem)
- Superposer un stem sur une piste existante.
- Référencer la piste source : spécifiée par
task_id+audio_index, sans avoir à mémoriser aucun id supplémentaire - Tâche asynchrone : la soumission renvoie un
task_id, interrogezGET /v1/music/tasks/:task_idpour récupérer le résultat
POST
/
v1
/
music
/
generations
/
addStem
curl -X POST https://api.apimart.ai/v1/music/generations/addStem \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm string section"
}'
import requests
url = "https://api.apimart.ai/v1/music/generations/addStem"
payload = {
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": False,
"gpt_description": "join the warm string section"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/addStem";
const payload = {
model: "suno",
task_id: "task_01ABC",
audio_index: 1,
version: "v6",
custom: false,
gpt_description: "Add warm string section"
};
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://api.apimart.ai/v1/music/generations/addStem"
payload := map[string]interface{}{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm strings section",
}
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://api.apimart.ai/v1/music/generations/addStem";
String payload = """
{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm strings section"
}
""";
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://api.apimart.ai/v1/music/generations/addStem";
$payload = [
"model" => "suno",
"task_id" => "task_01ABC",
"audio_index" => 1,
"version" => "v6",
"custom" => false,
"gpt_description" => "Add warm string section"
];
$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://api.apimart.ai/v1/music/generations/addStem")
payload = {
model: "suno",
task_id: "task_01ABC",
audio_index: 1,
version: "v6",
custom: false,
gpt_description: "Add warm string section"
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
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://api.apimart.ai/v1/music/generations/addStem")!
let payload: [String: Any] = [
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm string section"
]
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://api.apimart.ai/v1/music/generations/addStem";
var payload = @"{
""model"": ""suno"",
""task_id"": ""task_01ABC"",
""audio_index"": 1,
""version"": ""v6"",
""custom"": false,
""gpt_description"": ""join the warm string section""
}";
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://api.apimart.ai/v1/music/generations/addStem";
const char *payload = "{"
"\"model\":\"suno\","
"\"task_id\":\"task_01ABC\","
"\"audio_index\":1,"
"\"version\":\"v6\","
"\"custom\":false,"
"\"gpt_description\":\"join the warm string section\""
"}";
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://api.apimart.ai/v1/music/generations/addStem"];
NSDictionary *payload = @{
@"model": @"suno",
@"task_id": @"task_01ABC",
@"audio_index": @1,
@"version": @"v6",
@"custom": @NO,
@"gpt_description": @"join the warm string section"
};
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://api.apimart.ai/v1/music/generations/addStem"
let payload = {|{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the string section"
}|}
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://api.apimart.ai/v1/music/generations/addStem');
final payload = {
'model': 'suno',
'task_id': 'task_01ABC',
'audio_index': 1,
'version': 'v6',
'custom': false,
'gpt_description': 'join the string section'
};
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://api.apimart.ai/v1/music/generations/addStem"
payload <- list(
model = "suno",
task_id = "task_01ABC",
audio_index = 1,
version = "v6",
custom = FALSE,
gpt_description = "Add warm string section"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Paramètres de requête invalides",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Échec de l'authentification, veuillez vérifier votre clé API",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant, veuillez recharger puis réessayer",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Accès interdit, vous n'avez pas l'autorisation d'accéder à cette ressource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Requêtes trop fréquentes, veuillez réessayer plus tard",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Erreur interne du serveur, veuillez réessayer plus tard",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Erreur de passerelle, le serveur est temporairement indisponible",
"type": "bad_gateway"
}
}
Référence audio source : aucune ID supplémentaire n’est nécessaire pour une piste issue d’un morceau existant. Transmettez la
task_id de la tâche source et audio_index pour choisir la piste dans data.result.music[] (indexé à partir de 1, valeur par défaut 1).custom détermine les champs utilisés. Toute valeur envoyée doit respecter les contraintes de type, de plage et de longueur, même si le champ n’est pas utilisé dans le mode sélectionné. Avec custom=true, prompt contient les paroles et peut être obligatoire lorsque instrumental=false, selon les conditions ci-dessous. Avec custom=false, gpt_description est obligatoire. Si custom est omis, le backend déduit le mode à partir de prompt, gpt_description, tags et title.curl -X POST https://api.apimart.ai/v1/music/generations/addStem \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm string section"
}'
import requests
url = "https://api.apimart.ai/v1/music/generations/addStem"
payload = {
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": False,
"gpt_description": "join the warm string section"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/addStem";
const payload = {
model: "suno",
task_id: "task_01ABC",
audio_index: 1,
version: "v6",
custom: false,
gpt_description: "Add warm string section"
};
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://api.apimart.ai/v1/music/generations/addStem"
payload := map[string]interface{}{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm strings section",
}
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://api.apimart.ai/v1/music/generations/addStem";
String payload = """
{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm strings section"
}
""";
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://api.apimart.ai/v1/music/generations/addStem";
$payload = [
"model" => "suno",
"task_id" => "task_01ABC",
"audio_index" => 1,
"version" => "v6",
"custom" => false,
"gpt_description" => "Add warm string section"
];
$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://api.apimart.ai/v1/music/generations/addStem")
payload = {
model: "suno",
task_id: "task_01ABC",
audio_index: 1,
version: "v6",
custom: false,
gpt_description: "Add warm string section"
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
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://api.apimart.ai/v1/music/generations/addStem")!
let payload: [String: Any] = [
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the warm string section"
]
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://api.apimart.ai/v1/music/generations/addStem";
var payload = @"{
""model"": ""suno"",
""task_id"": ""task_01ABC"",
""audio_index"": 1,
""version"": ""v6"",
""custom"": false,
""gpt_description"": ""join the warm string section""
}";
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://api.apimart.ai/v1/music/generations/addStem";
const char *payload = "{"
"\"model\":\"suno\","
"\"task_id\":\"task_01ABC\","
"\"audio_index\":1,"
"\"version\":\"v6\","
"\"custom\":false,"
"\"gpt_description\":\"join the warm string section\""
"}";
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://api.apimart.ai/v1/music/generations/addStem"];
NSDictionary *payload = @{
@"model": @"suno",
@"task_id": @"task_01ABC",
@"audio_index": @1,
@"version": @"v6",
@"custom": @NO,
@"gpt_description": @"join the warm string section"
};
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://api.apimart.ai/v1/music/generations/addStem"
let payload = {|{
"model": "suno",
"task_id": "task_01ABC",
"audio_index": 1,
"version": "v6",
"custom": false,
"gpt_description": "join the string section"
}|}
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://api.apimart.ai/v1/music/generations/addStem');
final payload = {
'model': 'suno',
'task_id': 'task_01ABC',
'audio_index': 1,
'version': 'v6',
'custom': false,
'gpt_description': 'join the string section'
};
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://api.apimart.ai/v1/music/generations/addStem"
payload <- list(
model = "suno",
task_id = "task_01ABC",
audio_index = 1,
version = "v6",
custom = FALSE,
gpt_description = "Add warm string section"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Paramètres de requête invalides",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Échec de l'authentification, veuillez vérifier votre clé API",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant, veuillez recharger puis réessayer",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Accès interdit, vous n'avez pas l'autorisation d'accéder à cette ressource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Requêtes trop fréquentes, veuillez réessayer plus tard",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Erreur interne du serveur, veuillez réessayer plus tard",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Erreur de passerelle, le serveur est temporairement indisponible",
"type": "bad_gateway"
}
}
Authorizations
string
requis
Toutes les interfaces nécessitent une authentification via Bearer TokenObtenir la clé API :Rendez-vous sur la page de gestion des clés API pour obtenir votre clé APILors de l’utilisation, ajoutez dans l’en-tête de la requête :
Authorization: Bearer YOUR_API_KEY
Body
string
défaut:"suno"
Modèle audio. Actuellement, passez
suno (par défaut suno si non fourni).string
requis
Le
task_id de notre côté correspondant à la tâche qui a produit la piste source. S’il manque ou si la source ne peut pas être résolue, un 400 est renvoyé dès la soumission.integer
défaut:"1"
Sélectionne une piste dans
data.result.music[] de la tâche source (indexé à partir de 1 ; défaut 1).string
défaut:"v6"
Version publique :
v6 / v6-wild / v6-mini. Valeur par défaut v6 ; omettez-la avec custom_model_id.string
UUID complet renvoyé par la tâche de création du modèle. Incompatible avec
version.boolean
true=mode personnalisé (prompt utilisé comme paroles) ; false=mode inspiration (utilise gpt_description) ; si omis, déduit du contenu (voir l’avertissement ci-dessus).string
Paroles. Prend effet lorsque
custom=true (ignoré en mode inspiration).string
Prompt d’inspiration. Obligatoire lorsque
custom=false — s’il manque, la requête échoue avec 400 dès la soumission (rien n’est facturé).string
Titre. Ne prend effet que lorsque
custom=true.string
Tags de style. Ne prend effet que lorsque
custom=true.string
Tags de style à exclure. Ne prend effet que lorsque
custom=true.number
Poids du style,
0.00–1.00 (les valeurs hors limites renvoient directement un 400 dès la soumission). Ne prend effet que lorsque custom=true.number
Pondération de créativité, de
0.00 à 1.00. weirdness_constraint est un alias de compatibilité ; utilisez weirdness pour les nouvelles requêtes.number
Poids audio,
0.00–1.00. Ne prend effet que lorsque custom=true.string
Variation de style :
off / normal / high / extra / max.boolean
défaut:"false"
Active le mode Max. Nécessite le mode personnalisé et est facturé deux fois le prix standard.
string
Format audio de sortie :
mp3 / m4a / wav. Cet endpoint ne prend pas en charge de durée cible.Cette API ne prend en charge ni
auto_lyrics, ni persona_id, ni instrumental, ni vocal_gender, ni la durée cible.Obtenir le résultat : interrogez la tâche asynchrone jusqu’à sa fin. La génération prend généralement 30 à 120 secondes et la progression n’évolue pas forcément à intervalles fixes. Une fois terminée, lisez
audio_url dans data.result.music[]. En cas d’échec, le montant débité est remboursé automatiquement.Response
integer
Code de statut de la réponse