Ethereum public RPC
Nodely runs a public RPC for Ethereum mainnet on its own nodes. No account, no keys.
Endpoints
Section titled “Endpoints”| Network | Chain ID | HTTP JSON-RPC | WebSocket |
|---|---|---|---|
| Ethereum mainnet | 1 (0x1) |
https://eth.nodely.dev |
wss://eth.nodely.dev/ws |
- Served from two nodes in Europe (Finland and Germany) with automatic failover: a node that falls more than 60 seconds behind the chain head leaves the pool.
- Each node runs reth with a Lighthouse beacon node. The beacon (consensus layer) API is not public.
- Transactions sent with
eth_sendRawTransactionare broadcast from our nodes to the Ethereum network. - CORS is open, so browser apps and wallets can call the endpoint directly.
GET https://eth.nodely.dev/healthanswersok head <block> age <seconds>while the node is in sync.- The same nodes feed our Base RPC, which derives the L2 from them.
Recent data only
Section titled “Recent data only”The nodes are pruned, not archival:
- State, blocks, receipts and logs cover the last 100,800 blocks (about 14 days).
eth_call,eth_getBalanceand similar calls at older blocks fail withpruned history unavailable. - Lookups by transaction hash (
eth_getTransactionByHash,eth_getTransactionReceipt) cover only the last few hundred blocks, about an hour; older hashes returnnull. 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,newPendingTransactions) on the WebSocket only.
Other namespaces (debug_*, trace_*, txpool_*, admin_*, …) return error -32601.
Connect
Section titled “Connect”curl https://eth.nodely.dev \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'import { createPublicClient, http, webSocket } from "viem";import { mainnet } from "viem/chains";
const client = createPublicClient({ chain: mainnet, transport: http("https://eth.nodely.dev") });console.log(await client.getBlockNumber());
const ws = createPublicClient({ chain: mainnet, transport: webSocket("wss://eth.nodely.dev/ws") });ws.watchBlockNumber({ onBlockNumber: (n) => console.log("new block", n) });import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("https://eth.nodely.dev", 1, { staticNetwork: true });console.log(await provider.getBlockNumber());Wallets already know Ethereum mainnet: edit the network and add https://eth.nodely.dev as its RPC URL. For a new network entry use:
| Field | Value |
|---|---|
| Network name | Ethereum |
| RPC URL | https://eth.nodely.dev |
| Chain ID | 1 |
| Currency symbol | ETH |
| Block explorer | https://etherscan.io |
Limits
Section titled “Limits”Per client IP:
| Calls | Rate |
|---|---|
| Most calls | 12 per second (burst 25) |
Heavy calls: eth_getLogs, eth_call, eth_estimateGas, eth_createAccessList, eth_getBlockReceipts, eth_feeHistory, eth_simulateV1 |
2 per second (burst 5) |
eth_sendRawTransaction |
1 per second (burst 2) |
- 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 1,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.