> Agent-readable docs index: /llms.txt. Download /docs.zip to grep all markdown files locally.

---
title: Credits & Character Counting
description: How usage is measured and billed.
---

# Credits & Character Counting

Vakyam credits are denominated in **Unicode characters**. One credit equals one
Unicode character. Your balance comes from your [plan](/pricing)'s monthly
allotment, plus any **extra credits** you buy on top.

## Monthly allotments

| Plan      | Characters per month | Approx. audio    |
| --------- | -------------------- | ---------------- |
| Free      | 10,000               | \~13 minutes     |
| Developer | 7,50,000             | \~1,000 minutes  |
| Growth    | 75,00,000            | \~10,000 minutes |

Audio length is approximate and depends on speaking rate, language, and
punctuation.

## Buying extra credits

You can purchase additional characters on top of any plan at any time:

| Usage                | Price |
| -------------------- | ----- |
| Per 1,000 characters | ₹0.75 |

That is **₹0.00075 per character**. Extra credits are added to your balance and
consumed the same way as plan credits. They do not change your
[rate limits or concurrency](/concepts/rate-limits) — only your available
character balance.

When the balance is used up, synthesis requests fail until you buy more credits,
upgrade your plan, or the next billing period restores your monthly allotment.

## How characters are counted

Characters are counted as Unicode code points, not bytes. This is deliberate: in
Indian scripts a single aksara can occupy several UTF-8 bytes, but it counts as
one character. The counting is equivalent to `len(text)` on the Unicode string.

```text
"வணக்கம்"  →  counted by character, not byte length
```

So you are billed fairly regardless of the script you synthesize.

## Character limit per request

Each request may contain at most **3000 Unicode characters**. Requests above the
limit fail with `422` and the code `text_too_long`. This per-request cap is
independent of your plan's monthly allotment and any purchased credits.

## Insufficient credits

If your remaining balance is lower than a request's character count, the request
fails with `402 Payment Required` and the code `insufficient_credits`:

```json
{
  "error": {
    "status_code": 402,
    "code": "insufficient_credits",
    "message": "Your account has 120 credits remaining but this request requires 250. Top up your balance to continue."
  }
}
```

Buy extra credits, upgrade your plan, or wait for the next billing period to
restore characters.

## Knowing how much you used

Both the JSON and streaming responses report consumption:

* `POST /v1/tts/generate` returns `characters_used` in the JSON body.
* `POST /v1/tts/stream` returns it in the `X-Characters-Used` response
  header.
* The WebSocket `end_of_utterance` message includes `characters_used` per
  sentence.

- [Usage](https://dashboard.vakyam.ai/usage) — Track character consumption for the current period.



- [Billing](https://dashboard.vakyam.ai/billing) — Change your plan or buy extra credits.

---

*Powered by [holocron.so](https://holocron.so)*
