Base public RPC
Nodely runs a public RPC for Base mainnet on its own nodes. No account, no keys.
Endpoints
Section titled “Endpoints”| Network | Chain ID | HTTP JSON-RPC | WebSocket |
|---|---|---|---|
| Base mainnet | 8453 (0x2105) |
https://base.nodely.dev |
wss://base.nodely.dev/ws |
- Served from two nodes in Europe (Finland and Germany) with automatic failover: a node that falls more than 30 seconds behind the chain head leaves the pool.
- Both nodes derive Base from their own Ethereum L1 node. Transactions are forwarded to the Base sequencer.
- The
pendingblock tag follows Flashblocks, so apps see new transactions about every 200 ms instead of every block. - CORS is open, so browser apps and wallets can call the endpoint directly.
GET https://base.nodely.dev/healthanswersok head <block> age <seconds>while the node is in sync.
Recent data only
Section titled “Recent data only”The nodes are pruned, not archival:
- State, blocks, receipts and logs cover the last 300,000 blocks: about 7 days at today’s 2-second blocks, about 17 hours once the Denim upgrade (5 November 2026) brings 200 ms blocks.
eth_call,eth_getBalanceand similar calls at older blocks fail. - Lookups by transaction hash (
eth_getTransactionByHash,eth_getTransactionReceipt) cover only the newest few thousand blocks. That is enough to confirm a transaction you just sent, but not for explorers or indexers: for older transactions useeth_getBlockReceiptsoreth_getLogswith the block number.
Need full history? Talk to us.
Available methods
Section titled “Available methods”- All read methods in the
eth_namespace, pluseth_sendRawTransaction. Signing, mining and account methods (eth_sign*,eth_sendTransaction,eth_accounts, …) are disabled. net_version,net_listening,net_peerCount,web3_clientVersion,web3_sha3eth_subscribeandeth_unsubscribe(newHeads,logs) on the WebSocket only.
Other namespaces (debug_*, trace_*, txpool_*, admin_*, …) return error -32601.
Connect
Section titled “Connect”curl https://base.nodely.dev \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'import { createPublicClient, http, webSocket } from "viem";import { base } from "viem/chains";
const client = createPublicClient({ chain: base, transport: http("https://base.nodely.dev") });console.log(await client.getBlockNumber());
const ws = createPublicClient({ chain: base, transport: webSocket("wss://base.nodely.dev/ws") });ws.watchBlockNumber({ onBlockNumber: (n) => console.log("new block", n) });import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("https://base.nodely.dev", 8453, { staticNetwork: true });console.log(await provider.getBlockNumber());Add a custom network (MetaMask: Settings → Networks → Add a network manually):
| Field | Value |
|---|---|
| Network name | Base |
| RPC URL | https://base.nodely.dev |
| Chain ID | 8453 |
| Currency symbol | ETH |
| Block explorer | https://basescan.org |
Limits
Section titled “Limits”Per client IP:
| Calls | Rate |
|---|---|
| Most calls | 25 per second (burst 50) |
Heavy calls: eth_getLogs, eth_call, eth_estimateGas, eth_createAccessList, eth_getBlockReceipts, eth_feeHistory, eth_simulateV1 |
5 per second (burst 10) |
eth_sendRawTransaction |
2 per second (burst 5) |
- Over the limit you get HTTP 429 and JSON-RPC error
-32005(rate limit exceeded). Back off and retry. - Batches of up to 20 calls; each call counts against the limits.
- 256 KB maximum request body, 4 WebSocket connections per IP.
eth_getLogsspans at most 2,000 blocks and returns at most 10,000 logs;eth_callgas cap 50M; responses up to 25 MB.
Need more? Talk to us about dedicated endpoints.