Skip to main content
Usage on Chariot is metered in credits. Your workspace holds a credit balance; each request spends from it.

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-Utilized response header
  • Streaming POST /v1/tts/stream → Credit-Utilized response header
  • WebSocket → credits_utilized field on each audio.done message

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 as billing.credits in GET /v1/asr/history.

When credits are charged

The full cost (character count × 1) is debited before generation begins. If the generation fails, the charge is refunded (see below).
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.
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.
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.
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/tts refunds the full charge and returns a 500 error.
  • 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 code 4402 before forwarding the new text for generation. Do not rely on an unpaid final segment.

Checking your balance

Call GET /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).
When you spend, Chariot draws from the soonest-to-expire grant first, so credits are used before they lapse. A grant stops counting toward your balance the moment it expires, even if some amount remains.
A 403 InsufficientCreditsException means your workspace is out of credits:
Top up or upgrade your plan from the dashboard to continue.