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 support@speedyrpc.io |
What you can build
- Wallets, explorers and dashboards that read balances, blocks and storage over HTTPS, and follow new blocks over WSS.
- dApps and back ends on Polkadot and Astar with polkadot.js or PAPI (Substrate JSON-RPC).
- EVM apps on Astar (chain ID 592) with ethers, viem or Foundry
cast.
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 |
- Content type:
application/json, JSON-RPC 2.0 body. - Keys start with
sk_. Keys are stored hashed and shown once when issued, so save yours somewhere safe. - Health check (no key needed):
GET https://api.speedyrpc.io/healthzreturnsok.
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 |
app.speedyrpc.ioserves the portal; apps should useapi.speedyrpc.io.- Coming soon: Polkadot Asset Hub and more parachains, archive (historical-state) access, Astar EVM over WSS, browser CORS policy, SLA and status page.
3. Getting a key
Email support@speedyrpc.io 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
- Email: support@speedyrpc.io (key requests, limits, new networks, problems).
- Include: network id, approximate time (with time zone), HTTP status and response body, and only your key prefix (never the full key).
- Status page and published support hours: coming soon.
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.