Docs
Everything you need to use our endpoints. Standard JSON-RPC, so the client you already use works.
Networks
Polkadot Asset Hub
Connecting
Each network has one hostname, reachable two ways:
- WebSocket (
wss://) for subscriptions, such as new blocks, and for apps that stay connected. - HTTPS (
https://) for one-off calls, sent as a JSON-RPCPOST.
There is no API key and no sign-up for the public endpoints.
Limits
The public endpoints are shared, so each client gets a fair share. Limits apply per IP address; IPv6 addresses are grouped per /64.
| Limit | Value |
|---|---|
| Open connections at once | 10 |
| New connections or HTTPS calls | 20 a second, bursts to 40 |
| Calls inside one WebSocket | 1,800 a minute |
| HTTPS request size | 1 MB |
| Methods | Safe methods only |
A new connection or HTTPS call over the limit gets HTTP 429. Calls over the limit inside an open WebSocket are slowed down, then refused with a JSON-RPC error. Either way, back off for a second and retry; well-behaved clients rarely see it.
Safe methods cover what applications need: reading state, subscribing, and submitting transactions. Node administration methods, such as key management, are refused.
Fair use
The free endpoint is for development, wallets and apps with light or moderate traffic. For sustained heavy traffic, indexing or trading workloads, a dedicated node gives you your own capacity and limits set for your workload.
Please don't spread traffic across many addresses to get around the limits. The terms of service have the details.
Archive queries
An archive node keeps the state of every block since genesis. A pruned node keeps only the last few hundred blocks' state and answers State already discarded for anything older.
On an archive endpoint you can:
- read any storage item as it was at any block: pass the block hash to
state_getStorage, or useapi.at(hash)in polkadot.js; - use the
archive_v1_*methods, such asarchive_v1_storageandarchive_v1_hashByHeight; - rebuild history for an indexer or explorer without running your own archive node.
Two calls with curl: first the hash of block 1,000,000, then System.Number at that block.
curl -s https://asset-hub.selvagelabs.io -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"chain_getBlockHash","params":[1000000]}' # → "0xeb737eab71ea40b5cfcb79f4bdeb07c4fa8f16dee2dec7f351e34d1e7d4284bd" curl -s https://asset-hub.selvagelabs.io -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","id":2,"method":"state_getStorage","params":["0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac","0xeb737eab71ea40b5cfcb79f4bdeb07c4fa8f16dee2dec7f351e34d1e7d4284bd"]}'