Skip to content

Rate Limits and Call Limitations

Understanding SpeedyNodes rate limits is crucial for optimizing your application's performance and ensuring uninterrupted service. All plans include access to all 22+ blockchain networks - the difference is in the rate limits.

Rate Limits by Plan

Each SpeedyNodes plan comes with specific request rate limits (RPS = Requests Per Second):

Plan Total RPS HTTP RPS WebSocket RPS Burst
FREE 2 1 1 0
Starter 60 30 30 5
Advanced 150 75 75 5
Scale 350 175 175 5
Pro 500 250 250 5
Dedicated Unlimited Unlimited Unlimited Unlimited
Enterprise Custom Custom Custom Custom

WebSocket Connection Limits

WebSocket connections are limited per API key:

Plan Max WS Connections Handshake Limit/sec Idle Timeout
FREE 2 2 30 min
Starter 20 50 30 min
Advanced 50 140 30 min
Scale 100 250 30 min
Pro 200 400 30 min
Dedicated 1000 1000 30 min
Enterprise Custom Custom Custom

Archive Node Limits

Archive nodes count at double RPS cost to ensure stability for resource-intensive historical queries:

Plan Archive RPS Cost Example (if Total = 100 RPS)
FREE - Pro 2x (double RPS cost) Each archive request costs 2 RPS
Dedicated 1x (normal) Unlimited
Enterprise 2x (double RPS cost) Custom

What Happens When You Exceed Limits

When you exceed your plan's rate limits:

  1. HTTP 429 Response: Excess requests receive a 429 (Too Many Requests) response
  2. Retry-After Header: The response includes a Retry-After header indicating when to retry
  3. Burst Buffer: Paid plans have burst capacity that absorbs short spikes
  4. Graceful Degradation: The system queues requests briefly before rejecting them

Avoid Repeated Violations

Consistently exceeding rate limits may result in temporary IP throttling. Implement proper backoff strategies in your application.

Handling Heavy Calls

Some RPC methods are more resource-intensive than others. These "heavy calls" consume more resources:

  • eth_getBlockReceipts
  • eth_getLogs (with wide block ranges)
  • debug_traceTransaction
  • trace_transaction
  • debug_traceBlockByNumber
  • trace_block

Best Practices

To optimize performance and avoid rate limiting:

  1. Use Compression: Implement gzip compression for all requests
  2. Batch Requests: Combine multiple requests into a single JSON-RPC batch call
  3. Paginate Requests: For eth_getLogs, break large block ranges into smaller chunks
  4. Implement Caching: Cache responses for immutable blockchain data
  5. Use WebSockets for Subscriptions: For real-time data, use WebSocket subscriptions instead of polling
  6. Implement Exponential Backoff: When rate limited, wait progressively longer before retrying

Using Gzip Compression

Using gzip compression can reduce data transfer by up to 90%:

Example with curl

curl -H "Accept-Encoding: gzip" \
     -H "Content-Type: application/json" \
     -X POST https://gateway-1.speedynodes.net/http/eth-1?apikey=YOUR_API_KEY \
     --data '{"jsonrpc":"2.0","method":"eth_getBlockReceipts","params":["0x2e60d60"],"id":1}' \
     --compressed

Real-World Results

When retrieving block receipts:

  • Uncompressed size: 364,219 bytes
  • Gzipped size: 34,175 bytes
  • Bandwidth saved: ~90%

JavaScript/Node.js Example

const axios = require('axios');

async function compressedRequest() {
  const response = await axios.post(
    'https://gateway-1.speedynodes.net/http/eth-1?apikey=YOUR_API_KEY',
    {
      jsonrpc: '2.0',
      method: 'eth_getBlockReceipts',
      params: ['0x2e60d60'],
      id: 1
    },
    {
      headers: {
        'Content-Type': 'application/json',
        'Accept-Encoding': 'gzip'
      },
      decompress: true
    }
  );
  console.log(response.data);
}

Python Example

import requests

url = 'https://gateway-1.speedynodes.net/http/eth-1?apikey=YOUR_API_KEY'
headers = {
    'Content-Type': 'application/json',
    'Accept-Encoding': 'gzip'
}
payload = {
    'jsonrpc': '2.0',
    'method': 'eth_getBlockReceipts',
    'params': ['0x2e60d60'],
    'id': 1
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

Need Higher Limits?

If you consistently need higher rate limits, consider upgrading your plan. Visit the Pricing page or contact us via Telegram or Discord.