Developer documentation

Speedy RPC is in early access. Items marked coming soon are not available yet.

1. What Speedy RPC is

Speedy RPC is an RPC gateway for Polkadot-ecosystem chains, run from Sydney, Australia, behind Cloudflare. You don't run your own node: one API key works on both HTTPS (JSON-RPC requests) and WebSocket (WSS, for subscriptions such as new blocks). Every key has published rate limits.

Marketing site https://speedyrpc.io
Portal https://app.speedyrpc.io
Gateway https://api.speedyrpc.io
Networks Polkadot, Astar, Astar EVM (mainnet), Paseo (testnet)
Nodes During early access, mainnet requests are served through established third-party node providers. Speedy RPC handles authentication and rate limits. Our own Sydney production nodes are coming soon
Getting a key Email [email protected]

What you can build

2. Networks and endpoints

2.1 How the API key is passed

Transport How to send the key Notes
HTTPS POST /rpc/<network> Header X-API-Key: <your key> (recommended) ?api_key=<key> is also accepted. Prefer the header so keys stay out of URLs and logs
WSS GET /ws/<network> Query parameter ?api_key=<your key> Browsers can't set WebSocket headers, so use the query parameter

2.2 Production endpoints (api.speedyrpc.io)

Network Type HTTPS WSS
Polkadot Mainnet (relay) https://api.speedyrpc.io/rpc/polkadot wss://api.speedyrpc.io/ws/polkadot?api_key=KEY
Astar Mainnet (Substrate) https://api.speedyrpc.io/rpc/astar wss://api.speedyrpc.io/ws/astar?api_key=KEY
Astar EVM Mainnet (Ethereum JSON-RPC, chain ID 592) https://api.speedyrpc.io/rpc/astar-evm Coming soon
Paseo Testnet https://api.speedyrpc.io/rpc/paseo wss://api.speedyrpc.io/ws/paseo?api_key=KEY

3. Getting a key

Email [email protected] with your project, the networks you need and your expected traffic. We reply with a key on the right tier. Self-serve sign-up and billing are coming soon.

Tiers and limits

Limits apply per API key and are enforced by the gateway. Going over a limit returns HTTP 429; requests are never silently dropped.

Tier HTTP requests / second Concurrent WebSockets
Explorer 25 5
Builder 100 20
Scale 300 100
Pro 800 200
Enterprise 2,000 500

Pricing will be announced when billing opens (coming soon).

4. Quick start

SPEEDY_KEY is an environment variable holding your key. Never commit keys to a repository or paste them into issues or chat.

export SPEEDY_KEY="sk_..."

4.1 curl (HTTPS JSON-RPC)

curl https://api.speedyrpc.io/rpc/polkadot \
  -H "X-API-Key: $SPEEDY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"system_chain","params":[]}'
# -> {"jsonrpc":"2.0","id":1,"result":"Polkadot"}

Astar EVM:

curl https://api.speedyrpc.io/rpc/astar-evm \
  -H "X-API-Key: $SPEEDY_KEY" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
# -> "result":"0x250"  (592)

4.2 polkadot.js (WSS)

import { ApiPromise, WsProvider } from '@polkadot/api';

const url = `wss://api.speedyrpc.io/ws/polkadot?api_key=${process.env.SPEEDY_KEY}`;
const api = await ApiPromise.create({ provider: new WsProvider(url) });

console.log('Chain:', (await api.rpc.system.chain()).toString());
const unsub = await api.rpc.chain.subscribeNewHeads((h) => {
  console.log('New block #', h.number.toNumber());
});

4.3 PAPI (polkadot-api)

import { createClient } from 'polkadot-api';
import { getWsProvider } from 'polkadot-api/ws-provider/node'; // path may differ by PAPI version

const client = createClient(
  getWsProvider(`wss://api.speedyrpc.io/ws/polkadot?api_key=${process.env.SPEEDY_KEY}`)
);

const spec = await client.getChainSpecData();
console.log('Chain:', spec.name);
client.finalizedBlock$.subscribe((b) => console.log('Finalized #', b.number));

For typed calls, generate descriptors with npx papi add against the same URL.

4.4 ethers (v6): Astar EVM

import { ethers } from 'ethers';

const req = new ethers.FetchRequest('https://api.speedyrpc.io/rpc/astar-evm');
req.setHeader('X-API-Key', process.env.SPEEDY_KEY);
const provider = new ethers.JsonRpcProvider(req, 592, { staticNetwork: true });

console.log(await provider.getBlockNumber());

Foundry:

cast chain-id --rpc-url https://api.speedyrpc.io/rpc/astar-evm --rpc-headers "X-API-Key: $SPEEDY_KEY"
# -> 592

5. Errors

HTTP status Body Meaning / what to do
401 unauthorized Key missing, wrong, revoked or rotated. Check the header name (X-API-Key) or the api_key WS parameter
404 unknown chain The network id in the path is not offered (see Section 2)
429 rate limit exceeded: N requests/sec (tier <tier> allows <limit>) Over your per-second limit. Back off and retry after about 1 s, or upgrade your tier
429 (WS handshake) n/a Too many concurrent WebSockets for your tier. Close idle connections
400 e.g. parse error, or WebSocket not supported for this network Malformed request, or WSS on an HTTP-only network (Astar EVM)
502 upstream error The node provider failed. Retry with backoff; contact support if it persists
500 proxy request failed Internal gateway error. Retry; contact support if it persists
200 + JSON-RPC error From the node Normal JSON-RPC errors (bad method, bad params) are passed through unchanged

6. Support

7. Coretime (coming soon)

A Coretime secondary marketplace (trading Polkadot coretime regions after the primary sale) is currently running on testnet only. It is not available on production yet; mainnet availability is coming soon.