> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.narilabs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.narilabs.com/_mcp/server.

# Free tier and rate limits

Free endpoint limits are enforced per user and endpoint so that capacity remains available to all users.

Free endpoints are provided on a best-effort basis. Nari Labs does not guarantee service-level objectives for Free endpoints, including uptime or latency.

## Free endpoint limits

| API | Endpoint              | Concurrent sessions per user | Requests per day |
| --- | --------------------- | ---------------------------- | ---------------- |
| TTS | `qwen3-tts-fast:free` | Up to 2                      | Up to 50         |
| TTS | `qwen3-tts:free`      | Up to 3                      | Up to 100        |
| STT | `qwen3-asr-fast:free` | Up to 2                      | Up to 50         |
| STT | `qwen3-asr:free`      | Up to 5                      | Up to 100        |

Limits apply separately to each endpoint. For TTS, a concurrent session is an in-flight speech request. For STT, it is an open realtime WebSocket connection, which can transcribe multiple utterances.

For TTS, only successful requests count toward the daily allowance; failed and cancelled requests do not count. A streaming TTS request counts once, not once per audio chunk.

For STT, one Free connection counts when its initial session configuration is accepted, before transcription completes. Cancelling the connection or encountering an error after acceptance does not undo that count. Multiple utterances on the same connection do not consume additional daily requests. A connection rejected before its configuration is accepted does not count.

Playground requests do not consume the allowance. Daily allowances reset at `00:00 UTC`.

Partner endpoints provide higher concurrency through early access. The [Partner access section](/models-and-pricing#partner-access) explains availability and how to contact Nari Labs.

### Limit errors

When a request exceeds a limit, use `error.code` to choose the appropriate retry behavior:

| Code                         | Action                                                       |
| ---------------------------- | ------------------------------------------------------------ |
| `CONCURRENCY_LIMIT_EXCEEDED` | Wait for a TTS request or STT session to finish, then retry. |
| `FREE_DAILY_LIMIT_EXCEEDED`  | Wait until `00:00 UTC`, or use a Partner endpoint.           |
| `UPSTREAM_RATE_LIMITED`      | Retry with exponential backoff and a small random delay.     |

The [error guide](/errors#http-errors) covers the complete error response and retryable server failures.

## Realtime STT session limits

In addition to the Free endpoint limits above, every STT connection has protocol-level constraints. After configuration, the `session.configured` event returns the duration and idle limits applied to that connection.

| Limit                  | Default                                     | Behavior                                                                                          |
| ---------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Utterance duration     | 36 seconds of input audio                   | Finalizes the current utterance with `commit_reason: "max_duration"`; the connection remains open |
| Session idle timeout   | 60 seconds without nonempty audio           | Closes the idle connection; time spent waiting for a final result is exempt                       |
| WebSocket message size | 128 KiB for the complete UTF-8 JSON message | Rejects an oversized audio append event; split audio into smaller chunks                          |

The [realtime transcription guide](/transcribe-audio) explains audio chunking and session configuration. [Transcripts and turn detection](/transcripts-and-turn-detection#automatic-duration-boundary) covers automatic utterance finalization, and the [WebSocket error guide](/errors#websocket-failures) lists the errors that require reconnecting.