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
currentBlockagainsthighestBlock. - Gate dApp or indexer startup so it waits for
falsebefore assuminglatestreflects the true mainnet head. - Diagnose a stalled node: poll every few slots and watch whether
currentBlockkeeps climbing or sits frozen.
Parameters
This method takes no parameters. Pass an empty array [].
Response
| Type | Description |
|---|---|
| boolean | object | false 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
Try it live in the Ethereum playground.
Errors & troubleshooting
| Code | Message | Cause |
|---|---|---|
-32603 | Internal error | Node cannot determine sync state (e.g. no peers connected). |
Common pitfalls
- A
falseis not always a guarantee of a fully synced node. Some clients reportfalseduring certain phases (Beam Sync on Nethermind is the classic example), so pair the check with aeth_blockNumbersanity 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