Eleven v3 Dialogue
curl --request POST \
--url https://api.snapgen.org/v1/audio/dialogue \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"inputs": [
{
"text": "<string>",
"voice": "<string>"
}
],
"response_format": "<string>",
"language": "<string>",
"stability": 123,
"seed": 123
}
'import requests
url = "https://api.snapgen.org/v1/audio/dialogue"
payload = {
"model": "<string>",
"inputs": [
{
"text": "<string>",
"voice": "<string>"
}
],
"response_format": "<string>",
"language": "<string>",
"stability": 123,
"seed": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
inputs: [{text: '<string>', voice: '<string>'}],
response_format: '<string>',
language: '<string>',
stability: 123,
seed: 123
})
};
fetch('https://api.snapgen.org/v1/audio/dialogue', 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.snapgen.org/v1/audio/dialogue",
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([
'model' => '<string>',
'inputs' => [
[
'text' => '<string>',
'voice' => '<string>'
]
],
'response_format' => '<string>',
'language' => '<string>',
'stability' => 123,
'seed' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.snapgen.org/v1/audio/dialogue"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"inputs\": [\n {\n \"text\": \"<string>\",\n \"voice\": \"<string>\"\n }\n ],\n \"response_format\": \"<string>\",\n \"language\": \"<string>\",\n \"stability\": 123,\n \"seed\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.snapgen.org/v1/audio/dialogue")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"inputs\": [\n {\n \"text\": \"<string>\",\n \"voice\": \"<string>\"\n }\n ],\n \"response_format\": \"<string>\",\n \"language\": \"<string>\",\n \"stability\": 123,\n \"seed\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snapgen.org/v1/audio/dialogue")
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 = "{\n \"model\": \"<string>\",\n \"inputs\": [\n {\n \"text\": \"<string>\",\n \"voice\": \"<string>\"\n }\n ],\n \"response_format\": \"<string>\",\n \"language\": \"<string>\",\n \"stability\": 123,\n \"seed\": 123\n}"
response = http.request(request)
puts response.read_bodyElevenLabs Speech
Eleven v3 Dialogue
Multi-speaker dialogue audio with ElevenLabs Eleven v3. $0.12 per 1,000 characters.
POST
/
v1
/
audio
/
dialogue
Eleven v3 Dialogue
curl --request POST \
--url https://api.snapgen.org/v1/audio/dialogue \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"inputs": [
{
"text": "<string>",
"voice": "<string>"
}
],
"response_format": "<string>",
"language": "<string>",
"stability": 123,
"seed": 123
}
'import requests
url = "https://api.snapgen.org/v1/audio/dialogue"
payload = {
"model": "<string>",
"inputs": [
{
"text": "<string>",
"voice": "<string>"
}
],
"response_format": "<string>",
"language": "<string>",
"stability": 123,
"seed": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
inputs: [{text: '<string>', voice: '<string>'}],
response_format: '<string>',
language: '<string>',
stability: 123,
seed: 123
})
};
fetch('https://api.snapgen.org/v1/audio/dialogue', 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.snapgen.org/v1/audio/dialogue",
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([
'model' => '<string>',
'inputs' => [
[
'text' => '<string>',
'voice' => '<string>'
]
],
'response_format' => '<string>',
'language' => '<string>',
'stability' => 123,
'seed' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.snapgen.org/v1/audio/dialogue"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"inputs\": [\n {\n \"text\": \"<string>\",\n \"voice\": \"<string>\"\n }\n ],\n \"response_format\": \"<string>\",\n \"language\": \"<string>\",\n \"stability\": 123,\n \"seed\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.snapgen.org/v1/audio/dialogue")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"inputs\": [\n {\n \"text\": \"<string>\",\n \"voice\": \"<string>\"\n }\n ],\n \"response_format\": \"<string>\",\n \"language\": \"<string>\",\n \"stability\": 123,\n \"seed\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snapgen.org/v1/audio/dialogue")
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 = "{\n \"model\": \"<string>\",\n \"inputs\": [\n {\n \"text\": \"<string>\",\n \"voice\": \"<string>\"\n }\n ],\n \"response_format\": \"<string>\",\n \"language\": \"<string>\",\n \"stability\": 123,\n \"seed\": 123\n}"
response = http.request(request)
puts response.read_bodyeleven-v3-dialogue turns a list of lines, each with its own voice, into one audio file of a conversation, using ElevenLabs Eleven v3.
| Property | Value |
|---|---|
| Model ID | eleven-v3-dialogue |
| Endpoint | POST /v1/audio/dialogue |
| Output | Audio bytes: MP3 (default), Opus, PCM, or WAV |
| Limits | Up to 50 lines, 2,000 characters in total, and 10 voices |
| Billed on | Characters of every line |
| Price | $0.12 per 1,000 characters (12 credits) |
string
required
Set to
eleven-v3-dialogue.object[]
required
1 to 50 lines in speaking order, each an object with
text and voice (a voice ID or first name from the voice list). The text of all lines totals at most 2,000 characters, and a dialogue uses at most 10 different voices.string
default:"mp3"
mp3, opus, pcm, or wav. See Output formats.string
An ISO 639 language code of two or three lowercase letters, such as
en or de. The provider rejects a code the model doesn’t support.number
From
0 to 1. Lower values give a broader emotional range; higher values sound more consistent.integer
From
0 to 4294967295. Makes repeated requests more repeatable, without guaranteeing identical audio.Request
curl https://api.snapgen.org/v1/audio/dialogue \
-H "Authorization: Bearer $SNAPGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "eleven-v3-dialogue",
"inputs": [
{
"text": "[excited] Did you see the launch?",
"voice": "JBFqnCBsd6RMkjVDRZzb"
},
{
"text": "[laughs] I watched it twice!",
"voice": "EXAVITQu4vr4xnSDxMaL"
}
]
}' \
--output dialogue.mp3
Content-Type that matches response_format.
Price examples
| Text | Price |
|---|---|
| 100 characters | $0.012 |
| 1,000 characters | $0.12 |
| 2,000 characters | $0.24 |
Synchronous audio endpoints reject
Idempotency-Key. If a request times out, check your Console request logs before you retry.
See Text to dialogue for every field, the response, and errors.