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

# Plans

> What each Octavia plan includes, limit by limit.

Every plan has the same API. The difference is how much you are allowed to do before
the API starts returning `426 Plan limit exceeded`.

<Info>
  Running into a limit? [Rate limits & errors](/api-reference/ai-cms/rate-limits-and-errors)
  explains which failures you can retry and which you cannot.
</Info>

<CardGroup cols={2}>
  <Card title="Compare plans" icon="layout-dashboard" href="https://dashboard.octaviatech.app/apps/plans" arrow="true">
    Upgrade or compare on the dashboard.
  </Card>

  <Card title="Check current usage" icon="gauge" href="https://dashboard.octaviatech.app" arrow="true">
    See where you stand against each limit.
  </Card>
</CardGroup>

***

## Plans at a glance

| **Limit**              | **Free** | **Plus** | **Pro** | **Enterprise** |
| ---------------------- | -------- | -------- | ------- | -------------- |
| **Admins**             | 1        | 5        | 15      | Custom         |
| **API keys**           | 1        | 3        | 10      | Custom         |
| **Languages**          | 1        | 3        | 8       | Custom         |
| **Forms**              | 3        | 10       | 50      | Custom         |
| **Submissions**        | 200      | 1,000    | 10,000  | Custom         |
| **Storage (MB)**       | 1,024    | 2,560    | 5,120   | Custom         |
| **AI tokens**          | 10,000   | 50,000   | 150,000 | Custom         |
| **Image size (MB)**    | 2        | 5        | 10      | Custom         |
| **Video size (MB)**    | 25       | 50       | 100     | Custom         |
| **Audio size (MB)**    | 10       | 25       | 50      | Custom         |
| **Document size (MB)** | 25       | 50       | 100     | Custom         |
| **Media compression**  | On       | On       | On      | Custom         |
| **Compression level**  | 1        | 2        | 3       | Custom         |

***

## What each column means

**Admins** — how many team members with administrative access you can invite.

**API keys** — how many active keys you can create. A key is per team *and* per service,
so a key for another Octavia product does not count against this.

**Languages** — how many languages you can register. Articles can only be written in a
language that exists, so this caps how many locales you can publish in.

**Forms** — how many forms you can create.

**Submissions** — the total number of form submissions stored across all your forms.

**Storage (MB)** — total media and file storage for the tenant.

**AI tokens** — the AI credit pool. This is the one that surprises people: it is
**consumed**, not a count of resources. Every AI call draws from it, and the amount
depends on the operation and the size of your input.

**File size caps** — the largest single image, video, audio file, or document you can
upload.

**Media compression** — whether uploaded media is compressed automatically.

**Compression level** — `1` is fastest with the least compression, `3` is the smallest
file. Higher levels cost more processing time.

<Note>
  <strong>Enterprise is fully custom.</strong> Every limit above is negotiable, and
  limits outside this table can be arranged too. Contact support to discuss volume,
  retention, or a bespoke arrangement.
</Note>

***

## How limits are enforced

Limits are per tenant, and they apply across every API key you hold — adding a second key
does not give you a second allowance.

**Counted resources** (admins, keys, languages, submissions) are checked when you try to
create one more. Once you are at the limit, the create is rejected with `426` and nothing
is written.

**AI tokens** are checked with a projection. The API estimates what your request will
cost *before* running it, and rejects the call if `used + estimated` would exceed the
limit. A single large request can therefore fail even when your current usage looks low.

```json theme={null}
{
  "success": false,
  "statusCode": 426,
  "message": "ai_tokens limit exceeded (used: 10020, limit: 10000)",
  "data": { "used": 10020, "limit": 10000, "remaining": 0, "overflow": 20 }
}
```

<Warning>
  A <code>426</code> is never retryable. It only clears when the quota changes — you
  upgrade, the period rolls over, or you delete existing content.
</Warning>

<Note>
  <strong>Not enforced by the API today.</strong> The <em>forms</em>, <em>storage</em>, and
  file-size limits in the table above are plan entitlements, but the public API does not
  currently reject requests against them. The dashboard still measures storage and media
  compression, and it applies all of them at the plan level. Do not build logic that
  expects a <code>426</code> from these.
</Note>

***

## Choosing a plan

<CardGroup cols={2}>
  <Card title="Free" icon="gift">
    Enough to build and run a single-language site. One admin, one key, one locale, three
    forms.
  </Card>

  <Card title="Plus" icon="sparkles">
    For a growing team publishing in a few languages, with more forms and a larger AI
    credit pool.
  </Card>

  <Card title="Pro" icon="rocket">
    For a production content operation: eight languages, fifty forms, and 150,000 AI
    tokens.
  </Card>

  <Card title="Enterprise" icon="building-2">
    Every limit is negotiable, including ones not listed here. Talk to us about volume
    and custom terms.
  </Card>
</CardGroup>

***

## Reducing usage

If you are hitting a quota before you are ready to upgrade:

* **Cut submissions.** Export and archive old form submissions you no longer need.
* **Trim media.** Large images and video dominate storage usage. Compressing before
  upload is usually the biggest win.
* **Batch AI calls.** Generation and translation are the heaviest token consumers. Do
  them in bulk during off-peak hours rather than one request at a time.
* **Set a token budget per feature.** If you have a dashboard, treat AI as a metered
  dependency and cap what each feature can spend.

<CardGroup cols={2}>
  <Card title="Rate limits & errors" icon="triangle-alert" href="/api-reference/ai-cms/rate-limits-and-errors" arrow="true">
    How to handle 429 and 426 correctly.
  </Card>

  <Card title="Support" icon="headset" href="https://support.octaviatech.app" arrow="true">
    Discuss Enterprise limits with the team.
  </Card>
</CardGroup>
