What things cost
A 200-character TTS request costs 200 credits. HTTP character counts use your input
text after trimming whitespace. WebSocket billing counts the input characters you submitted for each completed segment. Responses report the cost:
- Synchronous
POST /v1/tts→Credit-Utilizedresponse header - Streaming
POST /v1/tts/stream→Credit-Utilizedresponse header - WebSocket →
credits_utilizedfield on eachaudio.donemessage
Speech to text
A 60-second recording costs 90 credits, and an hour of audio costs 5,400 credits. The rate is the same for every language, mode, style, and audio format. Speech to text bills the duration of the audio you send, not the time a connection is open. Each session’s total is rounded up to a whole credit. The cost is reported asbilling.credits in GET /v1/asr/history.
When credits are charged
Synchronous: up front
Synchronous: up front
The full cost (character count × 1) is debited before generation begins. If the generation fails, the charge is refunded (see below).
HTTP streaming: after successful delivery
HTTP streaming: after successful delivery
Credits are checked before generation and charged after the audio stream completes successfully. The
Credit-Utilized header reports the request cost before the body streams.WebSocket: per segment
WebSocket: per segment
Credits are checked before each input fragment is accepted. A debit is queued when each audio segment completes, based on the number of input characters you submitted for that segment.
audio.done.credits_utilized reports the segment cost.Live speech to text: as the audio arrives
Live speech to text: as the audio arrives
Opening a session requires a small minimum balance (currently 30 credits). While the session runs, credits for the audio received so far are charged periodically, and the remainder is settled when the session closes. Pauses where you send no audio, such as keepalive-only periods, are not billed. If the balance runs out mid-session, the session closes with code
4402.File speech to text: before transcription
File speech to text: before transcription
Synchronous and async files are charged by measured audio duration after validation and before transcription. Accepting an async batch does not charge all files immediately. A failed or cancelled async file receives a full refund if it was charged; completed files remain billed. Partial transcripts are not billed separately. Check the transcription’s
billing.status and billing.credits for its accounting state.Failed generations are refunded
You are not charged for audio you don’t receive. If a generation fails after credits were debited, Chariot refunds them automatically:- Synchronous, a failed
POST /v1/ttsrefunds the full charge and returns a500error. - HTTP streaming, if generation fails partway, you keep any audio already streamed and no charge is queued for the failed stream.
- WebSocket, billing is per completed segment; completed segments stay billed if the session later fails.
Refunds are issued as a new credit grant, so your balance returns to its prior level. The original charge remains visible in your usage history for auditing.
WebSocket credit checks
If your balance cannot cover pending input, the server sends an error and closes with code4402 before forwarding the new text for generation. Do not rely on an unpaid final segment.
Checking your balance
CallGET /v1/credits:
How credits are granted and expire
Credits arrive as grants, each with its own expiry:- Subscription cycle, your plan grants credits at the start of each billing cycle. These expire at the end of the cycle, so unused cycle credits don’t roll over indefinitely.
- Adjustments, credits added by Chariot (e.g. support adjustments or refunds).