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

ProductCost
Text to speech (v0)1 credit per input character
A 200-character TTS request costs 200 credits. The character count is taken from your input text (after trimming whitespace). Each response reports the exact charge:
  • Synchronous POST /v1/ttsCredit-Utilized response header
  • Streaming POST /v1/tts/streamCredit-Utilized response header
  • WebSocket → credits_utilized field on each audio.done message

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 charged sentence by sentence, as each sentence finishes synthesizing, based on the characters actually spoken. A long session spreads its cost across many small debits rather than one up-front charge.

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 the stream fails partway, you keep whatever audio already streamed and the charge is fully refunded.
  • WebSocket, billing is per sentence, so a mid-session failure only ever affects the current sentence; completed sentences stay billed.
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 grace on the last sentence

On a WebSocket session, each sentence is streamed to you before its charge is applied. If your balance can’t cover a sentence, that already-streamed sentence is delivered free of charge as a one-time grace, then the session closes with code 4402 (insufficient credits). No partially-paid or unpaid audio is withheld mid-sentence.

Checking your balance

Call GET /v1/credits:
curl https://api.chariot.in/v1/credits \
  -H "chariotai-api-key: YOUR_API_KEY"
{
  "available_credits": 500000,
  "next_expiry_at": "2026-10-11T06:27:16.943000Z",
  "grants": [
    {
      "grant_id": "786a4ad5-95cc-4dd8-916d-022476f07b89",
      "source": "subscription_cycle",
      "amount_initial": 500000,
      "amount_remaining": 500000,
      "granted_at": "2026-07-13T06:27:18Z",
      "expires_at": "2026-10-11T06:27:16Z"
    }
  ]
}
FieldDescription
available_creditsTotal spendable credits across all active grants.
next_expiry_atWhen the soonest-expiring grant lapses.
grantsPer-grant breakdown, each with its own amount and expiry.

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:
{ "statusCode": 403, "error": "InsufficientCreditsException",
  "message": "Workspace has 4 credits; needs 128" }
Top up or upgrade your plan from the dashboard to continue.