Skip to main content

ElevenLabs · audio AI API

ElevenLabs Dialogue API

Access ElevenLabs Text-to-Dialogue API for multi-voice conversation generation through Unifically's unified API.

  • from $0.0484 per 1K characters
  • $0.20 free balance on signup
  • pay per use, no subscription
  • up to 19% below official
  • TTS, dialogue, sound effects
  • speech-to-text, voice changer, isolation

What is ElevenLabs Dialogue?

ElevenLabs Dialogue is a multi-speaker audio endpoint that takes an array of {text, voice} turns and returns one combined audio file for the conversation. Up to 10 distinct ElevenLabs voices can appear in a single call, each turn picks any voice ID from your account (presets or clones), and the model handles the joins between turns so the result sounds like a real exchange rather than stitched TTS calls. The endpoint always uses the eleven_v3 model under the hood, so there is no model picker to manage. You control language via language_code (default en) and steadiness via stability (0 to 1). Inline emotion tags like [excitedly] or [whispered] at the start of a turn shape the delivery without any extra parameters.

Key features of ElevenLabs Dialogue

Five features cover what you'll set on a typical job.

Up to 10 speakers in one call

Each entry in the `dialogue` array names a `voice` ID and a piece of `text`. Mix presets, clones, and custom voices freely in the same conversation. The model returns one combined audio file instead of separate per-turn renders.

Native turn handoff

Pacing, breath, and room tone carry across speaker changes. That is the difference from stitching independent TTS calls, where each turn comes back with its own ambient signature and the joins read as cuts.

Inline emotion tags

Square-bracket tags at the start of a turn, such as `[excitedly]`, `[warmly]`, `[whispered]`, or `[shouted]`, steer the delivery for that line. No extra fields, no parallel script for direction notes.

V3 quality without a model picker

The endpoint always uses `eleven_v3`, the most expressive ElevenLabs model. No `model_id` to choose, no fallback path, no per-turn quality drift across a long conversation.

Per-conversation language and stability

`language_code` defaults to `en` and accepts ISO codes for other languages. `stability` (0 to 1) controls voice steadiness across turns, so you can dial drama up for fiction or down for narration in the same payload.

Best for

Scripted podcasts

Alternating hosts with distinct timbres in one API call. Inline emotion tags carry tone shifts without separate direction notes.

Audiobook scenes

Multiple cast voices for dialogue passages while the narrator stays on a different ElevenLabs voice. Mix in clones for branded narrator voices.

Training simulators

Role-play lines with fixed casting per character. Up to 10 voices fits a typical scenario script (customer, agent, supervisor, observer).

Game NPC barks and short scenes

Short turn-based dialogue between NPCs in a single render. Pair with a fixed `stability` to keep the cast tonally consistent across patches.

Product walkthroughs

Conversational two-host explainer instead of single-narrator voiceover. Reads as a podcast more than as a tutorial.

Language learning dialogue

Per-conversation stability for clarity in listening exercises. Switch `language_code` per scene to deliver content in the target language.

Use cases

Generate a podcast intro by writing a 4-turn dialogue between two hosts and dropping [warmly] and [excitedly] tags on the lines that need them. Build a compliance training scenario with three speakers (employee, customer, manager) and re-render with different stability values to A/B test how steady the cast should sound. Add an in-game dialogue system that batches NPC exchanges into single Dialogue calls so room tone matches across the scene. Localize a conversational explainer by switching language_code and the per-turn voice IDs while keeping the script structure constant.

API examples

Call ElevenLabs Dialogue from any language by POSTing to /v1/tasks. Full parameter docs live at docs.unifically.com/models/audio/elevenlabs/text-to-dialogue.

curl -X POST https://api.unifically.com/v1/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "elevenlabs/text-to-dialogue",
    "input": {
      "stability": 0.5,
      "language_code": "en",
      "dialogue": [
        {
          "text": "[excitedly] Hey Jessica! Have you tried the new ElevenLabs V3?",
          "voice": "TX3LPaxmHKxFdv7VOQHJ"
        },
        {
          "text": "[curiously] Yeah, just got it! The emotion is so amazing.",
          "voice": "cgSgspJ2msm6clMCkdW9"
        }
      ]
    }
  }'

Successful submission returns a task_id. Poll GET /v1/tasks/<task_id> or set a callback_url on the request to receive the finished audio URL.

FAQs

People also ask

ElevenLabs Dialogue is a multi-speaker audio endpoint that takes an array of {text, voice} turns and returns one combined audio file for the conversation. Each turn names an ElevenLabs voice ID, and the model handles the joins between them so the result sounds like a real chat instead of stitched-together TTS calls.

Fill Speaker 1 and Speaker 2 at minimum. Optional speakers 3 to 10 appear when you enable their toggles, each with its own voice and text fields. The payload becomes the dialogue array on the API call.

No. Dialogue always uses the eleven_v3 model under the hood, so there is no model_id to set. You control language via language_code (default en) and timbre via the stability field.

Use Dialogue when conversational pacing and voice handoff matter. Stitching separate TTS renders gives flat turn boundaries and inconsistent room tone. Dialogue handles the joins natively, with audible breath and timing between speakers.

Inline tags in square brackets at the start of a turn, such as [excitedly], [curiously], [warmly], [sadly], [angrily], [whispered], and [shouted]. Drop one in front of the text and the speaker delivers the line in that tone.

Up to 10 distinct voices in one call. Each turn picks any voice ID from your ElevenLabs account, so cloned voices and presets mix freely in the same conversation.

stability accepts a value from 0 to 1 (default 0.5). Lower values give more emotional range and variation. Higher values keep the voice steadier across turns. Use lower values for drama, higher for narration-style consistency.

ElevenLabs API pricing

Text routes are billed per 1,000 characters; audio routes per minute or hour of input; sound effects per generated clip.

ModelPriceNotes
ElevenLabs Text to Speech
elevenlabs/text-to-speech
  • model_id: eleven_flash_v2_5/eleven_turbo_v2_5, $0.0484/1000 characters
  • model_id: eleven_multilingual_v2, $0.0968/1000 characters
  • model_id: eleven_v3, $0.0968/1000 characters
ElevenLabs Text to Dialogue
elevenlabs/text-to-dialogue
  • model_id: eleven_flash_v2_5/eleven_turbo_v2_5, $0.0484/1000 characters
  • model_id: eleven_multilingual_v2, $0.0968/1000 characters
  • model_id: eleven_v3, $0.0968/1000 characters
ElevenLabs Sound Effects
elevenlabs/sound-effect
  • $0.0194
ElevenLabs Speech to Text
elevenlabs/speech-to-text
  • $0.1561/hour
ElevenLabs Voice Changer
elevenlabs/voice-changer
  • $0.0968/minute
ElevenLabs Audio Isolation
elevenlabs/audio-isolation
  • $0.0968/minute
  • 19% below official

Billed per generation from a prepaid balance. New accounts start with $0.20 of free balance; no subscription, no credit expiry. The playground shows the exact cost of a request before it runs. Rates synced Sep 21, 2026. All model prices.

Call the ElevenLabs API

Create a task with elevenlabs/text-to-speech, then poll it or pass a callback_url. Add "dry_run": true to get the price of a request without running it. Keys are created on the API keys page.

curl

curl -X POST https://api.unifically.com/v1/tasks \
  -H "Authorization: Bearer $UNIFICALLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "elevenlabs/text-to-speech",
  "input": {
    "text": "Welcome to Unifically. This voice was generated with a single API call."
  }
}'

# Poll until "status" is "completed", then read output.audio_url
curl https://api.unifically.com/v1/tasks/TASK_ID \
  -H "Authorization: Bearer $UNIFICALLY_API_KEY"

Python

import os, time, requests

API = "https://api.unifically.com/v1/tasks"
headers = {"Authorization": f"Bearer {os.environ['UNIFICALLY_API_KEY']}"}

task = requests.post(API, headers=headers, json={
    "model": "elevenlabs/text-to-speech",
    "input": {
        "text": "Welcome to Unifically. This voice was generated with a single API call."
    }
}).json()["data"]

while task["status"] not in ("completed", "failed"):
    time.sleep(5)
    task = requests.get(f"{API}/{task['task_id']}", headers=headers).json()["data"]

print(task["output"]["audio_url"])

Every parameter, limit and response field is in the ElevenLabs API reference.

ElevenLabs sub-models

Six routes share this page — text-to-speech, dialogue, sound effects, audio isolation, speech-to-text, and voice changer. Pick the one that matches your audio job.