curl --request POST \
--url https://api.deapi.ai/api/v1/client/txt2music \
--header 'Accept: <accept>' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'caption=upbeat electronic dance music with energetic synths' \
--form model=AceStep_1_5_Turbo \
--form 'lyrics=[Instrumental]' \
--form duration=30 \
--form inference_steps=8 \
--form guidance_scale=1 \
--form seed=-1 \
--form format=mp3 \
--form bpm=120 \
--form 'keyscale=C major' \
--form timesignature=4 \
--form vocal_language=en \
--form 'reference_audio=<string>' \
--form webhook_url=https://your-server.com/webhooks/deapi \
--form reference_audio.0='@example-file' \
--form reference_audio.1='@example-file'import requests
url = "https://api.deapi.ai/api/v1/client/txt2music"
files = {
"reference_audio.0": ("example-file", open("example-file", "rb")),
"reference_audio.1": ("example-file", open("example-file", "rb"))
}
payload = {
"caption": "upbeat electronic dance music with energetic synths",
"model": "AceStep_1_5_Turbo",
"lyrics": "[Instrumental]",
"duration": "30",
"inference_steps": "8",
"guidance_scale": "1",
"seed": "-1",
"format": "mp3",
"bpm": "120",
"keyscale": "C major",
"timesignature": "4",
"vocal_language": "en",
"reference_audio": "<string>",
"webhook_url": "https://your-server.com/webhooks/deapi"
}
headers = {
"Accept": "<accept>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('caption', 'upbeat electronic dance music with energetic synths');
form.append('model', 'AceStep_1_5_Turbo');
form.append('lyrics', '[Instrumental]');
form.append('duration', '30');
form.append('inference_steps', '8');
form.append('guidance_scale', '1');
form.append('seed', '-1');
form.append('format', 'mp3');
form.append('bpm', '120');
form.append('keyscale', 'C major');
form.append('timesignature', '4');
form.append('vocal_language', 'en');
form.append('reference_audio', '<string>');
form.append('webhook_url', 'https://your-server.com/webhooks/deapi');
form.append('reference_audio.0', '{
"fileName": "example-file"
}');
form.append('reference_audio.1', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Accept: '<accept>', Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.deapi.ai/api/v1/client/txt2music', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.deapi.ai/api/v1/client/txt2music",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Accept: <accept>",
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.deapi.ai/api/v1/client/txt2music"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Accept", "<accept>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.deapi.ai/api/v1/client/txt2music")
.header("Accept", "<accept>")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.deapi.ai/api/v1/client/txt2music")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept"] = '<accept>'
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"data": {
"request_id": "c08a339c-73e5-4d67-a4d5-231302fbff9a"
}
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"message": "The selected model does not support Text To Image.",
"errors": {
"model": [
"The selected model does not support Text To Image."
]
}
}{
"message": "Too Many Attempts."
}Text-to-Music
Endpoint for requesting text2music inference
curl --request POST \
--url https://api.deapi.ai/api/v1/client/txt2music \
--header 'Accept: <accept>' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form 'caption=upbeat electronic dance music with energetic synths' \
--form model=AceStep_1_5_Turbo \
--form 'lyrics=[Instrumental]' \
--form duration=30 \
--form inference_steps=8 \
--form guidance_scale=1 \
--form seed=-1 \
--form format=mp3 \
--form bpm=120 \
--form 'keyscale=C major' \
--form timesignature=4 \
--form vocal_language=en \
--form 'reference_audio=<string>' \
--form webhook_url=https://your-server.com/webhooks/deapi \
--form reference_audio.0='@example-file' \
--form reference_audio.1='@example-file'import requests
url = "https://api.deapi.ai/api/v1/client/txt2music"
files = {
"reference_audio.0": ("example-file", open("example-file", "rb")),
"reference_audio.1": ("example-file", open("example-file", "rb"))
}
payload = {
"caption": "upbeat electronic dance music with energetic synths",
"model": "AceStep_1_5_Turbo",
"lyrics": "[Instrumental]",
"duration": "30",
"inference_steps": "8",
"guidance_scale": "1",
"seed": "-1",
"format": "mp3",
"bpm": "120",
"keyscale": "C major",
"timesignature": "4",
"vocal_language": "en",
"reference_audio": "<string>",
"webhook_url": "https://your-server.com/webhooks/deapi"
}
headers = {
"Accept": "<accept>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('caption', 'upbeat electronic dance music with energetic synths');
form.append('model', 'AceStep_1_5_Turbo');
form.append('lyrics', '[Instrumental]');
form.append('duration', '30');
form.append('inference_steps', '8');
form.append('guidance_scale', '1');
form.append('seed', '-1');
form.append('format', 'mp3');
form.append('bpm', '120');
form.append('keyscale', 'C major');
form.append('timesignature', '4');
form.append('vocal_language', 'en');
form.append('reference_audio', '<string>');
form.append('webhook_url', 'https://your-server.com/webhooks/deapi');
form.append('reference_audio.0', '{
"fileName": "example-file"
}');
form.append('reference_audio.1', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {Accept: '<accept>', Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.deapi.ai/api/v1/client/txt2music', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.deapi.ai/api/v1/client/txt2music",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Accept: <accept>",
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.deapi.ai/api/v1/client/txt2music"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Accept", "<accept>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.deapi.ai/api/v1/client/txt2music")
.header("Accept", "<accept>")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.deapi.ai/api/v1/client/txt2music")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept"] = '<accept>'
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"caption\"\r\n\r\nupbeat electronic dance music with energetic synths\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nAceStep_1_5_Turbo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"lyrics\"\r\n\r\n[Instrumental]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"duration\"\r\n\r\n30\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"inference_steps\"\r\n\r\n8\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"guidance_scale\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"seed\"\r\n\r\n-1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"format\"\r\n\r\nmp3\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"bpm\"\r\n\r\n120\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"keyscale\"\r\n\r\nC major\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timesignature\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"vocal_language\"\r\n\r\nen\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"webhook_url\"\r\n\r\nhttps://your-server.com/webhooks/deapi\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.0\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_audio.1\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"data": {
"request_id": "c08a339c-73e5-4d67-a4d5-231302fbff9a"
}
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"data": {},
"message": "<string>",
"errors": [
"<unknown>"
],
"statusCode": 123
}{
"message": "The selected model does not support Text To Image.",
"errors": {
"model": [
"The selected model does not support Text To Image."
]
}
}{
"message": "Too Many Attempts."
}reference_audio file for style transfer — the model will use it as a stylistic reference for the generated track. The endpoint returns a task ID to track processing status. Ideal for apps needing automated music creation — background tracks, jingles, or full songs with vocals.
slug and check specific limits.Field values worth knowing
These constraints are enforced by validation and are easy to trip over. They are identical on the v2 endpoint,POST /api/v2/audio/music.
| Field | Constraint |
|---|---|
lyrics | Required and must be non-empty, including for instrumental tracks. Omitting it or sending "" returns 422 The lyrics field is required. For an instrumental track, send "[Instrumental]". |
timesignature | Integer only, and only 2, 3, 4 or 6 are accepted. A notation string such as "4/4" returns 422 The timesignature field must be an integer. Map the numerator of an x/4 signature (4/4 → 4, 3/4 → 3, 2/4 → 2, 6/8 → 6); 5/4 and 7/8 cannot be expressed. Omit the field or send an empty value to let the model choose. |
format | Use mp3 — the only format the current models actually produce (info.limits.output_formats). Anything else returns 422 The selected format is invalid. |
keyscale | Free-form string ("C major", "D minor", "F# minor"). Not validated against a fixed list — passed to the model as a hint. |
vocal_language | Free-form string. Both ISO codes ("en") and language names ("English") are accepted. Not validated against a fixed list. |
timesignature is validated as an integer, not as musical notation. If you populate it from a UI dropdown offering values like 4/4 or 6/8, convert to the integer before sending — otherwise only the requests that set the field fail, while the rest keep succeeding.- Supported formats: MP3, OGG, M4A
- Maximum file size: 10 MB (default; configurable)
- Duration must be within model-specific limits — 5–60 s on the ACE-Step models (
info.limits.min_ref_audio_duration/max_ref_audio_duration)
multipart/form-data content type to support file uploads.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
application/json Body
Music generation parameters
Text description of the music to generate
"upbeat electronic dance music with energetic synths"
The model to use for music generation. Available models can be retrieved via the GET /api/v1/client/models endpoint.
"AceStep_1_5_Turbo"
Required, and must not be empty. Lyrics for the music. Use "[Instrumental]" for instrumental tracks without vocals — omitting the field or sending an empty string returns 422 "The lyrics field is required."
1"[Instrumental]"
Duration in seconds. The accepted range is model-specific - read info.limits.min_duration / info.limits.max_duration for your model from the Model Selection endpoint; a value outside that range is rejected with 422. The turbo models accept 10-300, AceStep_1_5_Base 30-300.
30
Number of diffusion inference steps. The accepted range is model-specific - read info.limits.min_steps / info.limits.max_steps for your model from the Model Selection endpoint; a value outside that range is rejected with 422. The turbo models only accept 8; AceStep_1_5_Base accepts 5-100.
8
Classifier-free guidance scale. The accepted range is model-specific - read info.limits.min_guidance / info.limits.max_guidance for your model from the Model Selection endpoint; a value outside that range is rejected with 422. The turbo models (AceStep_1_5_Turbo, AceStep_1_5_XL_Turbo_INT8) only accept 1; AceStep_1_5_Base accepts 3-20.
1
Random seed. Use -1 for random.
-1
Audio output format. One of mp3, wav or flac. Any other value returns 422 "The selected format is invalid." mp3 is recommended for size; wav and flac are lossless and produce much larger result files.
mp3, wav, flac "mp3"
Beats per minute. The accepted range is model-specific - read info.limits.min_bpm / info.limits.max_bpm for your model from the Model Selection endpoint. The ACE-Step models accept 50-200.
120
Musical key/scale, as a free-form string (e.g. "C major", "F# minor", "D minor"). Not validated against a fixed list — the value is passed to the model as a hint.
"C major"
Time signature, as the number of beats per bar. Integer only — one of 2, 3, 4 or 6. Musical notation strings such as "4/4" or "3/4" are rejected with 422 "The timesignature field must be an integer." Map the numerator of a x/4 signature to this field (4/4 -> 4, 3/4 -> 3, 2/4 -> 2, 6/8 -> 6). Signatures that cannot be expressed as 2, 3, 4 or 6 (e.g. 5/4, 7/8) are not supported. Omit the field or send an empty value to let the model choose automatically.
2, 3, 4, 6 4
Language for vocals, as a free-form string. Both ISO codes ("en", "es", "fr") and language names ("English") are accepted. Not validated against a fixed list — the value is passed to the model as a hint.
"en"
Optional reference audio file for style transfer. Supported formats: mp3, ogg, m4a. Max size configurable (default 15MB). Duration must be within model-specific limits.
Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters.
2048"https://your-server.com/webhooks/deapi"
Response
ID of the inference request.
Information from success endpoint
Show child attributes
Show child attributes
Was this page helpful?