ElevenLabsAudio
Dialogue
A conversation between up to 4 voices from one script with ElevenLabs v3: one line per turn, like "Ana: Have you tried it yet?".
- Price
- 6 crper take · varies with length or size
- Usual time
- ≈ 30 s
- Model id
audio.dialogue
Playground
- Languages
- 7
- Takes
- Text
No example of this model yet. These are its real settings.
# 1. Create the job. It is charged once and refunded if it fails.
JOB_ID=$(curl -s -X POST https://mobyvid.com/api/v1/jobs \
-H "Authorization: Bearer $STAGLIGHT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"op": "audio.dialogue",
"params": {
"script": "A premium product shot of a glass serum bottle on wet stone, soft window light"
}
}' | jq -r .id)
# 2. Poll until it finishes. Each call waits up to 30 seconds.
while :; do
JOB=$(curl -s "https://mobyvid.com/api/v1/jobs/$JOB_ID?wait=30" -H "Authorization: Bearer $STAGLIGHT_API_KEY")
case "$(echo "$JOB" | jq -r .status)" in queued|running) ;; *) break ;; esac
done
# 3. Download the result from outputs[0].download_url.
DOWNLOAD_URL=$(echo "$JOB" | jq -r '.outputs[0].download_url')
curl -L -o result.mp3 "$DOWNLOAD_URL"
import os, uuid, requests
BASE = "https://mobyvid.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['STAGLIGHT_API_KEY']}"}
# 1. Create the job. It is charged once and refunded if it fails.
r = requests.post(f"{BASE}/jobs", timeout=60,
headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
json={
"op": "audio.dialogue",
"params": {
"script": "A premium product shot of a glass serum bottle on wet stone, soft window light"
}
})
r.raise_for_status()
job = r.json()
# 2. Poll until it finishes. Each call waits up to 30 seconds.
while job["status"] in ("queued", "running"):
job = requests.get(f"{BASE}/jobs/{job['id']}", headers=HEADERS,
params={"wait": 30}, timeout=60).json()
# 3. Download the result from outputs[0].download_url.
print(job["outputs"][0]["download_url"] if job["outputs"] else job["data"] or job["error"])
// Node 18 or newer. Save as run.mjs: top-level await needs a module.
const BASE = "https://mobyvid.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.STAGLIGHT_API_KEY}` };
// 1. Create the job. It is charged once and refunded if it fails.
let res = await fetch(`${BASE}/jobs`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
body: JSON.stringify({
"op": "audio.dialogue",
"params": {
"script": "A premium product shot of a glass serum bottle on wet stone, soft window light"
}
}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
let job = await res.json();
// 2. Poll until it finishes. Each call waits up to 30 seconds.
while (job.status === "queued" || job.status === "running") {
job = await (await fetch(`${BASE}/jobs/${job.id}?wait=30`, { headers })).json();
}
// 3. Download the result from outputs[0].download_url.
console.log(job.outputs[0]?.download_url ?? job.data ?? job.error);
{
"id": "job_19a2b3c4d5e6f7a8b9c0d1",
"op": "audio.dialogue",
"status": "queued",
"credits": 6,
"title": "",
"params": {
"script": "A premium product shot of a glass serum bottle on wet stone, soft window light"
},
"progress": null,
"outputs": [],
"data": null,
"error": null,
"run_id": null,
"source": "api",
"created_at": "2026-11-06T12:00:00Z",
"finished_at": null,
"eta_seconds": 30
}
What it costs
6 cr at the default length here. The price follows the length of your text or file, and the exact price shows before the job runs.
The playground shows the exact price for your settings. A job is charged once when it is accepted, and refunded if it fails.
Parameters
| Name | Type | Default | Allowed |
|---|---|---|---|
scriptrequiredDialogue |
string |
Up to 5,000 characters | |
voice_1Voice 1 |
enum |
hpp4J3VqNfWAUOO0d1Us |
hpp4J3VqNfWAUOO0d1Us, EkK5I93UQWFDigLMpZcX, Z3R5wn05IrDiVCyEkUrK, NNl6r8mD7vthiJatiJt1, YOq2y2Up4RgXP2HyXjE5, B8gJV1IhpuegLxdpXFOE, 2zRM7PkgwBPiau2jvVXc, 1SM7GgM6IMuvQlz2BwM3, 5l5f8iK3YPeGga21rQIX, scOwDtmlUjD3prqpp97I, NOpBlnGInO9m6vDvFkFC, BZgkqPqms7Kj9ulSkVzn, ... |
voice_2Voice 2 |
enum |
EkK5I93UQWFDigLMpZcX |
hpp4J3VqNfWAUOO0d1Us, EkK5I93UQWFDigLMpZcX, Z3R5wn05IrDiVCyEkUrK, NNl6r8mD7vthiJatiJt1, YOq2y2Up4RgXP2HyXjE5, B8gJV1IhpuegLxdpXFOE, 2zRM7PkgwBPiau2jvVXc, 1SM7GgM6IMuvQlz2BwM3, 5l5f8iK3YPeGga21rQIX, scOwDtmlUjD3prqpp97I, NOpBlnGInO9m6vDvFkFC, BZgkqPqms7Kj9ulSkVzn, ... |
stabilityDelivery |
enum |
natural |
creative, natural, robust |
languageLanguage |
enum |
auto |
auto, es, en, pt, fr, it, de |
voice_3Voice 3 |
enum |
B8gJV1IhpuegLxdpXFOE |
hpp4J3VqNfWAUOO0d1Us, EkK5I93UQWFDigLMpZcX, Z3R5wn05IrDiVCyEkUrK, NNl6r8mD7vthiJatiJt1, YOq2y2Up4RgXP2HyXjE5, B8gJV1IhpuegLxdpXFOE, 2zRM7PkgwBPiau2jvVXc, 1SM7GgM6IMuvQlz2BwM3, 5l5f8iK3YPeGga21rQIX, scOwDtmlUjD3prqpp97I, NOpBlnGInO9m6vDvFkFC, BZgkqPqms7Kj9ulSkVzn, ... |
voice_4Voice 4 |
enum |
nPczCjzI2devNBz1zQrb |
hpp4J3VqNfWAUOO0d1Us, EkK5I93UQWFDigLMpZcX, Z3R5wn05IrDiVCyEkUrK, NNl6r8mD7vthiJatiJt1, YOq2y2Up4RgXP2HyXjE5, B8gJV1IhpuegLxdpXFOE, 2zRM7PkgwBPiau2jvVXc, 1SM7GgM6IMuvQlz2BwM3, 5l5f8iK3YPeGga21rQIX, scOwDtmlUjD3prqpp97I, NOpBlnGInO9m6vDvFkFC, BZgkqPqms7Kj9ulSkVzn, ... |
Send these inside params. Files are media ids from POST /api/v1/uploads. View documentation
More models
-
Audioaudio.tts
- Voices
- 66
- Languages
- 7
- Takes
- Text
ElevenLabs / Voiceover
Voiceover from your script with ElevenLabs, with word timings for captions.
5 crper take · varies with length or size
-
Audioaudio.music
- Length
- 10-360 s
- Takes
- Text
Suno / Music
Two tracks per take with Suno.
12 crper take · 30 s
-
Audioaudio.sfx
- Takes
- Text
Suno / Sound effects
Short effects from a description: hits, ambience and transitions.
3 crper take