# Limits & quotas

## Plan allowances

Allowances are per project, per calendar month. See [pricing](https://capless.sh/pricing.md) for prices.

| | Free trial (14 days) | Starter | Team | Enterprise |
|---|---|---|---|---|
| Members | unlimited | 1 | unlimited | custom |
| Events / month | 250,000 | 250,000 included | 250,000 included | custom |
| Session replays / month | 2,500 | 2,500 included | 2,500 included | custom |
| Storage | 10 GB | 10 GB-months included | 10 GB-months included | custom |
| Sites | unlimited | unlimited | unlimited | custom |
| API, MCP, CEL, streams, erasures, ClickHouse SQL | ✓ | ✓ | ✓ | ✓ |
| Beyond the included usage | collection pauses | pay as you go | pay as you go | contract |

* An **event** is each web analytics event (pageview, click, …) or each entry inserted via the API.
* A **replay** is one recorded session in one browser tab.
* **Storage** is the compressed size of your streams plus your ClickHouse tables, measured hourly.
* On Starter and Team, usage beyond the included amount is billed: events $2 per 1M (first 100M), then $1 per 1M; replays $0.50 per 1,000 (first 100,000), then $0.25 per 1,000; storage $0.10 per GB-month.
* The trial has no card on file, so its limits are hard: collection pauses at a limit until you pick a plan. Data you already collected is untouched.
* Data is kept until you delete it ([erasures](https://capless.sh/docs/erasures.md), or deleting a stream); deleted data stops counting toward storage once it is purged.

## API

| Limit | Value |
|---|---|
| Request body | 8 MiB (`413 request_too_large`) |
| Entries per batch | 1–100 000 |
| Entry size / depth | 1 MiB / 32 levels |
| Idempotency key | ≤ 256 characters, kept 7 days |
| Stream and materialization names | `^[A-Za-z0-9][A-Za-z0-9_.\-]{0,127}$` |
| List page size | 1–1000 (default 100) |
| Commits per stream | on the order of 1000/s; batch, or shard hot streams |

## Reads

| Limit | Default | Max |
|---|---|---|
| `limitReadEntries` (positions examined) | 10 000 | 1 000 000 |
| `limitResultEntries` | 1 000 | 100 000 |
| `limitReadBytes` (stored bytes examined) | 16 MiB | 256 MiB |
| `limitBytes` (result bytes) | 1 MiB | 32 MiB |
| Inlined erasure IDs in `/changes` | 1000 | |
| Erasure affected-ID page (`limit`) | 1000 | 10 000 |

## CEL

| Limit | Value |
|---|---|
| Expression length | 4096 characters |
| AST nodes / depth | 1000 / 32 |
| Nested comprehensions | 2 |
| Literal list elements / map entries | 256 / 256 |

## ClickHouse queries

| Limit | Value |
|---|---|
| Statements per request | 1 |
| Time / memory | 30 s / 4 GB |
| Returned rows (`maxRows`) | default 10 000, max 100 000 |

## Web collector

| Limit | Value |
|---|---|
| Payload per request | 1 MiB compressed, 4 MiB decompressed |
| Session timeout | 30 minutes of inactivity |
