Rate Limits

Limits apply per user, per second, and depend on your plan.

Plan rate

Every request counts against your plan's global rate, the total number of requests per second across all methods. Your plan's global rate is shown on the plan card at checkout and in your dashboard. Going over it returns HTTP 429.

Some methods are also capped on their own. Every call is checked against both its own cap and your plan's global cap, and the lower one applies.

Per-method limits

Plans on the standard 200 requests/sec and 500 requests/sec tiers carry the per-method caps below. A plan with a rate of its own is limited by its global rate only. Enterprise-class plans have no per-method counters.

All other methods run at your full plan rate:

confirmTransaction, getTransactionCount, getConfirmedSignaturesForAddress2, getSignatureStatuses, getSignatureStatus, getSignatureConfirmation, getAccountInfo, getMultipleAccounts, getBalance, getMinimumBalanceForRentExemption, getStakeActivation, getStakeMinimumDelegation, getTokenAccountBalance, getTokenAccountsByDelegate, getTokenSupply, getLatestBlockhash, isBlockhashValid, getRecentBlockhash, getFeeForMessage, getRecentPrioritizationFees, getFeeCalculatorForBlockhash, getFeeRateGovernor, getFees, getBlockHeight, getConfirmedBlock, getConfirmedBlocks, getConfirmedBlocksWithLimit, getFirstAvailableBlock, minimumLedgerSlot, getSlot, getSlotLeader, getSlotLeaders, getLeaderSchedule, getMaxRetransmitSlot, getMaxShredInsertSlot, getSnapshotSlot, getHighestSnapshotSlot, getHealth, getVersion, getIdentity, getGenesisHash, getClusterNodes, getVoteAccounts, getEpochInfo, getEpochSchedule, getSupply, getInflationGovernor, getInflationRate, getRecentPerformanceSamples.

Methods with a lower cap (requests per second):

Method200 req/s plan500 req/s plan
sendTransaction50200

The ZK-compression and indexer methods are not served on any plan.

Streams and connections

FeatureLimit
WebSocket subscriptionsSet by your plan
Yellowstone gRPC streamsSet by your plan
Enhanced and Program StreamsSet by your plan
Shredstream destinationsSet by your plan

See the plan comparison at checkout or in your dashboard for the numbers on your plan.

HTTP rate limits

The RPC endpoint returns HTTP 429 after your request rate exceeds its limit.

Retry with exponential backoff and jitter.

javascript
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms))

async function callRpc(body, attempt = 0) {
  const response = await fetch("https://api.mainnet-beta.solana.com", {
    method: "POST",
    headers: {
      "content-type": "application/json",
      "x-api-key": process.env.NODE_API_KEY,
    },
    body: JSON.stringify(body),
  })

  if (response.status === 429 && attempt < 4) {
    const delay = 250 * 2 ** attempt + Math.floor(Math.random() * 150)
    await wait(delay)
    return callRpc(body, attempt + 1)
  }

  return response.json()
}

Connection limits

Close subscriptions after use. A disconnected client still needs server cleanup time.

Use one filtered Yellowstone subscription instead of many broad subscriptions where possible.

Reduce usage

  • Batch independent RPC reads.
  • Use getMultipleAccounts for grouped account reads.
  • Subscribe instead of polling.
  • Cache epoch and cluster metadata.