> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sabi-tts-app.dev.neuralace.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors & limits

> Error shapes, status codes, quotas, and rate limits.

## Error shape

All HTTP errors return a JSON body:

```json theme={null}
{
  "error": {
    "message": "Daily character quota exceeded",
    "type": "quota_error"
  }
}
```

Some `quota_error` responses include an additional `detail` field.

## Status codes

| Status | `type`         | Meaning                                                    |
| ------ | -------------- | ---------------------------------------------------------- |
| `401`  | `auth_error`   | Missing, malformed, or revoked API key.                    |
| `400`  | `proxy_error`  | Bad request — e.g. unknown `voice` or empty `input`.       |
| `429`  | `quota_error`  | Daily character quota exhausted, or request rate exceeded. |
| `502`  | `proxy_error`  | Upstream synthesis failure.                                |
| `500`  | `server_error` | Unexpected gateway error.                                  |

On the WebSocket stream, errors arrive as a control frame instead:

```json theme={null}
{ "type": "error", "message": "Send a 'start' frame first" }
```

## Quota & rate limits

* Usage is metered **per account, in characters per day**.
* A **per-minute request rate limit** also applies.
* Both HTTP requests and WebSocket `text` frames count toward quota.
* Current usage is visible in the playground's **Usage & billing** page.

<Note>
  Need a higher limit? Reach out through the playground's help page.
</Note>
