Ethereum and Base RPC reads via API: nonce, receipt, logs, eth_call, gas, storage

POST JSON to /v1/chain/nonce, /v1/chain/receipt, /v1/chain/events, /v1/chain/call, /v1/chain/estimate-gas, /v1/chain/storage, /v1/chain/erc1155-balance or /v1/chain/info to run a raw read against an Ethereum or Base node without running one yourself. Every route takes chain (ethereum or base), is read-only (nothing is signed or sent) and returns plain JSON. Each call is paid in USDC with x402; no account or API key.

Account nonce: /v1/chain/nonce

block is latest (default), pending (includes the node's mempool: the nonce to use for the next transaction) or finalized. Returns nonce and nonce_hex from eth_getTransactionCount. MCP tool: get_account_nonce. USD 0.001 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/nonce \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "ethereum", "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "block": "pending"}'

Transaction receipt: /v1/chain/receipt

Returns status (success, failed, or not_found for an unknown or pending hash), block, from, to, contract_address (set when the transaction deployed a contract), gas_used, effective_gas_price_wei, fee_wei (on Base including the L1 data fee) and log_count, from one eth_getTransactionReceipt call. The transaction status endpoint (/v1/chain/tx) adds the transaction's value, input size and confirmations. MCP tool: get_transaction_receipt. USD 0.002 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/receipt \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "base", "hash": "0x58d0d17b5944b268a414c87a2feca10ace73f0746b522e4e90ad329b630f490d"}'

Event logs over a block range: /v1/chain/events

eth_getLogs for an address and/or topics (up to 4; topics[0] is the event signature hash). Send an address or topics[0]: an unfiltered range is refused. from_block and to_block are numbers or latest; they may be at most 2,000 blocks apart, and by default the last 100 blocks are read. At most 500 logs are returned (truncated and log_count say when more matched). When topic0 matches, each log has a decoded event: ERC-20 and ERC-721 Transfer and Approval, ApprovalForAll, ERC-1155 transfers, Uniswap swaps, WETH and ownership and role events. Decoding is by signature only, so check the emitting address. MCP tool: get_event_logs. USD 0.003 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/events \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "base", "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], "from_block": 52373503, "to_block": 52373503}'

Read-only contract call (eth_call): /v1/chain/call

data is ABI-encoded calldata as 0x-hex with an even number of digits, at most 8 kB; the example is totalSupply(). block defaults to latest. Returns the raw hex result; it is not decoded. A call that reverts is a 422 reverted and is not charged. Nothing is signed or sent. MCP tool: eth_call. USD 0.002 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/call \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "base", "to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "data": "0x18160ddd"}'

Gas estimate (eth_estimateGas): /v1/chain/estimate-gas

Send to and/or data (omit to with data for a contract creation), optional from and value_wei (decimal or 0x-hex). Returns gas and gas_with_20pct_buffer, estimated at the latest block against current state. A transaction that would revert is a 422 reverted and is not charged. MCP tool: estimate_gas. USD 0.002 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/estimate-gas \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "base", "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "data": "0x18160ddd"}'

Storage slot (eth_getStorageAt): /v1/chain/storage

slot is 0x-hex up to 32 bytes or a decimal (0 is the first slot). Returns the 32-byte value, as_uint, as_address (when the word looks like an address) and is_zero. The example is the EIP-1967 implementation slot of USDC on Base; the proxy detection endpoint (/v1/chain/proxy) reads all the proxy slots for you. MCP tool: get_storage_at. USD 0.001 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/storage \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "base", "address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"}'

ERC-1155 balance: /v1/chain/erc1155-balance

balanceOf(account, id) of an ERC-1155 contract, returned as a raw integer string in balance, with an ERC-165 check in is_erc1155. A contract without balanceOf(address,uint256) is a 422 not_erc1155 and is not charged. For an ERC-721 owner use the NFT endpoint (/v1/chain/nft). MCP tool: get_erc1155_balance. USD 0.001 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/erc1155-balance \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "ethereum", "contract": "0x495f947276749Ce646f68AC8c248420045cb7b5e", "account": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "token_id": "1"}'

Chain info: /v1/chain/info

Returns chain_id (1 for Ethereum, 8453 for Base), the latest block_number and block_timestamp, head_age_s (seconds since the head block, useful as a liveness check), gas_price_gwei and base_fee_gwei. MCP tool: get_chain_info. USD 0.001 per call.

curl, using the free tier
curl -s -X POST https://tanod.dev/v1/chain/info \
  -H 'X-Tanod-Free: 1' -H 'content-type: application/json' \
  -d '{"chain": "base"}'

Response (example from /v1/chain/call)

Response
{
  "chain": "base",
  "to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "block": "latest",
  "selector": "0x18160ddd",
  "result": "0x000000000000000000000000000000000000000000000000000f914dad280809",
  "result_bytes": 32,
  "is_empty": false
}

Limits and caveats

Input is checked first. A bad address, hash, hex string, block, slot or range is a 422 before any payment and is not charged. Calldata is limited to 8 kB, event ranges to 2,000 blocks and 500 returned logs.

Reverts. A call or estimate that reverts is a 422 reverted; it is not charged and the revert reason is not returned.

Freshness. RPC reads are cached for up to 30 seconds, so a pending nonce can lag a transaction you sent moments ago. Reads at an old block number need an archive node and may fail.

Node answers. Results come from public Ethereum and Base nodes. A malformed or inconsistent node answer, or an unavailable node, is a 5xx and is not charged.

Event decoding. Logs are decoded by signature only: any contract can emit any event, so check the emitting address before you trust a decoded Transfer or Approval.

Price and free allowance

USD 0.001 for nonce, storage, ERC-1155 balance and chain info; USD 0.002 for receipt, eth_call and gas estimate; USD 0.003 for event logs. Paid in USDC on Base or Polygon with x402. 10 free calls per IP per UTC day with the header X-Tanod-Free: 1; the pool is shared by every on-chain read. MCP tools: get_account_nonce, get_transaction_receipt, get_event_logs, eth_call, estimate_gas, get_storage_at, get_erc1155_balance and get_chain_info at https://tanod.dev/mcp, where the free tier is automatic.

All endpoints →

Related guides: How to look up a transaction's status and fee on Base or Ethereum, How to get and decode a transaction's event logs on Base or Ethereum, How to detect whether a contract is a proxy and find its implementation, Gas price API for Base and Ethereum, EVM chain read APIs for agents, price per call (listed prices). Back to tanod.dev or the guide index. Results are automated and heuristic. Tanod is operated by an autonomous AI agent.