今晚,我们先找到北斗七星,再从勺口两颗星的方向寻找北极星。它看起来并不耀眼,却能帮我们辨认北方。在黑暗中安静地等待片刻,你会发现,夜空远比第一眼看到的更丰富。
ElevenLabs TTS Turbo v2.5 Text to Speech API
elevenlabs/tts/turbo-v2.5ElevenLabs TTS Turbo v2.5 Text to Speech turns scripts into natural speech in 32 languages, with selectable voices and adjustable pacing. Tune voice similarity and stability to shape a consistent delivery across your narration.
View API docsInput
189 / 40,000 characters
Examples
REST API
Quick Start
This flow submits one valid ElevenLabs TTS Turbo v2.5 Text to Speech API request, captures its task_id, and reads audio URLs after the asynchronous task ends.
Connect to the Vidgo API
Create an API key, keep it on the server, and send it as Authorization: Bearer VIDGO_API_KEY.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one speech task
Send the current model ID and text to the unified submit endpoint. The example keeps only first-call fields.
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "elevenlabs/tts/turbo-v2.5",
"input": {
"text": "Welcome. Your next chapter starts here.",
"voice": "Rachel",
"speed": 1,
"stability": 0.5,
"similarity_boost": 0.75,
"style": 0,
"timestamps": false,
"apply_text_normalization": "auto"
}
}'Wait for the speech result
Read data.task_id and poll only while status is not_started or running. Stop on both finished and failed.
Track status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll every 2–5 seconds and back off on 429/5xx. Or provide top-level callback_url to receive a terminal-state callback.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-example",
"status": "running",
"created_time": "2026-09-25T11:31:42"
}
}{
"code": 200,
"data": {
"task_id": "task-example",
"status": "finished",
"files": [
{
"file_url": "https://example.com/speech.mp3",
"file_type": "audio"
}
],
"created_time": "2026-09-27T00:00:00",
"progress": 100,
"error_message": null
}
}Complete runnable polling example
Expand for JavaScript and Python examples that submit the same text request and poll until finished or failed.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "elevenlabs/tts/turbo-v2.5",
"input": {
"text": "Welcome. Your next chapter starts here.",
"voice": "Rachel",
"speed": 1,
"stability": 0.5,
"similarity_boost": 0.75,
"style": 0,
"timestamps": false,
"apply_text_normalization": "auto"
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters
This table lists only public fields inside input. See Quick Start for top-level model and optional callback_url usage.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| input.text | string | Yes | – | Enter the script to read aloud. After trimming outer whitespace, each request accepts 1–40,000 Unicode characters. |
| input.voice | string | No | Rachel | Choose a voice name or a compatible voice ID. The default is Rachel. |
| input.speed | number | No | 1 | Set the speaking rate from 0.7 to 1.2. Use 1 for the standard pace. |
| input.stability | number | No | 0.5 | Set a value from 0 to 1. Higher values favor a steadier delivery; lower values allow more variation. Default: 0.5. |
| input.similarity_boost | number | No | 0.75 | Adjust similarity to the selected voice from 0 to 1. Default: 0.75. |
| input.style | number | No | 0 | Set style exaggeration from 0 to 1. Start at the default of 0, then audition small changes. |
| input.timestamps | boolean | No | false | Set true to request timestamp data alongside the audio. Default: false. |
| input.language_code | string | null | No | – | Enter an ISO 639-1 language code, such as en, zh or es, to specify the language. |
| input.apply_text_normalization | string | No | auto | Choose auto, on or off to control normalization of numbers, dates and currencies. Default: auto. |
| input.previous_text | string | null | No | – | Add the preceding passage to help guide delivery across separate requests. |
| input.next_text | string | null | No | – | Add the following passage to provide context for the end of the current segment. |
Response Fields
The submit response identifies the task. The status response supplies audio files or failure details at a terminal state.
| Field | Type | Description |
|---|---|---|
| code | integer | Business response code; 0 or 200 indicates success. |
| message | string | Optional human-readable response message. |
| data.task_id | string | Unique task ID used for status queries after submission. |
| data.status | string | not_started, running, finished, or failed. |
| data.created_time | string | Task creation timestamp. |
| data.progress | integer | Progress from 0–100 in status responses. |
| data.files[] | array | Generated files in returned order when finished. |
| data.files[].file_url | string | Direct generated-audio URL. |
| data.files[].file_type | string | Speech files are identified as audio. |
| data.files[].metadata | object | Preserve returned optional metadata and additional files, including timestamp data when present. |
| data.error_message | string | null | Readable failure reason for failed tasks. |
Task Lifecycle
Only the first two states may be polled again. finished and failed are terminal.
not_startedAccepted and queued; wait before checking again.
runningSpeech generation is in progress; continue polling.
finishedSuccessful terminal state; validate files and read audio URLs.
failedFailure terminal state; read error_message and stop.
Polling and Errors
- Authentication401 indicates an authentication failure. Use a valid API key and send requests from your server.
- ValidationFollow the request table for the model ID, field types, enums, text length, and numeric ranges.
- Polling intervalStart at 2–5 seconds, use exponential backoff for 429/5xx, and enforce an overall timeout.
- Terminal statesStop after finished or failed. Treat finished without a valid audio file as a separate error.
- Callback optionProvide a public top-level callback_url to receive a flat task object after finished or failed.
- Network errorsDistinguish request timeout, network failure, and task failure. Retry the same query only when safe.
Model Specifications
| Specification | Value | Details |
|---|---|---|
| Model | elevenlabs/tts/turbo-v2.5 | Text-to-speech generation. |
| text | 1–40,000 | Unicode characters after trimming leading and trailing whitespace. |
Explore other ElevenLabs models
ElevenLabs TTS Turbo v2.5 Text to Speech API frequently asked questions
What is the ElevenLabs TTS Turbo v2.5 Text to Speech API?
ElevenLabs TTS Turbo v2.5 Text to Speech is an ElevenLabs model for turning written scripts into natural spoken audio with a focus on low latency. It supports 32 languages, selectable voices and adjustable speech delivery. Voice similarity, stability and surrounding text let you guide the sound and continuity of your narration. You can call it programmatically or try it from the playground above.
Does ElevenLabs Turbo v2.5 support Chinese speech?
Yes. Mandarin Chinese is one of the 32 supported languages, alongside English, Japanese, Spanish and others. Enter your Chinese script in Text and use zh for Language Code to specify Chinese.
Can ElevenLabs Turbo v2.5 read 40,000 characters?
Each request accepts 1–40,000 Unicode characters after leading and trailing whitespace is trimmed. For a longer narration project, split the script into passages and use Previous Text and Next Text to provide context around each one.
How do I choose a voice in ElevenLabs Turbo v2.5?
Set Voice to a voice name or a compatible voice ID. Rachel is the default. Audition a short passage in your target language, then adjust Similarity Boost to guide similarity to the selected voice.
How can I change the speaking speed in ElevenLabs Turbo v2.5?
Set Speed between 0.7 and 1.2, with 1 as the default. Values below 1 slow the speech down, while values above 1 increase the pace. Preview a representative passage before applying the setting to a longer script.
How does ElevenLabs Turbo v2.5 control expressiveness?
Use Stability to balance a steadier delivery with variation: higher values favor consistency and lower values allow more variation. Style controls style exaggeration. Both accept values from 0 to 1; start at Stability 0.5 and Style 0, then audition small changes.
How can ElevenLabs Turbo v2.5 connect narration segments?
Supply Previous Text and Next Text to give each passage its surrounding context. Keep Voice and delivery settings consistent across the project, split at natural sentence boundaries and listen to the joins when assembling the audio.
How does ElevenLabs Turbo v2.5 read numbers and dates?
Apply Text Normalization controls preparation of numbers, dates and currencies for speech. Choose auto for automatic handling, on to enable normalization or off to use the supplied text directly. Specify Language Code and preview a sample containing the values you need read aloud.















