Plans & Limits
What each plan includes, and the rate, stream and bandwidth limits that apply in each region.
constant-k plans have a flat price. There are no credits and no overage fees. Each plan sets a total request rate, per-method caps and stream limits.
Limits apply per region
Every limit on this page applies separately in each dedicated region. If you run in more than one region, each region gives you the full amount.
A dash (—) means the method or feature is not included in that plan.
Plans
| Free | Operator | Blade Runner | Nexus | |
|---|---|---|---|---|
| Price per month | $0 | $19 | $99 | $299 |
| Price per year | — | $190 | $990 | $2,990 |
| Total RPC requests | 5/s | 50/s | 200/s | 500/s |
| Solana RPC | ✓ | ✓ | ✓ | ✓ |
| WebSocket | — | ✓ | ✓ | ✓ |
| Kaldera gRPC | — | — | ✓ | ✓ |
| Turbo Kaldera (aRPC) | — | — | — | ✓ |
| ShredPrism | — | — | — | ✓ |
| Cube Runner long-term storage | — | — | ✓ | ✓ |
aRPC, anticipatory RPC, is constant-k's name for pre-execution transaction streaming. Current prices are on the pricing page.
ShredQuasar
ShredQuasar is sold on its own, per region, and is not part of the table above. No RPC plan is required, and it does not change any limit on one.
| One region | Both regions | |
|---|---|---|
| Price per month | $299 | $499 |
| Price per year | $2,990 | $4,990 |
A one-hour trial is available per region. It needs an account, it is tied to the IP address it is activated from, and each IP address gets one.
Rate limits
Two limits apply to every Solana RPC call:
- The plan total, in the table above. All requests together, across every method, may not exceed it. WebSocket requests count toward the same total.
- The method cap, in the tables below. Heavy methods such as
getBlockandgetTransactionhave lower caps than light ones such asgetBalance.
Counting
- Per API key, not per IP address. Every machine that uses the same key draws on the same budget. Moving to another IP address resets nothing.
- One key is one budget, whichever hostname you call. The staked send hostname draws on the same per-second budget as the regular RPC hostname.
- The window is one fixed second. The count starts at zero at the start of each second and is compared against your limit as each request arrives.
- No burst allowance. The budget does not build up while you are idle, and there is no queue or token bucket to borrow from.
Over the limit
The request is rejected with HTTP 429 and a JSON-RPC error with code -32005. The message names the limit you hit: your plan total, a method category, or a method that is at capacity across all keys.
{
"jsonrpc": "2.0",
"error": { "code": -32005, "message": "Global rate limit exceeded (5/sec, batch of 1)" },
"id": null
}A rate-limit 429 carries no Retry-After header and no rate-limit headers, so the client cannot read a wait time from the response and has to back off on its own. The window is a whole second, so a short pause is usually enough. The exact messages are on the Errors page.
The getBlock long-term storage 429 is different: it carries Retry-After. See Cube Runner.
Solana RPC methods
Per-method caps. See the Solana RPC overview for the special entries below, such as getProgramAccounts.
| Method | Free | Operator | Blade Runner | Nexus |
|---|---|---|---|---|
sendTransaction (network) | 1/s | 15/s | 50/s | 200/s |
sendTransaction (staked, SWQoS) | — | 1/s | 5/s | 20/s |
getSupply | — | — | 2/s | 5/s |
getProgramAccounts (filter required) | — | — | 2/s, 1 open | 5/s, 3 open |
getProgramAccountsV2 (paginated, 10,000/page) | — | — | 2/s, 1 open | 5/s, 3 open |
| ALT Lookups (ALT program · from index) | — | — | 2/s | 5/s |
getTokenLargestAccounts | — | — | 2/s | 30/s |
getBlock | 1/s | 5/s | 10/s | 30/s |
getBlocks | — | — | 10/s | 30/s |
getBlocksWithLimit | — | — | 10/s | 30/s |
getConfirmedBlock | 1/s | 5/s | 10/s | 30/s |
getSignaturesForAddress | — | 5/s | 10/s | 30/s |
getTokenAccountsByOwner | — | 5/s | 10/s | 30/s |
getBlockCommitment | 2/s | 5/s | 50/s | 100/s |
getBlockProduction | 2/s | 5/s | 50/s | 100/s |
getBlockTime | 2/s | 5/s | 50/s | 100/s |
getConfirmedTransaction | 2/s | 5/s | 50/s | 100/s |
getInflationReward | 2/s | 5/s | 50/s | 100/s |
getTransaction | 2/s | 5/s | 50/s | 100/s |
simulateTransaction | 2/s | 5/s | 50/s | 100/s |
getAccountInfo | 5/s | 50/s | 200/s | 500/s |
getBalance | 5/s | 50/s | 200/s | 500/s |
getBlockHeight | 5/s | 50/s | 200/s | 500/s |
getClusterNodes | 5/s | 50/s | 200/s | 500/s |
getEpochInfo | 5/s | 50/s | 200/s | 500/s |
getEpochSchedule | 5/s | 50/s | 200/s | 500/s |
getFeeForMessage | 5/s | 50/s | 200/s | 500/s |
getGenesisHash | 5/s | 50/s | 200/s | 500/s |
getHealth | 5/s | 50/s | 200/s | 500/s |
getHighestSnapshotSlot | 5/s | 50/s | 200/s | 500/s |
getIdentity | 5/s | 50/s | 200/s | 500/s |
getLatestBlockhash | — | 50/s | 200/s | 500/s |
getLeaderSchedule | 5/s | 50/s | 200/s | 500/s |
getMinimumBalanceForRentExemption | 5/s | 50/s | 200/s | 500/s |
getMultipleAccounts (max 100 per call) | — | 50/s | 200/s | 500/s |
getRecentPerformanceSamples | 5/s | 50/s | 200/s | 500/s |
getRecentPrioritizationFees | 5/s | 50/s | 200/s | 500/s |
getSignatureStatuses (max 100 per call) | — | 50/s | 200/s | 500/s |
getSlot | 5/s | 50/s | 200/s | 500/s |
getSlotLeader | 5/s | 50/s | 200/s | 500/s |
getStakeActivation | 5/s | 50/s | 200/s | 500/s |
getStakeMinimumDelegation | 5/s | 50/s | 200/s | 500/s |
getTokenAccountBalance | 5/s | 50/s | 200/s | 500/s |
getTokenSupply | 5/s | 50/s | 200/s | 500/s |
getTransactionCount | 5/s | 50/s | 200/s | 500/s |
getVersion | 5/s | 50/s | 200/s | 500/s |
getVoteAccounts | 5/s | 50/s | 200/s | 500/s |
isBlockhashValid | 5/s | 50/s | 200/s | 500/s |
"Open" in the table is the number of getProgramAccounts and getProgramAccountsV2 calls one API key can have in progress at the same time, both methods counted together. A call over the cap gets HTTP 429 with code -32005. See Errors.
Not supported on any plan: batch requests (one JSON-RPC call per HTTP request), getLargestAccounts and sendBundle.
WebSocket limits
| Limit | Free | Operator | Blade Runner | Nexus |
|---|---|---|---|---|
| Allowed Methods | — | Subscriptions | Subscriptions | Subscriptions |
| Concurrent Connections (per key) | — | 10 | 50 | 100 |
| Subscriptions (per connection) | — | 10 | 50 | 100 |
| Requests | — | Count toward the plan total | Count toward the plan total | Count toward the plan total |
blockSubscribe | — | — | — | ✓ |
Keepalive (getHealth) | — | ✓ | ✓ | ✓ |
See WebSockets.
Kaldera gRPC limits
Yellowstone gRPC with shred acceleration and a per-subscriber fanout. Not available on Free or Operator.
| Limit | Blade Runner | Nexus |
|---|---|---|
| Subscribe Bandwidth | 37.5 MB/s | 150 MB/s |
| Subscribe Concurrent Streams | 75 | 200 |
| SubscribeDeshred Access (pre-execution tx stream) | ✓ | ✓ |
| SubscribeDeshred Bandwidth | 22.5 MB/s | 75 MB/s |
| SubscribeDeshred Concurrent Streams | 15 | 25 |
| Replay Window | 24 hours per region | 24 hours per region |
| Subscription Filters | Slots, Transactions, Accounts | Slots, Transactions, Accounts |
| Filters per Stream | 15 | 64 |
| Accounts per Filter | 100 | 2,000 |
| Owners per Filter | 38 | 50 |
| Max Accounts per Stream (auto-split) | 1,500 | 128,000 |
| Max Accounts Total (streams × max per stream) | ~112,500 | ~25,600,000 |
| Transaction Filters per Stream | 15 | 32 |
| Accounts per Transaction Filter | 100 | 1,000 |
| "Any" (No Filter) Streams | — | Max 3 Streams |
| Compression | gzip, zstd | gzip, zstd |
Bandwidth limits apply per API key, per region. A stream at its limit is throttled. When a client falls behind, Kaldera buffers up to 64 MB of its data. If that buffer fills, Kaldera drops the oldest queued updates and keeps the client on the newest data.
Turbo Kaldera limits
Turbo Kaldera streams decoded pre-execution transactions over the standard Yellowstone Subscribe method, on the turbo-kaldera-<region> hostnames in New York, Frankfurt and Amsterdam. Not available on Free or Operator.
| Limit | Blade Runner | Nexus |
|---|---|---|
Turbo Subscribe | — | ✓ |
SubscribeDeshred on the turbo hostnames | ✓ | ✓ |
| Concurrent streams | Kaldera SubscribeDeshred limit | Shared with Kaldera Subscribe |
| Bandwidth | Kaldera SubscribeDeshred limit | Shared with Kaldera Subscribe |
Transaction filters (accountInclude, accountExclude, accountRequired, vote) | ✓ | ✓ |
| Execution metadata (fee, status, logs) | — | — |
Replay (fromSlot) | — | — |
- Turbo streams are Kaldera
Subscribestreams. They count toward the same concurrent streams and bandwidth as standard Kaldera, so a Nexus key holding all 200Subscribestreams closes one before it opens a Turbo stream. - Blade Runner reaches the same pre-execution data through
SubscribeDeshred, counted under the KalderaSubscribeDeshredlimits. - A lower plan is refused with gRPC status
PERMISSION_DENIED(7).
ShredPrism limits
Serialized entries over gRPC. Nexus only.
| Limit | Nexus |
|---|---|
| Bandwidth Limit | None |
| Concurrent Streams | One Stream Per Key |
| Stream Type | Full Solana Feed over gRPC |
| Shred Visibility | Pre-block, sub-slot |
Cube Runner limits
Cube Runner retrieves a block from long-term storage when no cache, ledger or other region holds it. Long-term storage is included on Blade Runner and Nexus tier plans. Each plan has its own queue in each region, shared by every API key on that plan in that region.
| Limit | Blade Runner | Nexus |
|---|---|---|
| Retrieval rate per region | 1 block per 15 seconds | 1 block per 3 seconds |
| Monthly allowance per API key, per region | 10,000 blocks | 50,000 blocks |
| Blocks queued per API key | 200 | 500 |
| Blocks queued per region | 1,000 | 2,000 |
| Longest allowed queue time (no guaranteed delivery; request again to requeue) | 1 hour | 2 hours |
- The monthly allowance counts only blocks retrieved from long-term storage for that API key. Blocks served by a cache, a ledger or another region never count.
- Each region keeps its own count, so an API key has the full allowance in each region.
- The allowance resets at 00:00 UTC on the first day of each month.
- The
getBlockrate limit in Solana RPC methods applies to everygetBlockrequest, whichever source serves it.
Trials and billing
- Trials. The pricing page lists Free as a 5-day trial for testing. Paid plans offer a 3-day trial. Each account can use one trial, for any plan, so the highest plan you expect to need is the one worth trialling.
- Payment. In USD or in USDC. A yearly plan costs the same as 10 months.
- Crypto payments. Crypto subscriptions do not renew automatically. Each extra payment adds time to the end of your current plan. Payment through the QR code or the Open in Wallet button on the payment page activates the account automatically.
- Cancelling. Available at any time. Your plan stays active until the end of the billing period.
- Limit changes. constant-k may adjust plan limits to keep the nodes healthy, and posts a notice when it does. The Plan Limits page on the main site shows the current values.
See the Terms of Service for the full rules.