# gRPC limits

> Per-plan gRPC limits: concurrent connections, per-stream filter caps (accounts, owners, transactions, blocks), and unlimited/unmetered throughput. No per-MB billing.

Every gRPC stream must include a filter - there is no unfiltered firehose. These caps define how broad a single stream's filter can be on your plan.

## How are gRPC limits structured?

gRPC is limited on **4 independent axes**, plus one control-plane limit:

1. **Connections** *(per plan)* - how many live `Subscribe` streams you can run at once. In Yellowstone, 1 connection = 1 stream = 1 subscription. This is your plan quota: FOCUS 1 / BUILD 10 / GROW 20 / PRO 50 / Dedicated unlimited.
2. **Filters per connection** - how many named rules live in one `SubscribeRequest`. Categories combine with **AND**; values inside one array (and multiple named filters in a category) combine with **OR**. You can rewrite a subscription on the fly - a new `SubscribeRequest` fully replaces the old one.
3. **Filter width** *(per stream)* - how many addresses a single stream can match: array sizes like `account_max`, `owner_max`, `account_include_max`. `owner` is the heaviest - it fans out to **every account a program owns** - so it has the tightest cap.
4. **Throughput** - the volume of data Supanode pushes to you. On Supanode this is **unlimited and unmetered** (no per-MB or per-credit billing). The only volume gate is full-block streaming, which is a separate [Full Block add-on](https://supanode.xyz/docs/solana/grpc/full-block-streaming).

**Control plane:** you can re-send a `SubscribeRequest` (re-subscribe) at up to **10 times per second**.

<Note>
**Caps are per stream, connections are the plan quota.** Every cap in the per-category table below applies to a single `SubscribeRequest` (one stream). The connection count is how many such streams you can run in parallel. So your total reach is roughly `account_max × connections` - see the [Total reach](#total-reach) callout.
</Note>

## How many gRPC connections can I run at once?

How many live gRPC streams you can run at the same time, per plan.

| Plan | Concurrent connections |
|---|---|
| STARTER | not included |
| FOCUS | 1 |
| BUILD | 10 |
| GROW | 20 |
| PROFESSIONAL | 50 |
| Dedicated | unlimited |

The **STARTER** plan (\$40/mo) does not include gRPC. To use gRPC, choose FOCUS, BUILD, GROW, or PROFESSIONAL.

## What are the per-stream filter caps?

Each value below is the maximum size of that field within a **single** `SubscribeRequest`. For the parameterless stream types (`slots`, `blocks_meta`, `entry`) the number is the maximum count of named filters of that type in one stream.

| Field (per stream) | FOCUS | BUILD | GROW | PROFESSIONAL | Dedicated |
|---|---|---|---|---|---|
| `accounts.account_max` | 50 | 500 | 1,200 | 2,000 | unlimited |
| `accounts.owner_max` | 10 | 50 | 200 | 200 | unlimited |
| `accounts.data_slice_max` | 10 | 10 | 10 | 10 | unlimited |
| `slots.max` | 10 | 25 | 50 | 100 | unlimited |
| `blocks.account_include_max` | 25 | 100 | 200 | 500 | unlimited |
| `blocks`: include transactions / accounts / entries | all allowed | all | all | all | all |
| `blocks_meta.max` | 10 | 10 | 10 | 10 | unlimited |
| `transactions.account_include_max` | 50 | 500 | 1,200 | 2,000 | unlimited |
| `transactions.account_exclude_max` | 50 | 500 | 1,200 | 2,000 | unlimited |
| `transactions.account_required_max` | 50 | 500 | 1,200 | 2,000 | unlimited |
| `transactions_status.account_include_max` | 25 | 100 | 200 | 500 | unlimited |
| `transactions_status.account_exclude_max` | 25 | 100 | 200 | 500 | unlimited |
| `transactions_status.account_required_max` | 25 | 100 | 200 | 500 | unlimited |
| `entry.max` | 10 | 10 | 10 | 10 | unlimited |

`accounts.owner_max` is intentionally tight because an owner filter expands to every account a program owns - the single heaviest filter you can write. There is **no** separate "filters per type" cap on top of this: the array sizes above already bound how broad one stream can be.

## How many accounts can I watch across all streams?

<Tip id="total-reach">
**Across all your streams you can watch up to `account_max × connections` accounts.** For GROW that is `1,200 × 20 = up to 24,000` accounts. This is a ceiling - you spread accounts across separate streams, since the array cap applies per stream. Headline reach per plan:

| Plan | Max accounts watched |
|---|---|
| FOCUS | up to 50 |
| BUILD | up to 5,000 |
| GROW | up to 24,000 |
| PROFESSIONAL | up to 100,000 |
| Dedicated | unlimited |
</Tip>

## Is gRPC throughput metered?

<Note>
**Throughput is unlimited and unmetered on every gRPC tier.** Supanode bills by plan tier, so the data your streams deliver carries no per-MB, per-GB, or per-credit charge. The only volume gate is full-block streaming (empty-filter "firehose" mode), which is the separate [Full Block add-on](https://supanode.xyz/docs/solana/grpc/full-block-streaming).
</Note>

## SubscribeRequest update rate

Maximum rate at which you can re-send a `SubscribeRequest` to swap your filters.

| Plan | Updates per second |
|---|---|
| FOCUS / BUILD / GROW / PROFESSIONAL | 10 |
| Dedicated | unlimited |

## Per-tier filter caps (copy-paste)

A quick reference for the per-stream caps on each tier.

<Tabs>
  <Tab title="FOCUS">
```json
{
  "connections": 1,
  "accounts": { "account_max": 50, "owner_max": 10, "data_slice_max": 10 },
  "slots": { "max": 10 },
  "blocks": { "account_include_max": 25 },
  "blocks_meta": { "max": 10 },
  "transactions": { "account_include_max": 50, "account_exclude_max": 50, "account_required_max": 50 },
  "transactions_status": { "account_include_max": 25, "account_exclude_max": 25, "account_required_max": 25 },
  "entry": { "max": 10 },
  "throughput": "unlimited",
  "max_accounts_watched": 50
}
```
  </Tab>
  <Tab title="BUILD">
```json
{
  "connections": 10,
  "accounts": { "account_max": 500, "owner_max": 50, "data_slice_max": 10 },
  "slots": { "max": 25 },
  "blocks": { "account_include_max": 100 },
  "blocks_meta": { "max": 10 },
  "transactions": { "account_include_max": 500, "account_exclude_max": 500, "account_required_max": 500 },
  "transactions_status": { "account_include_max": 100, "account_exclude_max": 100, "account_required_max": 100 },
  "entry": { "max": 10 },
  "throughput": "unlimited",
  "max_accounts_watched": 5000
}
```
  </Tab>
  <Tab title="GROW">
```json
{
  "connections": 20,
  "accounts": { "account_max": 1200, "owner_max": 200, "data_slice_max": 10 },
  "slots": { "max": 50 },
  "blocks": { "account_include_max": 200 },
  "blocks_meta": { "max": 10 },
  "transactions": { "account_include_max": 1200, "account_exclude_max": 1200, "account_required_max": 1200 },
  "transactions_status": { "account_include_max": 200, "account_exclude_max": 200, "account_required_max": 200 },
  "entry": { "max": 10 },
  "throughput": "unlimited",
  "max_accounts_watched": 24000
}
```
  </Tab>
  <Tab title="PROFESSIONAL">
```json
{
  "connections": 50,
  "accounts": { "account_max": 2000, "owner_max": 200, "data_slice_max": 10 },
  "slots": { "max": 100 },
  "blocks": { "account_include_max": 500 },
  "blocks_meta": { "max": 10 },
  "transactions": { "account_include_max": 2000, "account_exclude_max": 2000, "account_required_max": 2000 },
  "transactions_status": { "account_include_max": 500, "account_exclude_max": 500, "account_required_max": 500 },
  "entry": { "max": 10 },
  "throughput": "unlimited",
  "max_accounts_watched": 100000
}
```
  </Tab>
</Tabs>

## What happens when you hit a limit

- **Filter too broad** - if a stream's filter exceeds the per-category caps above, the server returns `ResourceExhausted` (gRPC status code **8**).
- **Malformed filter** - a structurally invalid `SubscribeRequest` is rejected with `INVALID_ARGUMENT`.
- **Connection cap exceeded** - a new stream beyond your plan's connection quota is refused, or the connection is closed. Existing streams keep working.

There are **no** per-event or per-MB throughput caps on gRPC streams. Your constraints are connections, filter width, and the 10/s re-subscribe rate.

## External references

- [Yellowstone gRPC GitHub](https://github.com/rpcpool/yellowstone-grpc)
- [geyser.proto (SubscribeRequest definition)](https://github.com/rpcpool/yellowstone-grpc/blob/master/yellowstone-grpc-proto/proto/geyser.proto)

## See also

- [What's available](https://supanode.xyz/docs/solana/grpc/whats-available)
- [All limits at a glance](https://supanode.xyz/docs/solana/pricing/limits)
- [Plans](https://supanode.xyz/docs/solana/pricing/plans)
