The official Python SDK for the Soniox API (STT, REST)
Project description
Soniox Python SDK
The SDK exposes two clients: SonioxClient (sync) and AsyncSonioxClient (async). Each client supports:
- STT over REST (
client.stt) and realtime WebSocket (client.realtime.stt) - TTS over REST (
client.tts) and realtime WebSocket (client.realtime.tts) - auth, file uploads, model listing, webhooks, and typed request/response models
Install
pip install soniox
# or if using uv
uv add soniox
export SONIOX_API_KEY=<your-key>
Get your API key from the Soniox Console and inject it once per shell session. Both clients read SONIOX_API_KEY by default, but you can override it per-client if needed.
Avoid Python 3.13.6 - it has a regression in
sslthat hangs realtime STT/TTS (CPython issue #137583). Use any other 3.10-3.13.x.
Quick run (STT + TTS, REST + realtime)
- REST STT transcription: transcribe a local file end-to-end in one call. Full example:
examples/soniox_client/api_example.py.
from soniox import SonioxClient
client = SonioxClient()
transcript = client.stt.transcribe_and_wait_with_tokens(
file="path/to/audio.mp3", # local file
# audio_url="https://example.com/audio.mp3", # or remote URL
delete_after=True, # auto-cleanup file + transcription
)
print(transcript.text)
client.close()
- REST TTS generation: convert text to an audio file.
from soniox import SonioxClient
from soniox.utils import output_file_for_audio_format
client = SonioxClient()
output_file = output_file_for_audio_format("wav", "tts_sync_output")
written = client.tts.generate_to_file(
output_file,
text="Hello from Soniox Python SDK Text-to-Speech.",
model="tts-rt-v1",
language="en",
voice="Adrian",
audio_format="wav",
)
print(f"Wrote {written} bytes to {output_file.resolve()}")
client.close()
Run the full example at examples/soniox_client/tts_api_example.py or async version at examples/async_soniox_client/tts_api_example.py.
- Realtime STT streaming: open
client.realtime.stt.connect, callsession.send_byte_chunkorsession.send_bytes, then iteratesession.receive_events()to render tokens:
from soniox import SonioxClient
from soniox.types import RealtimeSTTConfig, Token
from soniox.utils import render_tokens, throttle_audio, start_audio_thread
DEMO_FILE = "path_to_your_audio_file"
client = SonioxClient()
config = RealtimeSTTConfig(model="stt-rt-v4", audio_format="mp3")
final_tokens: list[Token] = []
non_final_tokens: list[Token] = []
def realtime():
with client.realtime.stt.connect(config=config) as session:
start_audio_thread(session, throttle_audio(DEMO_FILE, delay_seconds=0.1))
for event in session.receive_events():
for token in event.tokens:
if token.is_final:
final_tokens.append(token)
else:
non_final_tokens.append(token)
print(render_tokens(final_tokens, non_final_tokens))
non_final_tokens.clear()
realtime()
client.close()
See examples/soniox_client/realtime_example.py for the full flow.
- Realtime TTS streaming: send text chunks and write audio to a file as it arrives.
from uuid import uuid4
from soniox import SonioxClient
from soniox.types import RealtimeTTSConfig
from soniox.utils import output_file_for_audio_format
client = SonioxClient()
config = RealtimeTTSConfig(
stream_id=f"sync-{uuid4()}",
model="tts-rt-v1",
language="en",
voice="Adrian",
audio_format="wav",
)
output_file = output_file_for_audio_format("wav", "tts_realtime_output")
bytes_written = 0
with client.realtime.tts.connect(config=config) as session, output_file.open("wb") as f:
session.send_text_chunks(
["Hello from realtime TTS. ", "This is the final chunk."],
text_end=True,
)
for chunk in session.receive_audio_chunks():
f.write(chunk)
bytes_written += len(chunk)
print(f"Wrote {bytes_written} bytes to {output_file.resolve()}")
Run the full example at examples/soniox_client/tts_realtime_example.py or async version at examples/async_soniox_client/tts_realtime_example.py.
Repository layout
src/soniox/– sdk code (clients, http namespaces, real-time/session helpers, types, utils).examples/soniox_client&examples/async_soniox_client– runnable STT and TTS examples for sync and async clients.docs/– markdown outputs (e.g.,docs/python-sdk.md) that come frompydoc-markdown.assets/– sample audio referenced by the examples.
Development
uv install --with dev
This pulls in ruff, pyright, pytest, etc., so you can lint, type-check, test, and regenerate docs locally.
Docs
source .venv/bin/activate
python3 scripts/generate_docs.py
Docs are output to /docs directory.
Resources
- soniox.com/docs – official Soniox documentation.
- GitHub repo – source, examples, and scripts.
- PyPI
- Support:
support@soniox.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file soniox-2.4.0.tar.gz.
File metadata
- Download URL: soniox-2.4.0.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0621c46fce7c9e93947bb58fae0f072365a8af8f37af3174269955f319888c1
|
|
| MD5 |
9829b7ac2a9060fcbc4ec1c260befe8c
|
|
| BLAKE2b-256 |
0172ce3a26f67f3925c97f37d0dd4c3ee1e56d2c805752e501112330a3a676ed
|
File details
Details for the file soniox-2.4.0-py3-none-any.whl.
File metadata
- Download URL: soniox-2.4.0-py3-none-any.whl
- Upload date:
- Size: 59.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f02ac4fc4d69786d24f83ff945acc3a9e11147710b045eac3e30cf0c66162644
|
|
| MD5 |
6434a9d9589b094c5dd90e10a3c2ed12
|
|
| BLAKE2b-256 |
78b075f91e5af05aeb576e6ba18acb9330ed66ff8315d3e35c90d3868e70d4e2
|