# Plans & Limits

> What each plan includes, and the rate, stream and bandwidth limits that apply in each region.

Source: https://docs.constant-k.com/get-started/plans-and-limits/

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](https://www.constant-k.com/pricing/).

### ShredQuasar

[ShredQuasar](https://docs.constant-k.com/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:

1. **The plan total**, in the table above. All requests together, across every method, may not exceed it. WebSocket requests count toward the same total.
2. **The method cap**, in the tables below. Heavy methods such as `getBlock` and `getTransaction` have lower caps than light ones such as `getBalance`.

### 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.

```json
{
  "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](https://docs.constant-k.com/rpc/errors/#gateway-errors) page.

The `getBlock` long-term storage `429` is different: it carries `Retry-After`. See [Cube Runner](https://docs.constant-k.com/cube-runner/#queued-requests).

## Solana RPC methods

Per-method caps. See the [Solana RPC overview](https://docs.constant-k.com/rpc/) 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](https://docs.constant-k.com/rpc/errors/#gateway-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](https://docs.constant-k.com/rpc/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](https://docs.constant-k.com/kaldera/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 `Subscribe` streams. They count toward the same concurrent streams and bandwidth as standard Kaldera, so a Nexus key holding all 200 `Subscribe` streams closes one before it opens a Turbo stream.
* Blade Runner reaches the same pre-execution data through `SubscribeDeshred`, counted under the Kaldera `SubscribeDeshred` limits.
* 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](https://docs.constant-k.com/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 `getBlock` rate limit in [Solana RPC methods](#solana-rpc-methods) applies to every `getBlock` request, 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](https://www.constant-k.com/plan_limits/) page on the main site shows the current values.

See the [Terms of Service](https://www.constant-k.com/terms/) for the full rules.
