Moonriver RPC with Dwellir
Production-ready Moonriver RPC endpoints, Substrate JSON-RPC coverage, and best practices for building on Moonriver (Kusama parachain 2023) with Dwellir.
Moonriver RPC
With Dwellir, you get access to our global Moonriver network which always routes your API requests to the nearest available location, ensuring low latency and the fastest speeds.
Get your API keyWhy Build on Moonriver?
Moonriver is Moonbeam’s canary network on Kusama, delivering the same Substrate foundation and EVM compatibility with faster iteration cycles. It is ideal for deploying and testing EVM and Substrate-based functionality under real economic conditions before promoting to Moonbeam.
Fast Iteration, Real Economics
- Rapid runtime upgrade cadence enables shipping features earlier than Moonbeam.
- Real MOVR token economics and on-chain governance for production-like validation.
- Shared Kusama security provides fast finality while enabling experimentation.
EVM + Substrate Interop
- Full EVM compatibility via Frontier with MetaMask, Hardhat, and Solidity tooling.
- Native Substrate interfaces for storage, blocks, and runtime APIs.
- Seamless migration path to Moonbeam after validation on Moonriver.
Quick Start with Moonriver
Connect to Moonriver production endpoints with Dwellir’s global network.
curl -sS -X POST https://api-moonriver.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots> \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","method":"chain_getBlockHash","params":[0],"id":1}'import { ApiPromise, WsProvider } from '@polkadot/api';const provider = new WsProvider('wss://api-moonriver.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>');const api = await ApiPromise.create({ provider });const hash = await api.rpc.chain.getBlockHash(0);console.log(hash.toHex());from substrateinterface import SubstrateInterfacesubstrate = SubstrateInterface(url='wss://api-moonriver.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>')block_hash = substrate.get_block_hash(block_id=0)print(block_hash)package mainimport ( "bytes" "fmt" "io" "net/http")func main() { url := "https://api-moonriver.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>" payload := []byte(`{"jsonrpc":"2.0","id":1,"method":"chain_getBlockHash","params":[0]}`) resp, err := http.Post(url, "application/json", bytes.NewBuffer(payload)) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))}Installation & Setup
Network Information
| Parameter | Value | Details |
|---|---|---|
| Genesis Hash | 0x401a1f9d…1474b | chain_getBlockHash(0) |
| Native Token | MOVR | 18 decimals |
| SS58 Prefix | 1285 | system_properties |
| Relay / Para ID | Kusama / 2023 | Parachain on Kusama |
| Runtime Spec Version | 3900 | As of 9 Oct 2025 |
| Transaction Version | 3 | state_getRuntimeVersion |
| Explorer | Moonscan | moonriver.moonscan.io |
Example Values Used in Docs
These chain-specific variables are used across Moonriver examples:
exampleEvmAddress: 0x6bEc0BCA2F15876f675f2C38958Ff986551e4db1exampleBlockHash: 0x1849c7bc2c547b315fef716c6f2fb6f5e256da60482a013286caf975d035f766exampleBlockNumberHex: 0xcd64f5explorerMainnet: https://moonriver.moonscan.ioAPI Reference
Moonriver exposes standard Substrate RPC namespaces for node telemetry, block production, storage access, and fee estimation.
Common Integration Patterns
Track new blocks (subscriptions)
const unsub = await api.rpc.chain.subscribeNewHeads((header) => {
console.log(`New #${header.number} (${header.hash})`);
});Paginate large storage scans
const page = await api.rpc.state.getKeysPaged(
api.query.system.account.keyPrefix(),
100,
'0x',
null
);
console.log('Fetched', page.length, 'System.Account keys');Estimate fees before broadcast
const ext = api.tx.balances.transferAllowDeath(dest, amount);
const info = await api.rpc.payment.queryInfo(ext.toHex());
console.log(`PartialFee: ${info.partialFee.toHuman()}`);Performance Best Practices
- Prefer WebSocket connections for subscriptions and multi-round queries.
- Cache runtime metadata and reuse a single ApiPromise instance.
- Use
state_getKeysPagedfor large scans; avoid full-chain traversals. - Exponential backoff on retries for transient
-32010/TooManyRequestserrors.
Troubleshooting
- WebSocket failure – Verify your API key and outbound TCP/443. Try HTTPS for single calls.
- Type mismatches – Refresh metadata after runtime upgrades (
api.runtimeVersion). - Invalid address – Moonriver uses SS58 prefix
1285for Substrate addresses; EVM0x…accounts are also supported in the runtime. - Extrinsic rejected – Decode with
api.registry.findMetaErrorto surface module/error.
Smoke Tests
Run these checks against production endpoints (values as of 9 Oct 2025):
# Node health
curl -s https://api-moonriver.n.dwellir.com/YOUR_API_KEY \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"system_health","params":[]}'
# Latest block header
curl -s https://api-moonriver.n.dwellir.com/YOUR_API_KEY \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"chain_getHeader","params":[]}'
# Runtime version
curl -s https://api-moonriver.n.dwellir.com/YOUR_API_KEY \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"state_getRuntimeVersion","params":[]}'Migration Guide
- Endpoints – Replace Polkadot/Moonbeam URLs with
https://api-moonriver.n.dwellir.com/YOUR_API_KEYorwss://api-moonriver.n.dwellir.com/YOUR_API_KEY. - Addresses – Use SS58 prefix
1285for Substrate-style addresses when needed; EVM0x…addresses remain valid for account state. - Runtime types – Update custom type bundles as needed and refresh metadata caches after upgrades (specVersion
3900on Oct 9, 2025). - Fees – Calibrate using
payment_queryInfo/payment_queryFeeDetailsfor MOVR-denominated fees. - XCM/Parachain – Confirm HRMP channels and destination parachain IDs for XCM; Moonriver is parachain
2023on Kusama.
Resources & Tools
eth_coinbase
Check the legacy eth_coinbase compatibility method on Moonbeam. Public endpoints may return an address, `unimplemented`, or another unsupported-method response depending on the client.
chain_getBlock
Retrieve block data by hash on Moonriver. Essential for accessing block headers and extrinsics on the Moonbeam canary network on Kusama for real-world testing of EVM dApps.

