Documentation

gRPC limits

How Supanode gRPC limits work: plan quotas for simultaneous subscriptions, addresses and owner programs, the node's fixed caps of 2000 addresses per filter and 10 filters per subscription, and how to lay your address budget out across them.

// updated 2026-08-26

Two different things limit a gRPC stream, and they fail in different ways. Knowing which one you hit tells you whether to reshape your request or buy a bigger plan.

Set byChanges with your plan?Error code
Plan quotasyour subscriptionyesResourceExhausted
Node capsYellowstone itselfno, identical on every planInvalidArgument
NOTE

The short version. One filter holds at most 2 000 addresses. One subscription holds at most 10 filters, so at most 20 000 addresses. Your plan then caps how many subscriptions you can hold at once and how many addresses you can watch in total. Spread your addresses accordingly.

How a stream is structured

TCP connection
  └─ subscription (one Subscribe call)   ← your plan caps how many
       └─ filter (a named rule)          ← max 10 per subscription
            └─ addresses / owners        ← max 2 000 per filter

One TCP connection can carry as many subscriptions as your plan allows - there is no separate limit on connections, and no benefit to opening several. What is counted is subscriptions.

Node caps: the same on every plan

These come from Yellowstone and do not change with your tier.

CapValueError you get
Addresses in one filter2 000failed to create filter: Max amount of Pubkeys reached, only 2000 allowed
Filters in one subscription10failed to create filter: Max amount of filters/data_slices reached, only 10 allowed
Addresses in one subscription20 000(10 filters × 2 000)
WARNING

This is the trap. If your plan includes 24 000 addresses and you send all 24 000 in a single filter, you get only 2000 allowed - a message that says nothing about splitting them up. Nothing is wrong with your plan: you just have to lay the addresses out across filters and subscriptions.

Plan quotas

PlanConcurrent subscriptionsAddresses watched, totalOwner programs, total
STARTERnot included
FOCUS1100
BUILD105 0005
GROW2024 00020
PROFESSIONAL50100 00050
Dedicatedunlimitedunlimitedunlimited

Addresses and owner programs are counted across everything you have open at once - every filter, in every subscription, in every connection. Opening a second connection does not give you a second budget.

Going over returns, for example:

accounts.account: too many values across filters and active streams (26000 > 24000)
accounts.owner:   too many values across filters and active streams (21 > 20)
TIP

The budget is "at once", not "per month". Close a subscription and its addresses are immediately free again. You can rotate through far more addresses over a day than your plan number - you just cannot watch more than that number simultaneously.

How to lay out your address budget

Fill filters to 2 000, pack 10 filters per subscription, then open as many subscriptions as you need.

PlanAddressesMinimum layoutSubscriptions used, of your quota
FOCUS1001 filter × 1001 of 1
BUILD5 0003 filters (2 000 + 2 000 + 1 000)1 of 10
GROW24 00012 filters: one subscription of 10, one of 22 of 20
PROFESSIONAL100 00050 filters, 10 per subscription5 of 50

On every plan the layout leaves most of your subscription quota free for other streams - transactions, slots, block metadata.

NOTE

Filter names are yours. Each filter is a named rule inside the request, and the name comes back on every update so you know which rule matched. Split by whatever grouping is useful to you - by market, by strategy, by customer - the limit only cares about the counts.

Reading the error you get

ErrorSourceWhat to do
InvalidArgument · failed to create filter: ...the nodereshape the request - fewer addresses per filter, fewer filters per subscription
ResourceExhausted · too many values across filters and active streamsyour planclose a stream you no longer need, or move up a tier
ResourceExhausted · too many simultaneous connections (limit: N)your planyou are at your subscription count - close one first
WARNING

The subscription-count error says "connections", but it counts subscriptions. You will see too many simultaneous connections (limit: 20) even when every one of those subscriptions is inside a single TCP connection.

Request size

A SubscribeRequest must stay under 4 MiB (4 194 304 bytes) - the standard gRPC message limit. Above it the request is dropped before it reaches the node, and you get no error at all: the stream opens, sends you a ping, and then stays silent forever.

An address costs about 46 bytes on the wire, so the ceiling is roughly 91 000 addresses in one request. You cannot reach it while respecting the node caps - 10 filters × 2 000 addresses is about 0.9 MB - so this only bites if you try to send a whole plan's worth of addresses in one filter.

TIP

Do not treat silence as success, and do not treat a slow answer as failure. A rejection arrives after the first ping, and a multi-megabyte request spends most of its time uploading - on a slow uplink that is seconds. Wait for an actual error or an actual data message before deciding your subscription is live.

Filter update rate

You can re-send a SubscribeRequest to swap filters up to 30 times per minute, the same on every tier. A new request fully replaces the old one on that subscription.

PlanFilter updates
FOCUS30 / min
BUILD30 / min
GROW30 / min
PROFESSIONAL30 / min
Dedicatedunlimited

Streams without addresses

slots, blocks_meta and entry carry no addresses, so they draw on nothing but your subscription count.

They are also not deduplicated: open the same slots subscription four times and you receive the same stream four times over. Measured on a live plan, one slots subscription delivered 38 messages in five seconds and four identical subscriptions delivered 144. Subscribe once and fan the data out inside your own application.

Throughput

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 unfiltered block streaming, which is included in the PROFESSIONAL tier.

Per-tier reference

{
  "concurrent_subscriptions": 1,
  "addresses_total": 100,
  "owner_programs_total": null,
  "filter_updates_per_min": 30,
  "node_caps": { "addresses_per_filter": 2000, "filters_per_subscription": 10 },
  "throughput": "unlimited"
}

Other per-stream caps

FieldFOCUSBUILDGROWPROFESSIONALDedicated
accounts.data_slice_max10101010unlimited
slots.max102550100unlimited
blocks_meta.max10101010unlimited
entry.max10101010unlimited

External references

See also