
Cartesia/Sonic 3.6
Real-time text-to-speech model, built on State Space Models (SSMs) for streaming speech generation.
Sonic 3.6 is Cartesia’s most natural and expressive text-to-speech model, built for real-time use with sub-90ms latency and 44 languages. It says exactly what’s written and reads numbers, letters, and confirmation codes accurately. It also adjusts pacing, tone, and emotion to fit the context, so conversations feel human.
See full documentation
Upgrading from Sonic 3.5? Sonic 3.6 is fully backwards compatible. Change model_id to sonic-3.6, or pin sonic-3.6-2026-08-27 for production. Existing voice IDs, including instant and professional voice clones, carry over unchanged. Traffic on sonic-3.5 does not move automatically.
Get an API key here: https://play.cartesia.ai/dashboard
import asyncio
import os
from cartesia import AsyncCartesia
SAMPLE_RATE = 44100
async def main() -> None:
# Defaults to https://api.cartesia.ai and sends Authorization: Bearer <api_key>.
client = AsyncCartesia(api_key=os.environ["CARTESIA_API_KEY"])
audio = bytearray()
async with client.tts.with_streaming_response.generate(
model_id="sonic-3.6",
transcript="Hello from Cartesia!",
voice={"id": "db6b0ed5-d5d3-463d-ae85-518a07d3c2b4"},
output_format={"container": "wav", "encoding": "pcm_s16le", "sample_rate": SAMPLE_RATE},
language="en",
) as response:
async for chunk in response.iter_bytes():
audio += chunk
# The API returns a complete WAV file, header included.
with open("output.wav", "wb") as f:
f.write(audio)
print(f"wrote {len(audio)} bytes")
asyncio.run(main())
Output
{
"type": "chunk",
"done": false,
"status_code": 206,
"step_time": 123,
"context_id": "50dc3b5e-5841-4aa1-9f94-60cfb9aead79",
"data": "aSDinaTvuI8gbWludGxpZnk="
}