Cartesia Ink (ink-2, ink-whisper)
Streaming STT over WebSocket aimed at voice agents, billed in plan credits per second of audio (silence included). ink-2 is the newer model; ink-whisper is the cheaper Whisper-based one.
Overview
Best for: Voice agents already using Cartesia Sonic TTS who want one credit pool and turn-aware STT.
At a glance
Credit-based. $0.39/hr is ink-2 on the Scale plan (vendor); ink-2 on Pro overage is about $0.70/hr; ink-whisper about $0.13/hr on Scale. Concurrency 12 is the Pro plan (Free 8, Scale 60). Free plan 20K credits/month shared with TTS. BAA on Enterprise plans only. Turn detection via the /stt/turns endpoint.
encoding pcm_s16le, pcm_s32le, pcm_f16le, pcm_f32le, pcm_mulaw, pcm_alaw with explicit sample_rate; ~100 ms binary chunks.
n/a
ink-whisper takes an ISO-639-1 language (default en); ink-2 language coverage not captured.
No numeric claim captured.
Not captured.
Enterprise plans list DPAs and BAAs; not re-verified.
Features
- interim and final transcripts (is_final)
- finalize command to flush
- word timestamps
- keyterms (ink-2)
- turn-based endpoint /stt/turns/websocket
- access tokens for browsers
Pricing
| What | Price | Unit |
|---|---|---|
| ink-2 streaming | 3 credits | per second of audio |
| ink-whisper streaming | 1 credit | per second of audio |
| Plans | Free $0 (20K credits), Pro $5 (100K), Startup $49 (1.25M), Scale $299 (8M) | per month |
ink-whisper on Scale ($0.13/hr) up to ink-2 on Pro overage (10,800 credits/hr x $65/1M = $0.70/hr).
Free tier: Free plan: 20K credits/month (about 1h51m of ink-2 per plan table).
Source: docs.cartesia.ai
Setup
- Create an API key at play.cartesia.ai.
- Connect to wss://api.cartesia.ai/stt/websocket?model=ink-2&encoding=pcm_s16le&sample_rate=16000&cartesia_version=2026-08-14 with header X-API-Key.
- Send binary audio; send text 'finalize' to flush, 'close' to end.
- Browsers: mint a short-lived access token server-side and pass access_token= in the URL.
Endpoint
wss://api.cartesia.ai/stt/websocket (turn-based: /stt/turns/websocket)
Authentication
X-API-Key header server-side; access_token query param for clients.
Quick start python
import asyncio, json, os, websockets # pip install websockets>=14
URL = ("wss://api.cartesia.ai/stt/websocket?model=ink-2&encoding=pcm_s16le"
"&sample_rate=16000&cartesia_version=2026-08-14")
async def main():
hdr = {"X-API-Key": os.environ["CARTESIA_API_KEY"]}
async with websockets.connect(URL, additional_headers=hdr) as ws:
async def send():
with open("audio_16k_mono.raw", "rb") as f:
while chunk := f.read(3200): # 100 ms
await ws.send(chunk)
await asyncio.sleep(0.1)
await ws.send("finalize")
await ws.send("close")
asyncio.create_task(send())
final = ""
async for msg in ws:
d = json.loads(msg)
if d["type"] == "transcript":
if d["is_final"]:
final += d["text"] # deltas: do not strip or add spaces
print("FINAL" if d["is_final"] else "partial", d["text"])
elif d["type"] in ("done", "error"):
print(final or d); break
asyncio.run(main())
Written from the current docs. Check the vendor's SDK version before you ship.
Warnings
Silence is billed
Cartesia's pricing docs state STT charges include silence even when no transcript is produced. Do not leave sockets streaming idle audio.
Credits shared with TTS
STT and TTS draw from the same monthly credit pool; heavy TTS usage can starve STT and vice versa. Turn on overages or monitor balance.
ink-2 costs 3x ink-whisper
ink-2 is 3 credits/s vs 1 credit/s for ink-whisper; pick per use case.
Text is a delta
Docs warn not to strip whitespace or insert spaces between chunks; concatenate is_final chunks exactly as received.
Version pinning required
cartesia_version is a required query parameter (2026-08-14 in docs); old versions may change behaviour.
Plus 12 warnings that apply to all speech-to-text, live APIs. See category warnings.
Limits
- STT concurrent requests: Free 8, Pro 12, Startup 20, Scale 60, Enterprise custom (separate pool from TTS).
- With overages disabled, requests fail when credits run out.
Models and products
| Name | Status |
|---|---|
| ink-2 | GA |
| ink-whisper | GA |
| ink-preview | Preview |
Docs and sources
Docs
Sources used
- docs.cartesia.ai/api-reference/stt/stt
- docs.cartesia.ai/pricing.md
- cartesia.ai/pricing
- cartesia.ai/ink
ink-2 language list and latency; Free-plan STT concurrency of 8 read from a plan-comparison table that may be ordered differently.