# Rate limits

> The Munsit API uses a credit-based system with concurrent request limits to ensure fair usage and optimal performance for all users. Here's how the limits work, what happens when you hit one, and how to handle it.

## Concurrent requests

For streaming text-to-speech requests, Munsit enforces concurrent request limits based on your subscription plan. This ensures stable performance and prevents system overload.

| Plan | Concurrent request limit |
| --- | --- |
| **Free / no plan** | 1 concurrent request |
| **Basic** | 2 concurrent requests |
| **Starter** | 5 concurrent requests |
| **Growth** | 10 concurrent requests |
| **Scale** | 20 concurrent requests |
| **Enterprise** | Unlimited concurrent requests |

## Live streaming sessions

Streaming sessions on [`WS /api/v1/listen`](/speech-to-text/streaming) have their own limits, separate from the concurrent-request limits above.

| Limit | Value |
| --- | --- |
| **Concurrent sessions** | 5 simultaneous streaming sessions per API key by default, raised on request. Exceeding it closes the new connection with code `1008`. |
| **Idle timeout** | 12 seconds with neither audio nor a `KeepAlive` message closes the session (code `1011`). |
| **Pacing** | Audio may be buffered at most 60 seconds ahead of real time (code `4008`). |
| **Session length** | Unlimited while the connection stays active; unbroken speech is force-segmented about every 60 seconds so results keep flowing. |

> Billing. Seconds of audio received × number of channels, charged from your wallet in 60-second cycles. Connecting requires roughly 60 seconds of wallet runway; running out mid-session closes the connection with code 1008. The closing Metadata event reports the session total as audio_seconds_billed.

## What happens when you exceed a limit

When you exceed your concurrent request limit, the API responds with HTTP `429` and error code `42901` (**ConcurrencyLimitError**). Either wait for existing requests to complete, or upgrade your plan to increase your limit.

```
{
  "errorCode": 42901,
  "errorMessage": "Concurrency limit exceeded. Maximum 5 concurrent requests allowed. Current: 6. Please upgrade your plan https://app.munsit.com/en/subscription or contact support@munsit.com for more information."
}
```

> The full error format — and every other error the API can return — is documented on Errors.

## Best practices

Three habits keep you clear of 429s in production.

| Practice | What to do |
| --- | --- |
| **Monitor your usage** | Check your credit balance and concurrent request limits regularly from the dashboard. |
| **Plan ahead** | Consider your usage patterns when selecting a subscription plan. |
| **Handle rate limits** | Implement retry logic with exponential backoff for `429` errors, and queue requests in your application rather than firing them all at once. |

## Subscription plans

For detailed information about subscription plans, credit limits, concurrent request limits, and pricing, visit the subscription page in the dashboard.

- [View subscription plans →](https://app.munsit.com/en/subscription) — Credit limits, concurrency limits, and pricing per plan. — `app.munsit.com/en/subscription`

- [Errors →](/errors) — Every status code and error code the API returns, with fixes. — `42901 · ConcurrencyLimitError`
