curl --request POST \
--url https://api.parallellabs.app/api/v0/audio/music \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"prompt": "<string>",
"duration": 10,
"instrumental": true
}
'import requests
url = "https://api.parallellabs.app/api/v0/audio/music"
payload = {
"companyId": "<string>",
"prompt": "<string>",
"duration": 10,
"instrumental": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({companyId: '<string>', prompt: '<string>', duration: 10, instrumental: true})
};
fetch('https://api.parallellabs.app/api/v0/audio/music', 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.parallellabs.app/api/v0/audio/music",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'companyId' => '<string>',
'prompt' => '<string>',
'duration' => 10,
'instrumental' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.parallellabs.app/api/v0/audio/music"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 10,\n \"instrumental\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.parallellabs.app/api/v0/audio/music")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 10,\n \"instrumental\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/audio/music")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"companyId\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 10,\n \"instrumental\": true\n}"
response = http.request(request)
puts response.read_body{
"audioId": "<string>",
"audioUrl": "<string>",
"duration": 123,
"model": "<string>",
"creditsCharged": 123,
"format": "<string>",
"msg": "<string>"
}Generate custom music.
Default to free stock music for music, soundtracks, reels and stories: use search_stock_music then import_stock_music. Use paid create_music ONLY when the user explicitly requests custom AI-generated music. Never automatically fall back to paid generation when stock search/import fails; try different keywords or tracks and report if none are suitable. Create music with ElevenLabs and return a permanent public audio URL and duration in seconds. Describe genre, mood, instruments, tempo and any desired lyrics. Instrumental defaults to true for background music underneath narration. Embed the URL in animated canvas HTML as to include it in the exported MP4. Generation consumes audio credits.
curl --request POST \
--url https://api.parallellabs.app/api/v0/audio/music \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"prompt": "<string>",
"duration": 10,
"instrumental": true
}
'import requests
url = "https://api.parallellabs.app/api/v0/audio/music"
payload = {
"companyId": "<string>",
"prompt": "<string>",
"duration": 10,
"instrumental": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({companyId: '<string>', prompt: '<string>', duration: 10, instrumental: true})
};
fetch('https://api.parallellabs.app/api/v0/audio/music', 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.parallellabs.app/api/v0/audio/music",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'companyId' => '<string>',
'prompt' => '<string>',
'duration' => 10,
'instrumental' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.parallellabs.app/api/v0/audio/music"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 10,\n \"instrumental\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.parallellabs.app/api/v0/audio/music")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 10,\n \"instrumental\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/audio/music")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"companyId\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 10,\n \"instrumental\": true\n}"
response = http.request(request)
puts response.read_body{
"audioId": "<string>",
"audioUrl": "<string>",
"duration": 123,
"model": "<string>",
"creditsCharged": 123,
"format": "<string>",
"msg": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Body
Response
Successful response

