GA Cartesia

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.

Est. per minute$0.0022 - 0.012
1 high-severity warning

Overview

Best for: Voice agents already using Cartesia Sonic TTS who want one credit pool and turn-aware STT.

At a glance

$/hour$0.39
Bills silenceYes
Free tierYes
Turn detectYes
KeytermsYes
PartialsYes
8 kHz phoneYes
Concurrency12
WebRTCNo
WebSocketYes
gRPCNo
HIPAAYes
Self-hostNo
Open weightsNo

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.

Audio in

encoding pcm_s16le, pcm_s32le, pcm_f16le, pcm_f32le, pcm_mulaw, pcm_alaw with explicit sample_rate; ~100 ms binary chunks.

Audio out

n/a

Languages

ink-whisper takes an ISO-639-1 language (default en); ink-2 language coverage not captured.

Latency

No numeric claim captured.

Regions

Not captured.

Compliance

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

WhatPriceUnitNotes
ink-2 streaming3 creditsper second of audioVendor: about $0.39/hr on the Scale plan.
ink-whisper streaming1 creditper second of audioVendor: about $0.13/hr on Scale. Batch /stt is 1 credit per 2 s.
PlansFree $0 (20K credits), Pro $5 (100K), Startup $49 (1.25M), Scale $299 (8M)per monthOverage $65 / $45 / $38 per 1M credits on Pro / Startup / Scale.
How the per-minute estimate was worked out

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

  1. Create an API key at play.cartesia.ai.
  2. 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.
  3. Send binary audio; send text 'finalize' to flush, 'close' to end.
  4. 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

NameStatusNotes
ink-2GA3 credits per second; keyterms supported (up to 100 terms / 1200 chars).
ink-whisperGA1 credit per second streaming; language, min_volume and max_silence_duration_secs params.
ink-previewPreviewAccepted model value on the WebSocket.

Docs and sources

Docs

Sources used

Not fully verified

ink-2 language list and latency; Free-plan STT concurrency of 8 read from a plan-comparison table that may be ordered differently.

Similar speech-to-text APIs

Spotted a wrong price or a dead link?