> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate Limits

> Concurrent session limits, token TTL, and what happens when you hit a limit

Reactor enforces a small number of rate limits to ensure fair access to GPU resources. This page
documents the known limits and the errors you can expect when they are exceeded.

***

## Session quotas

| Quota                           | Default                | Scope                                    |
| ------------------------------- | ---------------------- | ---------------------------------------- |
| Concurrent sessions             | 5                      | Per account (shared across all API keys) |
| Sessions per minute (per model) | 50                     | Per account, per model                   |
| Session max duration            | 1 200 seconds (20 min) | Per session                              |

<Info>
  **Need higher limits?** All session quotas can be increased. Contact
  [support@reactor.inc](mailto:support@reactor.inc) or reach out on
  [Discord](https://discord.gg/tMcJM8N5N3). You can view your current quotas in the
  **[Dashboard](https://reactor.inc/dashboard)** under Account Settings.
</Info>

### Concurrent sessions

Each account can run up to **5 sessions at the same time**, pooled across every API key on the
account. This limit applies regardless of which model you connect to.

The limit counts **sessions**, not connections. Multiple WebRTC connections that share one session
(see [Sessions](/concepts/sessions#multiple-connections-per-session)) still consume a single session
slot.

<Info>
  Sessions in the `connecting` or `waiting` states count toward the concurrent limit because a GPU
  has been requested on your behalf. Disconnect sessions you no longer need to free up slots.
</Info>

### Sessions per minute

You can create up to **50 sessions per minute per model**. This limit prevents burst abuse while
still allowing rapid iteration during development. If you exceed it, back off briefly and retry.

### Session max duration

A single session can run for up to **1 200 seconds (20 minutes)** before it is automatically
terminated. Plan your application logic around this window. For longer workflows, start a new
session when the current one approaches the limit.

<Tip>
  Listen for session lifecycle events in the SDK so your app can gracefully handle an approaching
  timeout. See [Sessions](/concepts/sessions) for details.
</Tip>

***

## Token TTL

Tokens issued by `POST /tokens` are valid for **at most 6 hours**. You can shorten the lifetime with
the `expires_after` parameter (in seconds), but you cannot extend it beyond the 6-hour ceiling.
Values at or above 21 600 are silently clamped. Always read `expires_at` on the response to confirm
the actual expiry.

See [Authentication](/authentication) for the full token-issuance flow.

***

## File uploads

When you upload files to a session, Reactor returns presigned URLs with limited lifetimes:

| URL type     | Lifetime   | Notes                                          |
| ------------ | ---------- | ---------------------------------------------- |
| Upload URL   | 15 minutes | PUT your file within this window or re-request |
| Download URL | 5 minutes  | GET URLs for retrieving uploaded assets        |

If a presigned URL expires before you use it, request a new one. See
[File Uploads](/concepts/file-uploads) for the full workflow.

***

## Behavior when limits are hit

| Scenario                     | HTTP status             | What to do                                                                       |
| ---------------------------- | ----------------------- | -------------------------------------------------------------------------------- |
| Too many concurrent sessions | `429 Too Many Requests` | Disconnect an existing session, then retry.                                      |
| Sessions-per-minute exceeded | `429 Too Many Requests` | Back off briefly and retry.                                                      |
| Session max duration reached | Session terminated      | Start a new session. The SDK will fire a disconnect/error event.                 |
| Out of credits / billing cap | `402 Payment Required`  | Top up or upgrade your plan from the [Dashboard](https://reactor.inc/dashboard). |
| Token expired                | `401 Unauthorized`      | Issue a new token via `POST /tokens`. See [Authentication](/authentication).     |

***

## Next steps

<CardGroup cols={2}>
  <Card title="Pricing & Billing" icon="credit-card" href="/resources/billing">
    Understand how sessions are billed and how to minimize cost.
  </Card>

  <Card title="FAQ" icon="circle-help" href="/resources/faq">
    Common questions about sessions, tokens, and troubleshooting.
  </Card>
</CardGroup>
