Selvage Labs

Docs

Everything you need to use our endpoints. Standard JSON-RPC, so the client you already use works.

Networks

Polkadot Asset Hub

ArchiveWebSocket and HTTPSFree public endpoint
Endpoint and examples →

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-RPC POST.

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.

LimitValue
Open connections at once10
New connections or HTTPS calls20 a second, bursts to 40
Calls inside one WebSocket1,800 a minute
HTTPS request size1 MB
MethodsSafe 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 use api.at(hash) in polkadot.js;
  • use the archive_v1_* methods, such as archive_v1_storage and archive_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"]}'
→ "0x40420f00"  (1,000,000, little-endian)