Skip to main content

Documentation Index

Fetch the complete documentation index at: https://helius-feat-signup-payment-link-docs.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

What are rate limits?

Rate limits control how many requests you can make per second. When rate limits are exceeded, you’ll receive an HTTP 429 response. For guidance on what to do when you hit a 429 or other transient failure, see Retries and error handling below.

Standard Rate Limits

Your plan has two standard rate limit groups: one for RPC requests, and one for DAS API requests. Here are the base rate limits for each Helius plan:
PlanRPC Rate LimitDAS & Enhanced APIs
Free10 requests/s2 requests/s
Developer50 requests/s10 requests/s
Business200 requests/s50 requests/s
Professional500 requests/s100 requests/s
EnterpriseCustomCustom

Increase Rate Limits

Teams on Professional plans can purchase an extra 100 RPS for $100/month. If you need custom rate limits ahead of launches, contact our sales team. If you are on Developer or Business tier, please upgrade your plan to increase your rate limits.

Special Rate Limits

Some endpoints and specialized Helius products have special rate limits due to their computational requirements.

Sending Transactions

EndpointFreeDeveloperBusinessProfessional
Sender50/sec50/sec50/sec50/sec
sendTransaction1/sec5/sec50/sec100/sec
sendBundle5/sec5/sec
simulateBundle10/sec50/sec200/sec500/sec
If you are on a Professional plan and need to increase your sendTransaction rate limits, contact our sales team. Professional plan users can also request rate limit increases and custom tip arrangements for Sender to support higher-throughput trading apps.

Complex RPC Calls

EndpointFreeDeveloperBusinessProfessional
getProgramAccounts5/sec25/sec50/sec75/sec

Historical Data

When making batch requests for historical data methods, the following limits apply:
MethodMax Batch Size
getTransaction100 items per request
getTransactionsForAddressNo batch requests allowed
All other historical methods10 items per request
Exceeding batch limits will result in an error response. For getTransactionsForAddress, each address must be queried in a separate request.

LaserStream

ResourceFreeDeveloperBusinessProfessional
NetworksDevnetDevnet, MainnetDevnet, Mainnet
Max Pubkeys10M10M10M
Active Connections10100

Wallet API

The Wallet API follows the same rate limits as DAS & Enhanced APIs. All endpoints share these limits:
EndpointFreeDeveloperBusinessProfessional
All Wallet API Endpoints2/sec10/sec50/sec100/sec
This includes identity lookups, balances, history, transfers, and funding source endpoints. Learn more in our Wallet API documentation.

WebSockets

ResourceFreeDeveloperBusinessProfessional
Concurrent Connections51502501,000
Subscriptions per Connection1,0001,0001,0001,000
WebSocket TypesStandardStandard, EnhancedStandard, EnhancedStandard, Enhanced

Webhooks

ResourceFreeDeveloperBusinessProfessional
Max Webhooks5505050
Addresses per Webhook100k100k100k100k

ZK Compression

ServiceFreeDeveloperBusinessProfessional
Photon APIs2/sec10/sec50/sec100/sec
getValidityProof1/sec5/sec10/sec20/sec

Retries and error handling

When your application receives a 429 Too Many Requests, 503 Service Unavailable, or transient 5xx response, wait a moment and retry — don’t retry immediately. Immediate retries pile up requests and make rate-limit recovery slower, not faster.
  • Wait about 1 second before the first retry.
  • Double the wait each time you retry, up to a maximum of 30 seconds.
  • Add a small random variation of ±25% to each wait so multiple applications don’t all retry at the same instant.
  • Give up after 5 attempts and return the error to the code that called you.

Which errors to retry

StatusRetry?Reason
400, 401, 403, 404NoClient errors — retrying will not change the outcome.
408YesRequest timeout.
409NoConflict — resolve at the caller.
422NoValidation error.
429YesRate limit exceeded — wait and retry with backoff.
500, 502YesTransient server error.
503YesService unavailable — wait and retry with backoff.
504YesGateway timeout.
Network errorYesConnection reset, DNS failure, or socket timeout.

Example

const RETRYABLE = new Set([408, 429, 500, 502, 503, 504]);

export async function callWithRetry<T>(
  request: () => Promise<Response>,
  maxAttempts = 5,
): Promise<T> {
  let delay = 1000;
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    const res = await request();
    if (res.ok) return (await res.json()) as T;

    if (!RETRYABLE.has(res.status) || attempt === maxAttempts) {
      throw new Error(`${res.status} after ${attempt} attempt(s): ${await res.text()}`);
    }

    const jitterMs = delay * (0.75 + Math.random() * 0.5);
    await new Promise((r) => setTimeout(r, jitterMs));
    delay = Math.min(delay * 2, 30_000);
  }
  throw new Error("unreachable");
}

Error response shape

All Helius APIs return a structured JSON body on error. JSON-RPC endpoints (Solana RPC, DAS, Sender, Priority Fee, ZK Compression) return the standard JSON-RPC 2.0 envelope:
{
  "jsonrpc": "2.0",
  "error": { "code": -32005, "message": "Too many requests" },
  "id": "1"
}
REST endpoints (Wallet API, Admin API) return:
{
  "error": "RATE_LIMIT_EXCEEDED",
  "code": 429,
  "details": "Too many requests. Retry after 2 seconds."
}
See Common error codes for the full list of error codes and what each one means.