JSON-RPC

429 Too Many Requests on Solana RPC

Your RPC call got HTTP 429 with a Retry-After header. Either you blew through the per-second burst (50-200 rps on most shared providers), or you hit the daily quota for your plan.

Root causes

Ranked by frequency. First cause is the one to check first.

  1. 01Burst of parallel requests exceeding per-second rate (e.g., Promise.all over 200 `getAccountInfo` calls).
  2. 02Daily quota exhausted — check the `x-rate-limit-remaining` header.
  3. 03Retry loop with no backoff hammering the endpoint harder on each failure.
  4. 04Credit-metered provider running out of monthly credits (Helius, QuickNode).

Fix steps

  1. 1

    Batch requests

    Solana RPC supports JSON batch requests — 100 getAccountInfo calls in one HTTP request count as 1 request for rate-limit purposes on most providers. `[{...}, {...}, {...}]` instead of sequential posts.

  2. 2

    Add retry with jitter

    On 429, sleep `Retry-After` if present, else 1-2 seconds with randomness. Never retry instantly.

  3. 3

    Stream instead of poll

    If you're polling for account changes, switch to gRPC accounts subscription with an owner filter. One stream replaces thousands of polls and is immune to rate-limit cliffs.

  4. 4

    Monitor quota remaining

    Log the `x-rate-limit-remaining-day` and `x-rate-limit-remaining-second` headers Subglow and Helius both return. Alert when you're at 80% of the daily cap.

Related errors

Want an endpoint that just works?

Subglow is flat-priced Solana gRPC + JSON-RPC on a single API key. Pre-parsed JSON, dedicated sendTransaction bucket, 99.9% latency SLA on Dedicated. No credit juggling, no surprise bills.