Ethereum

Ethereum

eth_syncing

eth_syncing tells you whether an Ethereum execution node has caught up to the head of the chain. On the ETH mainnet (chain ID 1), the canonical chain advances one block per 12-second slot, and a node that has just been spun up or restarted has to download and verify history before it can answer queries with current state. Call the method against https://ethereum.therpc.io/YOUR_API_KEY and you get one of two shapes back: a plain false once the node is fully synced and tracking the head, or a progress object while it is still catching up. That object carries startingBlock, currentBlock, and highestBlock so you can see how far behind the node still is.

Use cases

  • Confirm a freshly started Ethereum node has reached the head before load balancers route real traffic to it.
  • Drive a sync-progress bar in a node dashboard by comparing currentBlock against highestBlock.
  • Gate dApp or indexer startup so it waits for false before assuming latest reflects the true mainnet head.
  • Diagnose a stalled node: poll every few slots and watch whether currentBlock keeps climbing or sits frozen.

Parameters

This method takes no parameters. Pass an empty array [].

Response

TypeDescription
boolean | objectfalse when the node is fully synced. When syncing, returns an object with at minimum: startingBlock (hex), currentBlock (hex), highestBlock (hex). Additional fields vary by client (e.g. Geth includes snap-sync progress counters; Erigon includes syncStage/syncProgress).

Example request

curl https://ethereum.therpc.io/YOUR_API_KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_syncing",
"params": [],
"id": 1
}'

Try it live in the Ethereum playground.

Errors & troubleshooting

CodeMessageCause
-32603Internal errorNode cannot determine sync state (e.g. no peers connected).

Common pitfalls

  • A false is not always a guarantee of a fully synced node. Some clients report false during certain phases (Beam Sync on Nethermind is the classic example), so pair the check with a eth_blockNumber sanity test against the known mainnet head.
  • This only covers execution-layer sync. Since The Merge, every mainnet node also runs a paired consensus (beacon) client, and its sync state lives behind a separate Beacon API, not this method.
  • The progress object is client-specific. Geth adds snap-sync counters, Erigon exposes syncStage/syncProgress, so read extra keys defensively and never assume a field exists.

Supported networks

  • Mainnet — Chain ID: 1
  • Sepolia — Chain ID: 11155111

See also

curl https://ethereum.therpc.io/YOUR_API_KEY \
-X POST \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_syncing","params":[]}'

Ready to call this in production?

Free tier covers personal projects. Pay-as-you-go scales without a card.