Telnyx Text To Speech Commands API
Text to speech streaming command operations
Text to speech streaming command operations
openapi: 3.1.0
info:
contact:
email: support@telnyx.com
description: Telnyx provides global communications and connectivity APIs for developers — including SIP trunking, programmable voice, SMS, MMS, WhatsApp Business Messaging, Call Control, Fax, Wireless (IoT & eSIM), Phone Numbers (DID provisioning & porting), Emergency Services, and Network APIs for private interconnects and edge connectivity. Build, scale, and manage voice, messaging, and data networks with Telnyx's carrier-grade global infrastructure and API-first platform.
title: Telnyx Access Tokens Text To Speech Commands API
version: 2.0.0
x-endpoint-cost: light
servers:
- description: Version 2.0.0 of the Telnyx API
url: https://api.telnyx.com/v2
security:
- bearerAuth: []
tags:
- description: Text to speech streaming command operations
name: Text To Speech Commands
paths:
/text-to-speech/speech:
get:
description: 'Open a WebSocket connection to stream text and receive synthesized audio in real time. Authentication is provided via the standard `Authorization: Bearer <API_KEY>` header. Send JSON frames with text to synthesize; receive JSON frames containing base64-encoded audio chunks.
Supported providers: `aws`, `telnyx`, `azure`, `murfai`, `minimax`, `rime`, `resemble`, `elevenlabs`, `xai`.
**Connection flow:**
1. Open WebSocket with query parameters specifying provider, voice, and model.
2. Send an initial handshake message `{"text": " "}` (single space) with optional `voice_settings` to initialize the session.
3. Send text messages as `{"text": "Hello world"}`.
4. Receive audio chunks as JSON frames with base64-encoded audio.
5. A final frame with `isFinal: true` indicates the end of audio for the current text.
To interrupt and restart synthesis mid-stream, send `{"force": true}` — the current worker is stopped and a new one is started.
**Note:** The Telnyx `Ultra` model is not available over WebSocket. Use the HTTP POST `/text-to-speech/speech` endpoint instead.'
operationId: TextToSpeechOverWs
parameters:
- $ref: '#/components/parameters/voice'
- $ref: '#/components/parameters/provider'
- $ref: '#/components/parameters/model_id'
- $ref: '#/components/parameters/voice_id'
- $ref: '#/components/parameters/disable_cache'
- $ref: '#/components/parameters/audio_format'
- $ref: '#/components/parameters/socket_id'
responses:
'101':
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ClientTextFrame'
- $ref: '#/components/schemas/TtsServerEvent'
description: 'WebSocket connection established. Communication proceeds via JSON frames.
**Client → Server:** See `ClientTextFrame` schema.
**Server → Client:** See `AudioChunkFrame`, `FinalFrame`, and `ErrorFrame` schemas.'
'200':
description: WebSocket upgrade successful — this response is not returned directly. See 101 for frame documentation.
'400':
description: Invalid parameters — provider not supported or missing required fields.
'401':
description: Authentication failed — missing or invalid `x-telnyx-auth-rev2` header.
summary: Stream text to speech over WebSocket
tags:
- Text To Speech Commands
x-latency-category: interactive
post:
description: 'Generate synthesized speech audio from text input. Returns audio in the requested format (binary audio stream, base64-encoded JSON, or an audio URL for later retrieval).
Authentication is provided via the standard `Authorization: Bearer <API_KEY>` header.
The `voice` parameter provides a convenient shorthand to specify provider, model, and voice in a single string (e.g. `telnyx.NaturalHD.Alloy` or `Telnyx.Ultra.<voice_id>`). Alternatively, specify `provider` explicitly along with provider-specific parameters.
Supported providers: `aws`, `telnyx`, `azure`, `elevenlabs`, `minimax`, `rime`, `resemble`, `xai`.
The Telnyx `Ultra` model supports 44 languages with emotion control, speed adjustment, and volume control. Use the `telnyx` provider-specific parameters to configure these features.'
operationId: generateSpeech
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateSpeechRequest'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Base64AudioResponse'
audio/mpeg:
schema:
description: Raw audio bytes. Returned when `output_type` is `binary_output` (default).
format: binary
type: string
description: 'Speech generated successfully. The response format depends on the `output_type` parameter:
- `binary_output` (default): Returns raw audio bytes with the appropriate `Content-Type` header (e.g. `audio/mpeg`).
- `base64_output`: Returns a JSON object with `base64_audio` field.'
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/text-to-speech_ErrorResponse'
description: Bad request — invalid parameters or provider error.
'401':
description: Authentication failed — missing or invalid API key.
'422':
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationErrorResponse'
description: Validation failed — invalid or missing required fields.
summary: Generate speech from text
tags:
- Text To Speech Commands
x-latency-category: interactive
/text-to-speech/voices:
get:
description: 'Retrieve a list of available voices from one or all TTS providers. When `provider` is specified, returns voices for that provider only. Otherwise, returns voices from all providers.
Some providers (ElevenLabs, Resemble) require an API key to list voices.'
operationId: listVoices
parameters:
- description: Filter voices by provider. If omitted, voices from all providers are returned.
in: query
name: provider
required: false
schema:
enum:
- aws
- telnyx
- azure
- elevenlabs
- minimax
- rime
- resemble
- xai
type: string
- description: API key for providers that require one to list voices (e.g. ElevenLabs).
in: query
name: api_key
required: false
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/VoicesResponse'
description: List of available voices.
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/text-to-speech_ErrorResponse'
description: Bad request — invalid provider or missing required API key.
'401':
description: Authentication failed — missing or invalid API key.
summary: List available voices
tags:
- Text To Speech Commands
x-latency-category: interactive
components:
schemas:
XAIProviderParams:
description: xAI provider-specific parameters.
properties:
language:
default: auto
description: Language code, or `auto` to detect.
type: string
output_format:
default: mp3
description: Audio output format.
enum:
- mp3
- wav
- pcm
- mulaw
- alaw
type: string
sample_rate:
default: 24000
description: Audio sample rate in Hz.
enum:
- 8000
- 16000
- 22050
- 24000
- 44100
- 48000
type: integer
voice_id:
description: xAI voice identifier.
enum:
- eve
- ara
- rex
- sal
- leo
type: string
required:
- voice_id
type: object
AwsProviderParams:
description: AWS Polly provider-specific parameters.
properties:
language_code:
description: Language code (e.g. `en-US`, `es-ES`).
type: string
lexicon_names:
description: List of lexicon names to apply.
items:
type: string
type: array
output_format:
description: Audio output format.
type: string
sample_rate:
description: Audio sample rate.
type: string
text_type:
description: Input text type.
enum:
- text
- ssml
type: string
type: object
AudioChunkFrame:
description: Server-to-client frame containing a base64-encoded audio chunk.
properties:
audio:
description: Base64-encoded audio data. May be `null` for providers that use `drop_concatenated_audio` mode (Telnyx Natural/NaturalHD, Rime, Minimax, MurfAI, Resemble) — in that case only streamed chunks carry audio.
type:
- string
- 'null'
cached:
description: Whether this audio was served from cache.
type: boolean
isFinal:
description: Always `false` for audio chunk frames.
type: boolean
text:
description: The text segment that this audio chunk corresponds to.
type:
- string
- 'null'
timeToFirstAudioFrameMs:
description: Milliseconds from the start-of-speech request to the first audio frame. Only present on the first audio chunk of a synthesis request.
type: integer
type:
const: audio_chunk
description: Frame type identifier.
type: string
type: object
text-to-speech_ErrorResponse:
properties:
errors:
items:
properties:
code:
description: Error code.
type: string
detail:
description: Detailed error description.
type: string
title:
description: Error title.
type: string
type: object
type: array
type: object
FinalFrame:
description: Server-to-client frame indicating synthesis is complete for the current text.
properties:
audio:
description: Always `null` for the final frame.
type: 'null'
isFinal:
const: true
description: Always `true`.
type: boolean
text:
description: Empty string.
type: string
timeToFirstAudioFrameMs:
description: Present if this was the first response frame.
type: integer
type:
const: final
description: Frame type identifier.
type: string
type: object
TelnyxProviderParams:
description: Telnyx provider-specific parameters. Use `voice_speed` and `temperature` for `Natural` and `NaturalHD` models. For the `Ultra` model, use `voice_speed`, `volume`, and `emotion`.
properties:
emotion:
description: Emotion control for the Ultra model. Adjusts the emotional tone of the synthesized speech.
enum:
- neutral
- happy
- sad
- angry
- fearful
- disgusted
- surprised
type: string
response_format:
default: mp3
description: Audio response format.
type: string
sampling_rate:
default: 24000
description: Audio sampling rate in Hz.
type: integer
temperature:
default: 0.5
description: Sampling temperature. Applies to `Natural` and `NaturalHD` models only.
format: float
type: number
voice_speed:
default: 1.0
description: 'Voice speed multiplier. Applies to all models. Range: 0.5 to 2.0.'
format: float
maximum: 2.0
minimum: 0.5
type: number
volume:
default: 1.0
description: 'Volume level for the Ultra model. Range: 0.0 to 2.0.'
format: float
maximum: 2.0
minimum: 0.0
type: number
type: object
RimeProviderParams:
description: Rime provider-specific parameters.
properties:
response_format:
description: Audio output format.
type: string
sampling_rate:
description: Audio sampling rate in Hz.
type: integer
voice_speed:
description: Voice speed multiplier.
format: float
type: number
type: object
TtsServerEvent:
description: Union of all server-to-client WebSocket events for TTS streaming.
discriminator:
mapping:
audio_chunk: '#/components/schemas/AudioChunkFrame'
error: '#/components/schemas/ErrorFrame'
final: '#/components/schemas/FinalFrame'
propertyName: type
oneOf:
- $ref: '#/components/schemas/AudioChunkFrame'
- $ref: '#/components/schemas/FinalFrame'
- $ref: '#/components/schemas/ErrorFrame'
AzureProviderParams:
description: Azure Cognitive Services provider-specific parameters.
properties:
api_key:
description: Custom Azure API key. If not provided, the default Telnyx key is used.
type: string
deployment_id:
description: Custom Azure deployment ID.
type: string
effect:
description: Azure audio effect to apply.
type: string
gender:
description: Voice gender preference.
type: string
language_code:
default: en-US
description: Language code (e.g. `en-US`).
type: string
output_format:
default: audio-24khz-160kbitrate-mono-mp3
description: Azure audio output format.
type: string
region:
description: Azure region (e.g. `eastus`, `westeurope`).
type: string
text_type:
default: text
description: Input text type. Use `ssml` for SSML-formatted input.
enum:
- text
- ssml
type: string
type: object
Voice:
description: A voice available for text-to-speech synthesis.
properties:
gender:
description: Voice gender.
type: string
language:
description: Language code.
type: string
name:
description: Voice name.
type: string
provider:
description: The TTS provider.
type: string
voice_id:
description: Voice identifier.
type: string
type: object
ValidationErrorResponse:
properties:
errors:
additionalProperties:
items:
type: string
type: array
description: Validation error details keyed by field name.
type: object
type: object
GenerateSpeechRequest:
description: Request body for generating speech from text.
properties:
aws:
$ref: '#/components/schemas/AwsProviderParams'
azure:
$ref: '#/components/schemas/AzureProviderParams'
disable_cache:
default: false
description: When `true`, bypass the audio cache and generate fresh audio.
type: boolean
elevenlabs:
$ref: '#/components/schemas/ElevenLabsProviderParams'
language:
description: Language code (e.g. `en-US`). Usage varies by provider.
type: string
minimax:
$ref: '#/components/schemas/MinimaxProviderParams'
output_type:
default: binary_output
description: Determines the response format. `binary_output` returns raw audio bytes, `base64_output` returns base64-encoded audio in JSON.
enum:
- binary_output
- base64_output
type: string
provider:
description: TTS provider. Required unless `voice` is provided.
enum:
- aws
- telnyx
- azure
- elevenlabs
- minimax
- rime
- resemble
- xai
type: string
resemble:
$ref: '#/components/schemas/ResembleProviderParams'
rime:
$ref: '#/components/schemas/RimeProviderParams'
telnyx:
$ref: '#/components/schemas/TelnyxProviderParams'
text:
description: The text to convert to speech.
type: string
text_type:
description: Text type. Use `ssml` for SSML-formatted input (supported by AWS and Azure).
enum:
- text
- ssml
type: string
voice:
description: 'Voice identifier in the format `provider.model_id.voice_id` or `provider.voice_id`. Examples: `telnyx.NaturalHD.Alloy`, `Telnyx.Ultra.<voice_id>`, `azure.en-US-AvaMultilingualNeural`, `aws.Polly.Generative.Lucia`. When provided, `provider`, `model_id`, and `voice_id` are extracted automatically and take precedence over individual parameters.'
type: string
voice_settings:
additionalProperties: true
description: Provider-specific voice settings. Contents vary by provider — see provider-specific parameter objects below.
type: object
xai:
$ref: '#/components/schemas/XAIProviderParams'
type: object
Base64AudioResponse:
description: Response when `output_type` is `base64_output`.
properties:
base64_audio:
description: Base64-encoded audio data.
type: string
type: object
ErrorFrame:
description: Server-to-client frame indicating an error during synthesis. The connection is closed shortly after.
properties:
error:
description: Error message describing what went wrong.
type: string
type:
const: error
description: Frame type identifier.
type: string
type: object
MinimaxProviderParams:
description: Minimax provider-specific parameters.
properties:
language_boost:
description: Language code to boost pronunciation for.
type: string
pitch:
description: Pitch adjustment.
type: integer
response_format:
description: Audio output format.
type: string
speed:
description: Speech speed multiplier.
format: float
type: number
vol:
description: Volume level.
format: float
type: number
type: object
ClientTextFrame:
description: Client-to-server frame containing text to synthesize.
examples:
- text: ' '
voice_settings:
voice_speed: 1.2
- text: Hello, welcome to Telnyx text to speech.
- force: true
text: New text after interruption.
properties:
force:
description: When `true`, stops the current synthesis worker and starts a new one. Used to interrupt speech mid-stream and begin synthesizing new text.
type: boolean
text:
description: Text to convert to speech. Send `" "` (single space) as an initial handshake with optional `voice_settings`. Subsequent messages contain the actual text to synthesize.
type: string
voice_settings:
additionalProperties: true
description: 'Provider-specific voice settings sent with the initial handshake. Contents vary by provider — e.g. `{"speed": 1.2}` for Minimax, `{"voice_speed": 1.5}` for Telnyx.'
type: object
required:
- text
type: object
ResembleProviderParams:
description: Resemble AI provider-specific parameters.
properties:
api_key:
description: Custom Resemble API key.
type: string
format:
description: Audio output format.
type: string
precision:
description: Synthesis precision.
type: string
sample_rate:
description: Audio sample rate.
type: string
type: object
VoicesResponse:
description: List of available voices.
properties:
voices:
items:
$ref: '#/components/schemas/Voice'
type: array
type: object
ElevenLabsProviderParams:
description: ElevenLabs provider-specific parameters.
properties:
api_key:
description: Custom ElevenLabs API key. If not provided, the default Telnyx key is used.
type: string
language_code:
description: Language code.
type: string
voice_settings:
additionalProperties: true
description: ElevenLabs voice settings (stability, similarity_boost, etc.).
type: object
type: object
parameters:
audio_format:
description: Audio output format override. Supported for Telnyx models. `pcm` and `wav` are available for `Natural`/`NaturalHD` models. The `Ultra` model outputs PCM at 24kHz s16le or MP3 at 128kbps 24kHz.
in: query
name: audio_format
required: false
schema:
enum:
- pcm
- wav
- mp3
type: string
voice:
description: Voice identifier in the format `provider.model_id.voice_id` or `provider.voice_id` (e.g. `telnyx.NaturalHD.Telnyx_Alloy`, `Telnyx.Ultra.<voice_id>`, or `azure.en-US-AvaMultilingualNeural`). When provided, the `provider`, `model_id`, and `voice_id` are extracted automatically. Takes precedence over individual `provider`/`model_id`/`voice_id` parameters.
in: query
name: voice
required: false
schema:
type: string
voice_id:
description: Voice identifier for the chosen provider.
in: query
name: voice_id
required: false
schema:
type: string
disable_cache:
description: When `true`, bypass the audio cache and generate fresh audio.
in: query
name: disable_cache
required: false
schema:
default: false
type: boolean
model_id:
description: 'Model identifier for the chosen provider. Examples: `Natural`, `NaturalHD`, `Ultra` (Telnyx); `Polly.Generative` (AWS).'
in: query
name: model_id
required: false
schema:
type: string
provider:
description: TTS provider. Defaults to `telnyx` if not specified. Ignored when `voice` is provided.
in: query
name: provider
required: false
schema:
default: telnyx
enum:
- aws
- telnyx
- azure
- elevenlabs
- minimax
- murfai
- rime
- resemble
- xai
type: string
socket_id:
description: Client-provided socket identifier for tracking. If not provided, one is generated server-side.
in: query
name: socket_id
required: false
schema:
type: string
securitySchemes:
bearerAuth:
scheme: bearer
type: http
branded-calling_bearerAuth:
description: API key passed as a Bearer token in the Authorization header
scheme: bearer
type: http
oauthClientAuth:
description: OAuth 2.0 authentication for Telnyx API and MCP integrations
flows:
authorizationCode:
authorizationUrl: https://api.telnyx.com/v2/oauth/authorize
refreshUrl: https://api.telnyx.com/v2/oauth/token
scopes:
admin: Administrative access to Telnyx resources
tokenUrl: https://api.telnyx.com/v2/oauth/token
clientCredentials:
scopes:
admin: Administrative access to Telnyx resources
tokenUrl: https://api.telnyx.com/v2/oauth/token
type: oauth2
outbound-voice-profiles_bearerAuth:
bearerFormat: JWT
scheme: bearer
type: http
pronunciation-dicts_bearerAuth:
description: Telnyx API v2 key. Obtain from https://portal.telnyx.com
scheme: bearer
type: http
stored-payment-transactions_bearerAuth:
bearerFormat: JWT
scheme: bearer
type: http