Base, Optimism, Arbitrum, Polygon, Ethereum. Standard JSON-RPC. Free tier: 100K requests/day. No sign-up, no KYC.
// Connect to any chain in seconds const provider = new JsonRpcProvider( 'https://rpc.opsalis.com/v1/base/YOUR_API_KEY' ); const block = await provider.getBlockNumber();
Standard JSON-RPC. Same URL pattern for every chain. Switch chains by changing one word.
Chain ID 8453
/v1/base/
Chain ID 10
/v1/optimism/
Chain ID 42161
/v1/arbitrum/
Chain ID 137
/v1/polygon/
Chain ID 1
/v1/ethereum/
Also accepts aliases: op,
arb,
matic,
eth,
or chain IDs like 8453
30M requests/month for $10 vs $49 at Alchemy. Same standard JSON-RPC, lower price.
Get an API key instantly. No email, no identity verification. Pay with Visa, Mastercard, or USDC when you need more.
Works with ethers.js, web3.js, viem, Hardhat, Foundry, MetaMask. Change one URL and you are done.
Start free. Upgrade when you need more. Pay with Visa, Mastercard, or USDC.
Side projects
Production apps
Unlimited scale
All plans include all 5 chains. Visa and Mastercard accepted — no crypto wallet needed.
Change one URL. Everything else stays the same.
# Get latest block number on Base curl https://rpc.opsalis.com/v1/base/rpk_YOUR_API_KEY \ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # Response: # {"jsonrpc":"2.0","result":"0x134a5b7","id":1}
import { JsonRpcProvider } from 'ethers'; const provider = new JsonRpcProvider( 'https://rpc.opsalis.com/v1/base/rpk_YOUR_API_KEY' ); const blockNumber = await provider.getBlockNumber(); console.log('Latest block:', blockNumber); const balance = await provider.getBalance( '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' ); console.log('Balance:', balance.toString());
import { Web3 } from 'web3'; const web3 = new Web3( 'https://rpc.opsalis.com/v1/optimism/rpk_YOUR_API_KEY' ); const blockNumber = await web3.eth.getBlockNumber(); console.log('Latest block:', blockNumber);
import { createPublicClient, http } from 'viem'; import { base } from 'viem/chains'; const client = createPublicClient({ chain: base, transport: http('https://rpc.opsalis.com/v1/base/rpk_YOUR_API_KEY'), }); const blockNumber = await client.getBlockNumber();
from web3 import Web3 w3 = Web3(Web3.HTTPProvider( 'https://rpc.opsalis.com/v1/polygon/rpk_YOUR_API_KEY' )) print('Block:', w3.eth.block_number) print('Balance:', w3.eth.get_balance( '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' ))
// hardhat.config.js module.exports = { networks: { base: { url: 'https://rpc.opsalis.com/v1/base/rpk_YOUR_API_KEY', chainId: 8453, }, arbitrum: { url: 'https://rpc.opsalis.com/v1/arbitrum/rpk_YOUR_API_KEY', chainId: 42161, }, }, };
# Deploy contract to Base forge create src/MyContract.sol:MyContract \ --rpc-url https://rpc.opsalis.com/v1/base/rpk_YOUR_API_KEY \ --private-key $PRIVATE_KEY # Read from Polygon cast call 0x... "balanceOf(address)(uint256)" 0x... \ --rpc-url https://rpc.opsalis.com/v1/polygon/rpk_YOUR_API_KEY
30M requests/month across all providers.
| Provider | Price | Payment | KYC |
|---|---|---|---|
| RPCaaS | $10/mo | Card or USDC | None |
| Alchemy | $49/mo | Credit card | Email + name |
| Infura | $50/mo | Credit card | Email + name |
| QuickNode | $49/mo | Credit card | Email + name |
| Ankr | $49/mo | Card + crypto |