tts-1
TTS-1 converts prepared text into spoken audio with selectable voices, playback speed and output formats. OpenAI optimizes this edition for lower-latency speech generation, making it a practical choice for responsive readouts, short narration and streamed delivery of an already written script.
About the model
This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.
TTS-1 is OpenAI's text-to-speech model optimized for speed. It receives the words to be spoken and produces audio, rather than a transcription or a written answer. The manufacturer's examples include narrating written articles, producing speech in several languages and playing audio as it arrives. TTS-1 is the lower-latency choice compared with TTS-1 HD; the HD model emphasizes output quality. The useful decision is therefore whether prompt playback or the higher-quality narration profile matters more for the task.
The speech-generation workflow is built around the model, the input text and the selected voice. OpenAI's reference limits the text input to 4096 characters, a character limit rather than a token context window. Prepare the actual script before synthesis: write the sentences the listener should hear, resolve abbreviations and decide how names, quantities and headings should be spoken. For a long article, organize sections into independently understandable passages instead of treating a long document as a single speech request.
OpenAI's current model-specific voice list for TTS-1 is alloy, ash, coral, echo, fable, onyx, nova, sage and shimmer. These are preset voices; they are not the full voice set of every newer speech model. The voices are optimized for English, while multilingual speech is supported by providing the input in the language to be spoken. Choose a voice using a representative passage with the same vocabulary and pacing as the final script. Keep that choice consistent across related clips when continuity matters.
Audio can be streamed in chunks so playback begins before the entire file has finished generating. This is streaming of speech created from text, not a two-way spoken conversation. The documented output formats are MP3, Opus, AAC, FLAC, WAV and PCM, with MP3 as the default. MP3 and AAC provide compressed audio; Opus is suited to streaming and communication; FLAC is lossless. WAV avoids compressed-audio decoding, and raw PCM contains 24 kHz, 16-bit signed little-endian samples without a file header. OpenAI recommends WAV or PCM when response time is the priority.
The speech reference provides a speed setting from 0.25 to 4.0, with 1.0 as the default. The additional natural-language instructions field does not work with TTS-1, and event-style SSE output is not supported for this model. Its documented controls are the script, voice, speed and audio format; newer models' controls for accent, emotion or whispering should not be attached to this edition. When preparing a clip, choose the speed to serve intelligibility and then inspect the rendered words and pauses rather than assume the script's character count fixes an exact duration.
The language guide includes English, Russian, Ukrainian, French, German, Spanish, Portuguese, Italian, Arabic, Chinese, Japanese, Korean, Hindi, Kazakh and many other languages. Speech follows the language of the supplied text. A multilingual narration brief therefore starts with the translated script and the intended audience; text-to-speech is a rendering step, not an instruction to translate or rewrite it. For a practical announcement, prepare the exact message and names. For educational narration, make section boundaries and definitions clear in the words that will be read.
A finished artifact can be a short spoken instruction, a narrated passage or an audio segment for a larger edit. Review pronunciation, completeness, pacing and the chosen format using the actual output. Preserve the script together with the audio so later corrections can be localized to the affected passage. OpenAI's guidance requires listeners to be clearly told that the voice is AI-generated. That disclosure belongs to the listening experience; it does not turn TTS-1 into a human-voice recording or add voice-cloning controls to the model.
Ailoot Ultra · Text to speech POST /v1/audio/speech openai/tts-1
openai/tts-1Overview
TTS-1 converts prepared text into spoken audio with selectable voices, playback speed and output formats. OpenAI optimizes this edition for lower-latency speech generation, making it a practical choice for responsive readouts, short narration and streamed delivery of an already written script.
- Accepted inputs
- Text
- Results
- Audio
Available in Ailoot · inputs & methods
Ailoot Ultra · Text to speech POST /v1/audio/speech
- Input types
text- Output types
audio- Output format
- mp3
| Field | Type | Requirement | Values & limits | Default |
|---|---|---|---|---|
Fieldmodel | Typestring | RequirementRequired | Values & limits openai/tts-1 | Default— |
Fieldinput | Typestring | RequirementRequired | Values & limits Minimum length: 1 Maximum length: 4,096 Unit: Unicode characters | Default— |
Fieldvoice | Typestring | RequirementRequired | Values & limits alloy | Default— |
Input material combinations
text_to_speech · Required: input
Method parameters and lifecycle
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractmodel, input, voice |
Parametervoice_ids | Contractalloy |
Parametermax_input_characters | Contract4096 |
Parameterother_options | Contractfalse |
Parameterinput | Contractexact UTF-8 text; Unicode character count without normalization |
Parametermaterial_types | Contracttext |
Lifecycle: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · actual returned task_id or media library record
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Select exact voice from this model profile.
Input characters and audio seconds are different meters.
Pricing
Tariff references do not add request options. Supported parameters are listed for the selected method.
- Fast mode
- Not specified When fast mode is selected
- Flex mode
- Not specified When flex mode is selected
- Maximum reasoning effort
- Not specified When maximum reasoning effort uses the default adjustment
Ailoot rates
Prices by configuration
Match each charge to the conditions shown. Use one rate for each set of alternative configurations.
| Configuration | Rate schedule | Billable quantity | Billing quantity | Billing unit | Charge |
|---|---|---|---|---|---|
| ConfigurationBase token rates | Rate scheduleBase rate | Billable quantity— | Billing quantity— | Billing unit— | Charge Input · Input tokens — / 1K tokens Output · Output tokens — / 1K tokens Input · Cache read — / 1K tokens Input · Cache write — / 1K tokens Input · Cache write, 1 hour — / 1K tokens |
| ConfigurationUltra | Rate schedule— | Billable quantityEach Unicode code point counts as one character, including Han characters. | Billing quantity— | Billing unitper 1000 input character | Charge Input · input character $0.03 per 1000 input character |
| ConfigurationPer request | Rate schedule— | Billable quantity— | Billing quantityone request | Billing unit— | Charge Input $0 per request |
Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →
Example requests
Ailoot Ultra · Text to speech
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "openai/tts-1", "input": "Good afternoon! This is a short voice take.", "voice": "alloy"}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o speech.mp3
Receive and save results
Ailoot Ultra · Text to speech
mp3
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Other content reads
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-assets.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}"
export AILOOT_MEDIA_TASK_ID
resource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_MEDIA_TASK_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/media/tasks/$resource_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-task.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("media-task.json").read_text())))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}"
export AILOOT_ASSET_ID
resource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_ASSET_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/media/assets/$resource_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-asset.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("media-asset.json").read_text())))
PY_RESULT
Keep all completed results
Keep every complete returned response, file and content part.
Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.
If the original response needs checking
Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route.
Response fields
| Field | Type |
|---|---|
Fieldbinary audio | Typebytes |
Fieldresponse headers | Typeheaders |
Errors and next steps
| Response | Condition | Next step |
|---|---|---|
Response400 · invalid_request_error | ConditionInvalid required fields, material representation or parameter value | Next stepCorrect the indicated fields before a new creation request. |
Responseserver_error | ConditionThe returned response says the operation or result requires a check | Next stepKeep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request. |
Aliases
Model aliases
Ailoot Ultra openai/tts-1
Method path aliases
Use the method paths shown above.
Related caller IDs
FAQ · tts-1
- What inputs and results are available?
POST /v1/audio/speech·openai/tts-1:text→audio- Which fields does the request use?
POST /v1/audio/speech·openai/tts-1:model,input,voice- What limits apply?
POST /v1/audio/speech·openai/tts-1:input.maximum_length:4096