ElevenLabs
ElevenLabs
elevenlabs/text-to-dialogue
A speech and audio generation family built for developers, covering text-to-speech, conversational speech, sound effects, and music generation
Try elevenlabs/text-to-dialogue
Input
Showcases
View all showcasesOutput
audioPricing
elevenlabs/text-to-dialogue per 1,000 characters
| Unit Price | $0.125 |
|---|
Positioning Overview
elevenlabs/text-to-dialogue is an interface that directly synthesizes a multi-character dialogue text into speech: the caller describes each line and its voice using an array of { text, voice }, and the model outputs the corresponding human voice per line. All lines submitted in a single request must total no more than 5000 characters. It is suitable for developers who need to produce two-person or multi-person dialogue audio in a single request, such as short-drama dubbing, podcast conversations, voice assistant sample materials, and dialogue performance for interactive content.
Core Highlights
- Assign voices line by line and synthesize multi-person dialogue in one request — each line in the dialogue array is individually bound to a voice_id, with no need to split into multiple single-person syntheses and then splice them together.
- Switch voices per line, covering more than 60 candidate voices — the voice enum in the schema provides dozens of options, and different characters in a single dialogue can use different voices.
- Stability parameter adjustable as a whole — stability supports three levels: 0, 0.5, and 1, used to trade off between emotional variation and voice consistency.
- Language can be automatically detected or specified — when language_code is left empty, it is automatically detected; an ISO language code can also be explicitly specified, covering more than 70 languages.
Capability Description
Multi-character dialogue synthesis: describe lines and voices with a dialogue array, and a single call outputs dialogue audio containing multiple characters, eliminating segmented synthesis and manual splicing.
Per-line voice binding: the voice for each line can be selected independently, which is suitable for assigning different voices to different characters while preserving their respective vocal characteristics.
Stability and language control: stability controls the magnitude of emotional variation in the delivery, while language_code determines the reading language or delegates it to automatic detection, making it convenient to batch-process materials for a fixed language.
Long dialogue text processing: all lines in a single request are limited to a total of 5000 characters, making it suitable for submitting an entire dialogue script at once without worrying about internal segmentation.
Applicable Scenarios
- Short-drama and narrative content creators: multi-character dialogue scripts — submit role-specific lines together with their respective voices to obtain a complete dialogue audio track for plot performance in short dramas, radio dramas, or interactive dramas.
- Podcast and interview content: conversation scripts — convert two-person conversation text into a dialogue track with different voices, directly usable as podcast segments or show demos.
- Product and content teams: multilingual dialogue materials — specify a language code to synthesize dialogue audio in the corresponding language for dubbing and demonstrations of overseas versions of content.
- Developers: voice dialogue prototype materials — quickly generate multi-character sample audio for prototypes such as voice assistants and customer service bots, for process validation and internal demonstrations.
Limitations and Selection Advice
The output is audio and does not produce images or video; when a finished video is needed, visual production must be completed separately. All lines in a single request must not exceed 5000 characters in total; overly long scripts need to be split into multiple calls and spliced by the caller. Voices can only be selected from the voice list provided by the interface; new voices cannot be cloned directly. If the scenario involves only a single narration or single-person reading, the single-person text-to-speech route is sufficient, and there is no need to construct a dialogue array.
Frequently asked questions
View all FAQs →-
What is Turbo 2.5?
ElevenLabs' low-latency text-to-speech model for voice assistants, notifications, and high-volume voiceover.
-
How do I call it?
Send model (elevenlabs/text-to-speech-turbo-2-5) and input to POST /v1/tasks, then poll with taskId or configure a callback.
-
How is it billed?
Per 1,000 characters of input.text. See the pricing section above for the current rate.
-
Are previous_text and next_text billed?
No. They only give context for segmented synthesis so prosody joins smoothly.
Create a generation task
https://api.hiapi.ai/v1/tasks Headers
AuthorizationstringRequiredAccount API key. Required on every request. Example: Bearer YOUR_HIAPI_API_KEY. Get your API key
Content-TypestringOptionalThe request body is always parsed as JSON; when sent, only application/json (optionally with charset) is accepted — any other value returns 415. Example: application/json.
Idempotency-KeystringOptionalIdempotency key, up to 255 bytes. Retries with the same key from the same account create the task only once; replays return the original taskId.
On network timeouts or client retries, the same key creates the task only once — no double charges (scope: the API key's account). Use a business-unique identifier as the key (e.g. "order-42"); replays return the original taskId, and keys expire 24 hours after the first request. See the Unified Async API overview for the full scenario matrix.
Body
modelstringRequiredCurrent fixed value: elevenlabs/text-to-dialogue
routestringOptionalCurrent fixed value: default
inputobjectRequired
Business parameters for elevenlabs/text-to-dialogue and route default — see the parameter table below.
dialoguearrayRequiredminItems 1
An array of dialogue items; each element in the array contains two fields, text and voice, specifying that line's dialogue and the voice used for it respectively. The total character count of the text across all dialogue items must not exceed 5000.
Array [ object ]
Array items
textstringRequiredminLength 1The text content of this line of dialogue. The total number of characters across all text fields in the dialogue array must not exceed 5000.
voicestringRequiredDefault: "EkK5I93UQWFDigLMpZcX"The voice used for this line of dialogue; may be a preset voice name or a voice_id. Default is EkK5I93UQWFDigLMpZcX.
EkK5I93UQWFDigLMpZcXZ3R5wn05IrDiVCyEkUrKNNl6r8mD7vthiJatiJt1YOq2y2Up4RgXP2HyXjE5B8gJV1IhpuegLxdpXFOE2zRM7PkgwBPiau2jvVXc1SM7GgM6IMuvQlz2BwM35l5f8iK3YPeGga21rQIXShow all (59)
scOwDtmlUjD3prqpp97INOpBlnGInO9m6vDvFkFCBZgkqPqms7Kj9ulSkVznwo6udizrrtpIxWGp2qJkgU0LNdkMOQCOrPrwtbeeDGzg6RaUqxGRTHSBjfgFx70vRnQBMBu4FAYhjJbOSm1seazb4gs7RSlUVw7cP1bg08DkjqiVEzOn76yGqDuRKMlYmrm8trt5QyBnqXpMhyvQqiRxWQs4qSSBTX3LPaxmHKxFdv7VOQHJN2lVS1w4EtoT3dr4eOWOFGY2WhTYpPnrIDTdsKH5kPzsL2i3teMYv0FxEYQ6UgBBYS2sOqTuMpoF3BR0hpp4J3VqNfWAUOO0d1UsnPczCjzI2devNBz1zQrbuYXf8XasLslADfZ2MB4ugs0tAILXbY5DNrJrsM6FDTKMou8ccj1ZaWGBiotdvBKc2FfBKJfcZNyEt1n6DYkrAHD8iwork3YSUBbs56AoDkrOh6qfVPDXZ7PteR40ATw9ArzDf9h3v7t7g6xIsTj2HwM6VR4iXFCwlcMyyd2HUfFzxdCaC4Ta6aDn1KB0hjpdcocrUkmqSq93GQT4X1lKDXsQcixOflHkNRp1BlvT73UL6gyz9yzdeviXkFddZ4Oz8MokpPdl9cQBQq4p6mRkZy2ZzYcjlYFOd3taleS0gkk3nzeAacJi50IvxcyDnMXaruirxsoakN0GWmGNIo04TC0Zp7WVFzhA8zpTlRqVljo9gAlSqKOvF6D8sOsXPPzYpIqttlTYA83688JI8JVbfL6oEdmuxKn5DK2CiCrDUkL56s3C8sCRl7wbwJqPPQ618aTW29mptyocEiNlNiXeDU1pqqOPrYMO4YYIPFl9wE5c4L2eu2Gb6F5Zhi321D3Oq7v1oNT4YXpFCvM1S3JbWEJhoskWLG95yZDEHg6fCZdQjLqjCeNX9CMwmxDxUF5Q2InmaD6riP1btT197c6dACmymtrellq69YZsNwzUSyXhdHd5gvgSOzSfduK4CvEgeVItLK1UvXctxuaRV2Oqesy0r39YPLQjOczyOib8Tsns2HvNFKfGiNjllgqo1U02n4nD6AdIZ9CjF053AeRdCCKzvd23BpJoofzxLruHrtVF6PSyGItzMNHS1wGbFxmAM3Fgw63G1zZJhqfrgApggtO1785R4FsnMJ0RnG71ty4LH3dvNfSdstabilitynumberOptionalDefault: 0.5Voice stability; the smaller the value, the richer the emotion and the more variation, and the larger the value, the more stable and consistent the output. Default is 0.5.
00.51language_codestringOptionalDefault: ""Language code (ISO format). Leave blank to auto-detect the language; default is blank.
afarhyasazbebnShow all (67)
bsbgcacebnyhrcsdanlenetfilfifrglkadeelguhahehihuisidgaitjajvknkkkykolvlnltlbmkmsmlzhmrnenopsfaplptparorusrsdskslsoesswsvtatethtrukurvicycallbackobjectOptional
Terminal-state notification config. When omitted, no callback is delivered — poll the task yourself. See the callback note below.
Provide callback.url when creating a task and HiAPI POSTs to your service once the task reaches a terminal state — no polling needed. The callback payload mirrors the task detail structure; signature verification, delivery retries and idempotency are documented on the Unified Async API overview page.
urlstringRequiredRequired when callback is present. A POST is sent to this URL once the task reaches a terminal state; must be a valid http(s) URL.
whenstringOptionalDefault: "final"Only final is supported today — notified on both success and fail.
finalstoragestringOptionalDefault: "temp"Artifact storage tier: temp (default, retained about 7 days) or persistent (long-term, billed by size). Insufficient balance or exceeding the storage cap silently downgrades to temp; the effective tier is shown in the task detail response.
temppersistentRequest examples
# Submit an async task; returns a taskId immediately (no waiting for generation)
curl -X POST "https://api.hiapi.ai/v1/tasks" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "elevenlabs/text-to-dialogue",
"input": {
"dialogue": "…",
"stability": 0.5,
"language_code": ""
}
}' const res = await fetch("https://api.hiapi.ai/v1/tasks", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HIAPI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "elevenlabs/text-to-dialogue",
input: {
"dialogue": "…",
"stability": 0.5,
"language_code": ""
}
}),
});
const task = await res.json();
// { code: 200, message: "success", data: { taskId } } import os, requests
res = requests.post(
"https://api.hiapi.ai/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"},
json={
"model": "elevenlabs/text-to-dialogue",
"input": {
"dialogue": "…",
"stability": 0.5,
"language_code": ""
}
},
)
print(res.json()) # { code, message, data: { taskId } } 200 OK
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR"
}
} 400 Bad Request
{
"code": 400,
"message": "invalid request",
"data": null,
"error_code": "INVALID_REQUEST"
} Get task detail
https://api.hiapi.ai/v1/tasks/:id Response fields
taskIdstringRequiredTask ID, always prefixed with tk-hiapi-.
modelstringRequiredResolved full model name. Tasks submitted with the route parameter return base@route (e.g. gpt-image-2/text-to-image@ext); otherwise identical to the name passed at creation.
routestringOptionalPresent only when the task was submitted with an explicit route parameter; echoes the submitted value.
statusstringRequiredTask status.
queued Queued, not started yet.
handling Being processed.
archiving Processing finished, artifacts being prepared.
success Terminal: completed, artifacts available (output returned).
fail Terminal: failed (error returned).
After submission, check status: success and fail are terminal, everything else is non-terminal. Poll every 1–3 seconds until terminal. On success, download artifacts from output[].url and transfer them before expireAt; pass storage: "persistent" at creation time when long-term retention is needed.
creatednumberRequiredTask creation time (Unix seconds).
completednumberRequiredUnix seconds when the task reached a terminal state; fixed to 0 while not terminal.
outputarrayOptional
Present only when status == success. Artifact list — always an array; a single task may return multiple types at once (e.g. video + first_frame).
Array [ object ]
Array items
urlstringRequiredArtifact URL, directly downloadable.
typestringRequiredCurrent possible values: video, image, audio, first_frame, last_frame, thumbnail; more may be added later.
expireAtnumberRequiredUnix seconds until which the artifact remains accessible; download or transfer before it expires.
errorobjectOptional
Present only when status == fail.
codestringRequiredBusiness error code.
messagestringRequiredError description.
Response examples
Success
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-01HZTQ8BX2N3GM3YFK4Z9D7VQR",
"model": "happyhorse-1-0",
"status": "success",
"created": 1777282033,
"completed": 1777282099,
"output": [
{
"url": "https://cdn.hiapi.ai/tasks/.../video.mp4",
"type": "video",
"expireAt": 1777886899
}
]
}
} Processing (non-terminal)
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "archiving",
"created": 1777282033,
"completed": 0
}
} Failed
{
"code": 200,
"message": "success",
"data": {
"taskId": "tk-hiapi-...",
"model": "happyhorse-1-0",
"status": "fail",
"created": 1777282033,
"completed": 1777282099,
"error": {
"code": "TASK_FAILED",
"message": "task failed"
}
}
} Articles
View all articles →Related Models
View all models →Same Type
-
Mureka 9.5 Mureka $0.322 per request -
MiniMax Music 1.5 MiniMax $0.070 /song -
Gemini 3.1 Flash TTS Google -- -
MiniMax Music 3 MiniMax $0.0026 /second -
Qwen Audio 3.0 TTS Alibaba $0.030 /1,000 characters -
Mirelo SFX 2.0 Mirelo AI $0.021 /second -
Lyria 3.5 Google $0.090 /song -
MiniMax Music 2.6 MiniMax $0.210 /song -
ElevenLabs ElevenLabs $0.0029 /second -
Lyria 3 Pro Google $0.140 /song



