# Etherscan

> Read blockchain data through Etherscan's official API: native and token balances, full transaction and transfer history, internal transactions, event logs, verified contract source and ABIs, gas prices and network statistics. One API key reaches Ethereum and 60+ other EVM chains - Base, Arbitrum, Optimism, Polygon, BNB Chain and the rest - picked per step from a dropdown. Also reaches a node directly for blocks, receipts, read-only contract calls and gas estimates. Every action works on Etherscan's free plan.

App · Cryptocurrency · 51 actions. Web page: https://docs.lodol.com/docs/integrations/etherscan

## Actions

### Call a contract (read-only)

Read a contract without sending a transaction and without paying gas. The call data is a 4-byte method id followed by its ABI-encoded arguments; the answer comes back as raw encoded bytes, which you decode against the contract's ABI.

**Inputs**

- Contract address (`to_address`, text, required): The contract to call.
- Call data (`data`, text): The ABI-encoded call: the method id then its encoded arguments, as hex.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block number (`block_number`, number): Run the call against this block. Leave blank for the latest. At least 0.
- Block (`block_tag`, text): Which block to read the state at. Defaults to the latest block. One of: `latest` (Latest block), `earliest` (Earliest block), `pending` (Pending block). Default: `latest`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `result_hex` (text): The raw ABI-encoded return value.
- `result_number` (number): The same value read as a number, for the common case where the call returns a single uint.
- `tag` (text): The block it was called against.
- `to_address` (text): The contract called.

**Example output**

```json
{
  "chain_id": "1",
  "result_hex": "0x00000000000000000000000000000000000000000000000000601d8888141c00",
  "result_number": 27054070000000000,
  "tag": "latest",
  "to_address": "0xaeef46db4855e25702f8237e8f403fddcaf931c0"
}
```

### Check a transaction's receipt status

Check whether a transaction succeeded, from the status flag on its receipt. Post-Byzantium transactions only - older ones have no status, and 'Check whether a transaction reverted' answers for those.

**Inputs**

- Transaction hash (`transaction_hash`, text, required): The 66-character transaction hash, starting with 0x.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `status` (text): The raw status flag: 1 succeeded, 0 failed.
- `succeeded` (true/false): Whether it succeeded.
- `transaction_hash` (text): A 66-character hash, lowercased.

**Example output**

```json
{
  "chain_id": "1",
  "status": "1",
  "succeeded": true,
  "transaction_hash": "0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76"
}
```

### Check whether a transaction reverted

Check whether a transaction's contract call reverted, and read the reason when it did ("Out of gas", "Bad jump destination"). Works on any transaction, including ones from before receipts carried a status.

**Inputs**

- Transaction hash (`transaction_hash`, text, required): The 66-character transaction hash, starting with 0x.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `error_description` (text): Why it reverted, when it did.
- `succeeded` (true/false): Whether the call succeeded.
- `transaction_hash` (text): A 66-character hash, lowercased.

**Example output**

```json
{
  "chain_id": "1",
  "error_description": "Bad jump destination",
  "succeeded": false,
  "transaction_hash": "0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a"
}
```

### Count a block's transactions

Count the transactions in a block, read straight from a node. Leave the block number blank for the latest block.

**Inputs**

- Block number (`block_number`, number): The block to count. Leave blank to use the Block field below. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block (`block_tag`, text): Which block to read the state at. Defaults to the latest block. One of: `latest` (Latest block), `earliest` (Earliest block), `pending` (Pending block). Default: `latest`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `tag` (text): The block tag actually asked for.
- `transaction_count` (number): How many transactions it holds.

**Example output**

```json
{
  "chain_id": "1",
  "tag": "0x10fb78",
  "transaction_count": 3
}
```

### Count a block's transactions by kind

Count what happened in one block, broken down by kind: normal transactions, internal transactions, and ERC-20, ERC-721 and ERC-1155 transfers.

**Inputs**

- Block number (`block_number`, number, required): The block to look at, as an ordinary number. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `block_number` (number): The block asked about.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `erc1155_transfer_count` (number): ERC-1155 transfers.
- `erc20_transfer_count` (number): ERC-20 transfers.
- `erc721_transfer_count` (number): ERC-721 transfers.
- `internal_transaction_count` (number): Internal transactions.
- `transaction_count` (number): Normal transactions in the block.

**Example output**

```json
{
  "block_number": 24884529,
  "chain_id": "1",
  "erc1155_transfer_count": 0,
  "erc20_transfer_count": 103,
  "erc721_transfer_count": 1,
  "internal_transaction_count": 55,
  "transaction_count": 87
}
```

### Estimate confirmation time for a gas price

Estimate how long a transaction offering a given gas price would wait before it confirms.

**Inputs**

- Gas price (wei) (`gas_price_wei`, number, required): The gas price to estimate for, in wei. 2000000000 is 2 gwei. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `estimated_minutes` (number): The same estimate in minutes.
- `estimated_seconds` (number): Estimated seconds to confirmation.
- `gas_price_gwei` (text): The same price in gwei.
- `gas_price_wei` (number): The gas price asked about, in wei.

**Example output**

```json
{
  "chain_id": "1",
  "estimated_minutes": 0.75,
  "estimated_seconds": 45,
  "gas_price_gwei": "2",
  "gas_price_wei": 2000000000
}
```

### Estimate gas for a transaction

Estimate the gas a transaction would need, without sending it - the way to size a gas limit, or to find out that a call would revert before paying for it.

**Inputs**

- To address (`to_address`, text): The address the transaction would be sent to.
- Call data (`data`, text): The ABI-encoded call data the transaction would carry, as hex.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Value (wei) (`value_wei`, number): How much native coin the transaction would send, in wei. At least 0.
- Gas price (wei) (`gas_price_wei`, number): The gas price to estimate against, in wei. At least 0.
- Gas limit (`gas_limit`, number): An upper bound for the estimate. At least 0.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `gas_estimate` (number): The gas the transaction would need.
- `gas_estimate_hex` (text): The same figure as the node returned it.

**Example output**

```json
{
  "chain_id": "1",
  "gas_estimate": 26284,
  "gas_estimate_hex": "0x66ac"
}
```

### Find ERC-1155 transfers between addresses

Find the ERC-1155 transfers that went from one address to another, optionally for one contract only.

**Inputs**

- Token contract address (`contract_address`, text): Only include transfers of this token. Give a wallet, a token contract, or both.
- Sender address (`from_address`, text): Only include transfers sent by this address. Give a sender, a recipient, or both.
- Recipient address (`to_address`, text): Only include transfers received by this address. Give a sender, a recipient, or both.
- Match sender and recipient (`address_operator`, text): How to combine the sender and recipient when both are given. Defaults to requiring both. One of: `and` (Both addresses must match), `or` (Either address can match). Default: `and`.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to search the whole chain from its first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to search up to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transfers` (list): The transfers that matched.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transfers": [
    {
      "block_hash": "0xa5da536dfbe8125eb146114e2ee0d0bdef2b20483aacbf30fed6b60f092059e6",
      "block_number": 13472395,
      "confirmations": 9995266,
      "contract_address": "0x76be3b62873462d2142405439777e971754e8e77",
      "cumulative_gas_used": 11739203,
      "from_address": "0x1e63326a84d2fa207bdfa856da9278a93deba418",
      "function_name": null,
      "gas": 140000,
      "gas_price": 52898577246,
      "gas_price_gwei": "52.898577246",
      "gas_used": 105030,
      "hash": "0x643b15f3ffaad5d38e33e5872b4ebaa7a643eda8b50ffd5331f682934ee65d4d",
      "method_id": "0x3e6b214b",
      "nonce": 41,
      "quantity": 1,
      "timestamp": 1634973285,
      "timestamp_iso": "2021-10-23T07:14:45+00:00",
      "to_address": "0x83f564d180b58ad9a02a449105568189ee7de8cb",
      "token_id": "10371",
      "token_name": "parallel",
      "token_symbol": "LL",
      "transaction_index": 100
    }
  ]
}
```

### Find ERC-20 transfers between addresses

Find the ERC-20 transfers that went from one address to another, optionally for one token only.

**Inputs**

- Token contract address (`contract_address`, text): Only include transfers of this token. Give a wallet, a token contract, or both.
- Sender address (`from_address`, text): Only include transfers sent by this address. Give a sender, a recipient, or both.
- Recipient address (`to_address`, text): Only include transfers received by this address. Give a sender, a recipient, or both.
- Match sender and recipient (`address_operator`, text): How to combine the sender and recipient when both are given. Defaults to requiring both. One of: `and` (Both addresses must match), `or` (Either address can match). Default: `and`.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to search the whole chain from its first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to search up to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transfers` (list): The transfers that matched.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transfers": [
    {
      "block_hash": "0x022c5e6a3d2487a8ccf8946a2ffb74938bf8e5c8a3f6d91b41c56378a96b5c37",
      "block_number": 4730207,
      "confirmations": 18737452,
      "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",
      "cumulative_gas_used": 2523379,
      "from_address": "0x642ae78fafbb8032da552d619ad43f1d81e4dd7c",
      "function_name": "redeem()",
      "gas": 940000,
      "gas_price": 32010000000,
      "gas_price_gwei": "32.01",
      "gas_used": 77759,
      "hash": "0xe8c208398bd5ae8e4c237658580db56a2a94dfa0ca382c99b776fa6e7d31d5b4",
      "method_id": "0xbe040fb0",
      "nonce": 406,
      "timestamp": 1513240363,
      "timestamp_iso": "2017-12-14T08:32:43+00:00",
      "to_address": "0x4e83362442b8d1bec281594cea3050c8eb01311c",
      "token_decimals": 18,
      "token_name": "Maker",
      "token_symbol": "MKR",
      "transaction_index": 81,
      "value": 5901522149285533025181,
      "value_units": "5901.522149285533025181"
    }
  ]
}
```

### Find ERC-721 (NFT) transfers between addresses

Find the NFT transfers that went from one address to another, optionally within one collection.

**Inputs**

- Token contract address (`contract_address`, text): Only include transfers of this token. Give a wallet, a token contract, or both.
- Sender address (`from_address`, text): Only include transfers sent by this address. Give a sender, a recipient, or both.
- Recipient address (`to_address`, text): Only include transfers received by this address. Give a sender, a recipient, or both.
- Match sender and recipient (`address_operator`, text): How to combine the sender and recipient when both are given. Defaults to requiring both. One of: `and` (Both addresses must match), `or` (Either address can match). Default: `and`.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to search the whole chain from its first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to search up to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transfers` (list): The transfers that matched.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transfers": [
    {
      "block_hash": "0x4be19c278bfaead5cb0bc9476fa632e2447f6e6259e0303af210302d22779a24",
      "block_number": 4708120,
      "confirmations": 18759540,
      "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d",
      "cumulative_gas_used": 4880352,
      "from_address": "0xb1690c08e213a35ed9bab7b318de14420fb57d8c",
      "function_name": "bid(uint256 _tokenId)",
      "gas": 158820,
      "gas_price": 40000000000,
      "gas_price_gwei": "40",
      "gas_used": 60508,
      "hash": "0x031e6968a8de362e4328d60dcc7f72f0d6fc84284c452f63176632177146de66",
      "method_id": "0x454a2ab3",
      "nonce": 0,
      "timestamp": 1512907118,
      "timestamp_iso": "2017-12-10T11:58:38+00:00",
      "to_address": "0x6975be450864c02b4613023c2152ee0743572325",
      "token_decimals": 0,
      "token_id": "202106",
      "token_name": "CryptoKitties",
      "token_symbol": "CK",
      "transaction_index": 81
    }
  ]
}
```

### Find internal transactions between addresses

Find the internal transactions that moved value from one address to another. Give a sender, a recipient, or both.

**Inputs**

- Sender address (`from_address`, text): Only include transfers sent by this address. Give a sender, a recipient, or both.
- Recipient address (`to_address`, text): Only include transfers received by this address. Give a sender, a recipient, or both.
- Match sender and recipient (`address_operator`, text): How to combine the sender and recipient when both are given. Defaults to requiring both. One of: `and` (Both addresses must match), `or` (Either address can match). Default: `and`.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to search the whole chain from its first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to search up to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `internal_transactions` (list): The internal transactions that matched the filter.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "internal_transactions": [
    {
      "block_number": 13481773,
      "contract_address": null,
      "error_code": null,
      "from_address": "0x3909336de913344701c6f096502d26208210b39f",
      "gas": 101300,
      "gas_used": 13898,
      "hash": "0x8b440f5ec0e986589517b131c5b75e921f2768b9912f028d2cdb009d759036ab",
      "input_data": null,
      "succeeded": true,
      "timestamp": 1635100060,
      "timestamp_iso": "2021-10-24T18:27:40+00:00",
      "to_address": "0xff62dfadca3b5643d0b283571fe154d886580c0c",
      "trace_id": "3",
      "type": "call",
      "value": 1159078546481168231,
      "value_units": "1.159078546481168231"
    }
  ]
}
```

### Find transactions between addresses

Find the transactions that went from one address to another - the direct answer to 'did this wallet ever pay that one?'. Give a sender, a recipient, or both.

**Inputs**

- Sender address (`from_address`, text): Only include transfers sent by this address. Give a sender, a recipient, or both.
- Recipient address (`to_address`, text): Only include transfers received by this address. Give a sender, a recipient, or both.
- Match sender and recipient (`address_operator`, text): How to combine the sender and recipient when both are given. Defaults to requiring both. One of: `and` (Both addresses must match), `or` (Either address can match). Default: `and`.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to search the whole chain from its first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to search up to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transactions` (list): The transactions that matched the filter.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transactions": [
    {
      "block_hash": "0xf5646226f819fbdd6b2f1cb99de6e5d17da3d876ec166e69f4e9736c8ebf7ab4",
      "block_number": 23467053,
      "confirmations": 589,
      "contract_address": null,
      "cumulative_gas_used": 22498564,
      "error_description": null,
      "from_address": "0x2449ecef5012f0a0e153b278ef4fcc9625bc4c78",
      "function_name": "delegate(address to)",
      "gas": 73271,
      "gas_price": 238744402,
      "gas_price_gwei": "0.238744402",
      "gas_used": 48847,
      "hash": "0xf9db905d77704596d3600816bc70201586cfeec13bcf576320e2f38d6ca851a0",
      "input_data": "0x5c19a95c0000000000000000000000002449ecef5012f0a0e153b278ef4fcc9625bc4c78",
      "method_id": "0x5c19a95c",
      "nonce": 8,
      "succeeded": true,
      "timestamp": 1759129619,
      "timestamp_iso": "2025-09-29T07:06:59+00:00",
      "to_address": "0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc",
      "transaction_fee": 11661947804494,
      "transaction_fee_units": "0.000011661947804494",
      "transaction_index": 184,
      "value": 0,
      "value_units": "0"
    }
  ]
}
```

### Get a block

Get a block's header straight from a node, optionally with every transaction in it. Leave the block number blank for the latest block.

**Inputs**

- Block number (`block_number`, number): The block to fetch. Leave blank to use the Block field below. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block (`block_tag`, text): Which block to read the state at. Defaults to the latest block. One of: `latest` (Latest block), `earliest` (Earliest block), `pending` (Pending block). Default: `latest`.
- Include full transactions (`include_transactions`, true/false): Return every transaction in the block rather than just their hashes. Much larger, so off by default. Default: `false`.

**Outputs**

- `block` (object): The block, with the node's own hex fields kept alongside the converted ones.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `tag` (text): The block tag actually asked for.

**Example output**

```json
{
  "block": {
    "base_fee_per_gas": null,
    "gas_limit": 3141592,
    "gas_used": 21000,
    "hash": "0x7eb7c23a5ac2f2d70aa1ba4e5c56d89de5ac993590e5f6e79c394e290d998ba8",
    "miner": "0xf927a40c8b7f6e07c5af7fa2155b4864a4112b13",
    "number": 68943,
    "parentHash": "0xf8d01370e6e274f8188954fbee435b40c35b2ad3d4ab671f6d086cd559e48f04",
    "size": 629,
    "timestamp": 1438271100,
    "timestamp_iso": "2015-07-30T15:45:00+00:00",
    "transaction_count": 1,
    "transactions": [
      "0xa5c8ba0ad2bb26e0e5a2d1c9a5a1a2ba0e7a02f1cb6d5b1e5b3b5cf0f0f0f0f0"
    ]
  },
  "chain_id": "1",
  "tag": "0x10d4f"
}
```

### Get a transaction

Get one transaction's full details by its hash, straight from a node: sender, recipient, value, gas, call data and signature.

**Inputs**

- Transaction hash (`transaction_hash`, text, required): The 66-character transaction hash, starting with 0x.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `transaction` (object): The transaction. Null when the hash is unknown to the node.
- `transaction_hash` (text): A 66-character hash, lowercased.

**Example output**

```json
{
  "chain_id": "1",
  "transaction": {
    "block_number": 13575200,
    "chain_id": 1,
    "from": "0x00192fb10df37c9fb26829eb2cc623cd1bf599e8",
    "gas": 21000,
    "gas_price_wei": 111578610505,
    "gas_price_wei_gwei": "111.578610505",
    "hash": "0xbc78ab8a9e9a0bca7d0321a27b2c03addeae08ba81ea98b03cd3dd237eabed44",
    "input": "0x",
    "nonce": 3389341,
    "to": "0xc67f4e626ee4d3f272c2fb31bad60761ab55ed9f",
    "transaction_index": 91,
    "value_ether": "0.007175",
    "value_wei": 7175000000000000
  },
  "transaction_hash": "0xbc78ab8a9e9a0bca7d0321a27b2c03addeae08ba81ea98b03cd3dd237eabed44"
}
```

### Get a transaction by its position in a block

Get one transaction by which block it is in and where in that block it sits - the way to walk a block's transactions without knowing their hashes.

**Inputs**

- Block number (`block_number`, number, required): The block to look at, as an ordinary number. At least 0.
- Position in block (`transaction_index`, number, required): Which transaction within the block, counting from 0. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `block_number` (number): The block asked about.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `transaction` (object): The transaction. Null when the block has none at that position.
- `transaction_index` (number): The position asked about.

**Example output**

```json
{
  "block_number": 12989533,
  "chain_id": "1",
  "transaction": {
    "block_number": 12989533,
    "chain_id": 1,
    "from": "0xd1af036d589b6ebfbaa184b339a30d32ef611708",
    "gas": 70000,
    "gas_price_wei": 24560622503,
    "gas_price_wei_gwei": "24.560622503",
    "hash": "0xc7ef51f0bfe85eefbb1d4d88f5a39e82fbfc94987d8cbcb515f74d80b6e44902",
    "input": "0x2d2da806",
    "nonce": 0,
    "to": "0xabea9132b05a70803a4e85094fd0e1800777fbef",
    "transaction_index": 282,
    "value_ether": "0.0246",
    "value_wei": 24600000000000000
  },
  "transaction_index": 282
}
```

### Get a transaction receipt

Get a transaction's receipt: whether it succeeded, the gas it used, the price it actually paid, and every event log it emitted.

**Inputs**

- Transaction hash (`transaction_hash`, text, required): The 66-character transaction hash, starting with 0x.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `receipt` (object): The receipt. Null while the transaction is still pending.
- `transaction_hash` (text): A 66-character hash, lowercased.

**Example output**

```json
{
  "chain_id": "1",
  "receipt": {
    "block_number": 13575207,
    "contractAddress": null,
    "cumulative_gas_used": 15427541,
    "effective_gas_price_wei": 114290000934,
    "effective_gas_price_wei_gwei": "114.290000934",
    "from": "0x292f04a44506c2fd49bac032e1ca148c35a478c8",
    "gas_used": 46109,
    "log_count": 1,
    "logs": [
      {
        "address": "0xdac17f958d2ee523a2206206994597c13d831ec7"
      }
    ],
    "succeeded": true,
    "to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
    "transaction_index": 290
  },
  "transaction_hash": "0xadb8aec59e80db99811ac4a0235efa3e45da32928bcff557998552250fa672eb"
}
```

### Get an address's transaction count (nonce)

Get how many transactions an address has sent, which is also the nonce its next transaction will use.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block (`block_tag`, text): Which block to read the state at. Defaults to the latest block. One of: `latest` (Latest block), `earliest` (Earliest block), `pending` (Pending block). Default: `latest`.

**Outputs**

- `address` (text): A 42-character address, lowercased.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `next_nonce` (number): The nonce its next transaction will use.
- `tag` (text): The block the count was read at.
- `transaction_count` (number): How many transactions it has sent.

**Example output**

```json
{
  "address": "0x2910543af39aba0cd09dbb2d50200b3e800a63d2",
  "chain_id": "1",
  "next_nonce": 115,
  "tag": "latest",
  "transaction_count": 115
}
```

### Get an uncle block

Get one uncle block by its position within a block. Proof-of-work history only.

**Inputs**

- Block number (`block_number`, number, required): The block to look at, as an ordinary number. At least 0.
- Uncle position (`uncle_index`, number, required): Which uncle within the block, counting from 0. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `block_number` (number): The block asked about.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `uncle` (object): The uncle block. Null when the block had no uncle there.
- `uncle_index` (number): The uncle's position in it.

**Example output**

```json
{
  "block_number": 12989556,
  "chain_id": "1",
  "uncle": {
    "gas_limit": 30096282,
    "gas_used": 11833825,
    "hash": "0x1da88e3581315d009f1cb600bf06f509cd27a68cb3d6437bda8698d04089f14a",
    "miner": "0x1ad91ee08f21be3de0ba2ba6918e714da6b45836",
    "number": 12989556,
    "size": 548,
    "timestamp": 1628501274,
    "timestamp_iso": "2021-08-09T09:27:54+00:00"
  },
  "uncle_index": 0
}
```

### Get block number by date and time

Find the block produced at a given moment - the bridge between a date and the block numbers the historical balance and block range actions take. Pick the date and time and this converts it for you.

**Inputs**

- Date and time (`timestamp`, date and time, required): The moment to find the block for.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Which side (`closest`, text): Whether to take the last block before that moment or the first one after it. One of: `before` (The last block at or before that moment), `after` (The first block at or after that moment). Default: `before`.

**Outputs**

- `block_number` (number): The block at that moment.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `closest` (text): Which side was taken: before or after.
- `timestamp` (number): The moment asked about, in unix seconds.
- `timestamp_iso` (text): The moment asked about, as an ISO 8601 UTC timestamp.

**Example output**

```json
{
  "block_number": 9251482,
  "chain_id": "1",
  "closest": "before",
  "timestamp": 1578638524,
  "timestamp_iso": "2020-01-10T06:42:04+00:00"
}
```

### Get block reward

Get what a block paid: the reward, who earned it, and any uncle rewards it included.

**Inputs**

- Block number (`block_number`, number, required): The block to look at, as an ordinary number. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `block_number` (number): The block asked about.
- `block_reward` (number): What the block paid its producer, in wei (the exact on-chain integer).
- `block_reward_units` (text): What the block paid its producer, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `miner_address` (text): Who produced the block.
- `timestamp` (number): When the block was produced, in unix seconds.
- `timestamp_iso` (text): When the block was produced, as an ISO 8601 UTC timestamp.
- `uncle_inclusion_reward` (number): The extra paid for including uncles, in wei (the exact on-chain integer).
- `uncle_inclusion_reward_units` (text): The extra paid for including uncles, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `uncles` (list): The uncle blocks this block included, if any.

**Example output**

```json
{
  "block_number": 2165403,
  "block_reward": 5314181600000000000,
  "block_reward_units": "5.3141816",
  "chain_id": "1",
  "miner_address": "0x13a06d3dfe21e0db5c016c03ea7d2509f7f8d1e3",
  "timestamp": 1472533979,
  "timestamp_iso": "2016-08-30T04:32:59+00:00",
  "uncle_inclusion_reward": 312500000000000000,
  "uncle_inclusion_reward_units": "0.3125",
  "uncles": [
    {
      "block_reward": 3750000000000000000,
      "block_reward_units": "3.75",
      "miner_address": "0xbcdfc35b86bedf72f0cda046a3c16829a2ef41d1",
      "position": 0
    }
  ]
}
```

### Get chain size over time

Get how much disk the chain occupied on each day of a range. The answer depends on which node software you would run and whether it keeps full history, so both are part of the question.

**Inputs**

- Start date (`start_date`, date, required): The first day to include.
- End date (`end_date`, date, required): The last day to include.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Node client (`client_type`, text): Which node software the size is measured for. One of: `geth`, `parity`. Default: `geth`.
- Sync mode (`sync_mode`, text): A pruned node, or an archive node that keeps every historical state. One of: `default` (Default (pruned) node), `archive` (Archive node). Default: `default`.
- Order (`sort`, text): Which end of the range to return first. Defaults to oldest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `asc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `days` (list): One entry per day in the range.
- `end_date` (text): The last day asked for.
- `start_date` (text): The first day asked for.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "days": [
    {
      "block_number": 7156164,
      "client_type": "Geth",
      "date": "2019-02-01",
      "size_bytes": 184726421279,
      "size_gb": 184.726,
      "sync_mode": "Default"
    }
  ],
  "end_date": "2019-02-01",
  "start_date": "2019-02-01"
}
```

### Get contract ABI

Get a verified contract's ABI, parsed into a list you can read plus the raw JSON string a web3 library expects, with its function and event names pulled out. Only works for contracts whose source is published on Etherscan.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `abi` (list): The parsed ABI.
- `abi_json` (text): The ABI as the JSON string web3 libraries take.
- `address` (text): A 42-character address, lowercased.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `event_names` (list): Every event the contract emits.
- `function_names` (list): Every function the contract exposes.

**Example output**

```json
{
  "abi": [
    {
      "name": "transfer",
      "type": "function"
    }
  ],
  "abi_json": "[{\"name\":\"transfer\",\"type\":\"function\"}]",
  "address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
  "chain_id": "1",
  "event_names": [
    "Transfer"
  ],
  "function_names": [
    "transfer"
  ]
}
```

### Get contract deployers

Find who deployed each of up to five contracts, in which transaction and when, plus the factory that created it if one did. The starting point for auditing a contract's provenance.

**Inputs**

- Contract addresses (`contract_addresses`, list, required): The contracts to look up, up to 5 of them.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `contracts` (list): One entry per contract asked about.
- `count` (number): How many records this step returned.

**Example output**

```json
{
  "chain_id": "1",
  "contracts": [
    {
      "block_number": 10720863,
      "contract_address": "0xcbdcd3815b5f975e1a2c944a9b2cd1c985a1cb7f",
      "creation_bytecode": "0x602d3d8160093d39f3363d3d373d3d3d363d73",
      "creator_address": "0x3d080421c9dd5fb387d6e3124f7e1c241ade9568",
      "factory_address": null,
      "timestamp": 1598242563,
      "timestamp_iso": "2020-08-24T04:16:03+00:00",
      "transaction_hash": "0xdce495a9261c4a2a5d4e879cfb55c060b4616a846d3425c441a9e31aa34c956f"
    }
  ],
  "count": 1
}
```

### Get contract source code

Get a verified contract's published source code along with the compiler version, optimizer settings, licence, and - when it is a proxy - the implementation it points at. is_verified is false rather than an error when the source was never published.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `address` (text): A 42-character address, lowercased.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `contract` (object): The contract. Null when the source was never published.
- `is_verified` (true/false): Whether the source is published on Etherscan.

**Example output**

```json
{
  "address": "0xcbdcd3815b5f975e1a2c944a9b2cd1c985a1cb7f",
  "chain_id": "1",
  "contract": {
    "abi_json": "[{\"name\":\"enterValue\",\"type\":\"function\"}]",
    "compiler_type": "solc",
    "compiler_version": "v0.4.26+commit.4563c3fc",
    "constructor_arguments": null,
    "evm_version": "Default",
    "file_name": null,
    "implementation_address": null,
    "is_proxy": false,
    "library": null,
    "license_type": "None",
    "name": "Test12345",
    "optimization_runs": 200,
    "optimization_used": true,
    "similar_match_address": "0x60810f4d8a618edb533a168e790ab6c09b0e7707",
    "source_code": "pragma solidity 0.4.26;\n\ncontract Test12345 {}",
    "swarm_source": "bzzr://f6b932198e10e83a6c872406a4252cf5eea48f37"
  },
  "is_verified": true
}
```

### Get countdown to a future block

Estimate how long until a block that has not happened yet is produced - for counting down to a launch or an unlock. Only answers for a future block.

**Inputs**

- Block number (`block_number`, number, required): A block that has not been produced yet. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `countdown_block` (number): The block asked about.
- `current_block` (number): The chain's latest block.
- `estimated_minutes` (number): The same estimate in minutes.
- `estimated_seconds` (number): Estimated seconds until then.
- `remaining_blocks` (number): How many blocks are still to come.

**Example output**

```json
{
  "chain_id": "1",
  "countdown_block": 25000000,
  "current_block": 24884529,
  "estimated_minutes": 23094.2,
  "estimated_seconds": 1385652.0,
  "remaining_blocks": 115471
}
```

### Get event logs

Read the events a contract emitted over a range of blocks. Filter by contract address, by topics, or by both: topic 0 is the event signature hash (which event), and topics 1-3 are its indexed arguments (which sender, which token id). This one action covers all three of Etherscan's log queries.

**Inputs**

- From block (`from_block`, number, required): The first block to search. At least 0.
- To block (`to_block`, number, required): The last block to search. At least 0.
- Contract address (`address`, text): Only include logs from this contract. Give a contract, at least one topic, or both.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Topic 0 (event signature) (`topic0`, text): The keccak hash of the event signature - which event to match.
- Topic 1 (`topic1`, text): The event's first indexed argument, as a 32-byte value.
- Topic 2 (`topic2`, text): The event's second indexed argument, as a 32-byte value.
- Topic 3 (`topic3`, text): The event's third indexed argument, as a 32-byte value.
- Combine topics with (`topic_operator`, text): How to combine the topics you gave. Defaults to requiring all of them. One of: `and` (The log must carry every topic given), `or` (The log may carry any of the topics given). Default: `and`.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `from_block` (number): The first block searched.
- `logs` (list): The matching event logs.
- `to_block` (number): The last block searched.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "from_block": 12878100,
  "logs": [
    {
      "address": "0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
      "block_hash": "0x837e109ab8b1b40ec7d1032bff82397325d85e719b97d900fa0d9aa9745b2c27",
      "block_number": 12878196,
      "data": "0x",
      "event_signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
      "gas_price": 200000000000,
      "gas_price_gwei": "200",
      "gas_used": 2388485,
      "log_index": 0,
      "timestamp": 1626984022,
      "timestamp_iso": "2021-07-22T20:00:22+00:00",
      "topics": [
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
        "0x0000000000000000000000000000000000000000000000000000000000000000",
        "0x000000000000000000000000c45a4b3b698f21f88687548e7f5a80df8b99d93d",
        "0x00000000000000000000000000000000000000000000000000000000000000b5"
      ],
      "transaction_hash": "0x4ffd22d986913d33927a392fe4319bcd2b62f3afe1c15a2c59f77fc2cc4c20a9",
      "transaction_index": 0
    }
  ],
  "to_block": 12878300
}
```

### Get gas price recommendations

Get Etherscan's low, average and high gas price recommendations in gwei, with the current base fee - the numbers behind the gas tracker on etherscan.io. Poll it on a schedule to alert when gas drops below a threshold.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `fast_gas_price_gwei` (number): The high, fastest price.
- `last_block` (number): The block the reading is based on.
- `propose_gas_price_gwei` (number): The average, recommended price.
- `recent_gas_used_ratios` (list): How full the last few blocks were.
- `safe_gas_price_gwei` (number): The low, cheapest-but-slower price.
- `suggested_base_fee_gwei` (number): The current EIP-1559 base fee.

**Example output**

```json
{
  "chain_id": "1",
  "fast_gas_price_gwei": 0.55411917,
  "last_block": 23467872,
  "propose_gas_price_gwei": 0.496840168,
  "recent_gas_used_ratios": [
    0.405942555555556,
    0.784013777777778
  ],
  "safe_gas_price_gwei": 0.496839934,
  "suggested_base_fee_gwei": 0.496839934
}
```

### Get native coin balance

Get an address's balance of the chain's own coin - ETH on Ethereum, BNB on BNB Chain, POL on Polygon. Returns the exact wei figure and the same number in whole coins.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block number (`block_number`, number): Read the balance as it stood at this block. Etherscan keeps only the last 128 blocks here, so this is for 'a moment ago', not history. Leave blank for the current balance. At least 0.

**Outputs**

- `address` (text): A 42-character address, lowercased.
- `balance` (number): The address's native coin balance, in wei (the exact on-chain integer).
- `balance_units` (text): The address's native coin balance, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `chain_id` (text): The chain the call was made against, as its chain id.

**Example output**

```json
{
  "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae",
  "balance": 172774397764084972158218,
  "balance_units": "172774.397764084972158218",
  "chain_id": "1"
}
```

### Get native coin balances for several addresses

Get the native coin balance of up to 20 addresses in one call - one request instead of twenty, which matters against a rate limit.

**Inputs**

- Addresses (`addresses`, list, required): The addresses to look up, up to 20 of them.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `balances` (list): One entry per address asked about.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.

**Example output**

```json
{
  "balances": [
    {
      "address": "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",
      "balance": 40891631566070000000000,
      "balance_units": "40891.63156607"
    },
    {
      "address": "0x63a9975ba31b0b9626b34300f7f627147df1f526",
      "balance": 332567136222827062478,
      "balance_units": "332.567136222827062478"
    }
  ],
  "chain_id": "1",
  "count": 2
}
```

### Get the code at an address

Get the bytecode deployed at an address, and with it the answer to whether the address is a contract at all - an empty result means it is an ordinary wallet.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block (`block_tag`, text): Which block to read the state at. Defaults to the latest block. One of: `latest` (Latest block), `earliest` (Earliest block), `pending` (Pending block). Default: `latest`.

**Outputs**

- `address` (text): A 42-character address, lowercased.
- `bytecode` (text): The deployed bytecode, or 0x when there is none.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `is_contract` (true/false): Whether anything is deployed there.
- `tag` (text): The block the code was read at.

**Example output**

```json
{
  "address": "0xa2b4c0af19cc16a6cfacce81f192b024d625817d",
  "bytecode": "0x3660008037602060003660003473273930d21e01ee25e4c219b6",
  "chain_id": "1",
  "is_contract": true,
  "tag": "latest"
}
```

### Get the current gas price

Get the gas price a node is currently quoting, in wei and in gwei.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `gas_price_gwei` (text): The same price in gwei, as a decimal string.
- `gas_price_hex` (text): The price as the node returned it.
- `gas_price_wei` (number): The gas price, in wei.

**Example output**

```json
{
  "chain_id": "1",
  "gas_price_gwei": "0.497666226",
  "gas_price_hex": "0x1da9c8b2",
  "gas_price_wei": 497666226
}
```

### Get the latest block number

Get the number of the most recent block on the chain - the natural first step for a workflow that reads a window of recent history.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `block_number` (number): The latest block number.
- `block_number_hex` (text): The same number as the node returned it.
- `chain_id` (text): The chain the call was made against, as its chain id.

**Example output**

```json
{
  "block_number": 23467872,
  "block_number_hex": "0x1661760",
  "chain_id": "1"
}
```

### Get the native coin price

Get the latest price of the chain's native coin in USD and BTC, with the moment each quote was taken.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `btc_quoted_at` (number): When the BTC price was taken, in unix seconds.
- `btc_quoted_at_iso` (text): When the BTC price was taken, as an ISO 8601 UTC timestamp.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `price_btc` (number): The price in bitcoin.
- `price_usd` (number): The price in US dollars.
- `usd_quoted_at` (number): When the USD price was taken, in unix seconds.
- `usd_quoted_at_iso` (text): When the USD price was taken, as an ISO 8601 UTC timestamp.

**Example output**

```json
{
  "btc_quoted_at": 1759139509,
  "btc_quoted_at_iso": "2025-09-29T09:51:49+00:00",
  "chain_id": "1",
  "price_btc": 0.0368322132423383,
  "price_usd": 4129.30651044757,
  "usd_quoted_at": 1759139509,
  "usd_quoted_at_iso": "2025-09-29T09:51:49+00:00"
}
```

### Get the native coin supply

Get the circulating supply of the chain's native coin. This figure leaves out staking rewards and burned fees - 'Get the native coin supply (detailed)' breaks those out.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `total_supply` (number): The circulating supply, in wei (the exact on-chain integer).
- `total_supply_units` (text): The circulating supply, in whole units, as a decimal string. A string because a float cannot hold it without rounding.

**Example output**

```json
{
  "chain_id": "1",
  "total_supply": 122373866217800000000000000,
  "total_supply_units": "122373866.2178"
}
```

### Get the native coin supply (detailed)

Get the native coin's supply split into its moving parts: circulating supply, staking rewards issued, EIP-1559 fees burned, and the total withdrawn from the beacon chain. net_supply is issuance minus burn - the figure people mean by 'ETH supply'.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `burnt_fees` (number): Fees burned under EIP-1559, in wei (the exact on-chain integer).
- `burnt_fees_units` (text): Fees burned under EIP-1559, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `net_supply` (number): Supply plus staking rewards, minus burn, in wei (the exact on-chain integer).
- `net_supply_units` (text): Supply plus staking rewards, minus burn, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `staking_rewards` (number): Rewards issued to stakers, in wei (the exact on-chain integer).
- `staking_rewards_units` (text): Rewards issued to stakers, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `total_supply` (number): The circulating supply, in wei (the exact on-chain integer).
- `total_supply_units` (text): The circulating supply, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `withdrawn_total` (number): Total withdrawn from the beacon chain, in wei (the exact on-chain integer).
- `withdrawn_total_units` (text): Total withdrawn from the beacon chain, in whole units, as a decimal string. A string because a float cannot hold it without rounding.

**Example output**

```json
{
  "burnt_fees": 4610942856337430575173814,
  "burnt_fees_units": "4610942.856337430575173814",
  "chain_id": "1",
  "net_supply": 120703250528552602424826186,
  "net_supply_units": "120703250.528552602424826186",
  "staking_rewards": 2940327167090033000000000,
  "staking_rewards_units": "2940327.167090033",
  "total_supply": 122373866217800000000000000,
  "total_supply_units": "122373866.2178",
  "withdrawn_total": 7618584348954597000000000,
  "withdrawn_total_units": "7618584.348954597"
}
```

### Get the node count

Get how many discoverable nodes the network has right now.

**Inputs**

- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `date` (text): The day the count is for, as YYYY-MM-DD.
- `node_count` (number): How many discoverable nodes there are.

**Example output**

```json
{
  "chain_id": "1",
  "date": "2025-09-25",
  "node_count": 11786
}
```

### Get token balance

Get how much of one ERC-20 token an address holds. The raw figure is in the token's smallest unit; the whole-unit companion is scaled by the token's decimals.

**Inputs**

- Token contract address (`contract_address`, text, required): The token's contract address.
- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `address` (text): The holder asked about.
- `balance` (number): The token balance, in the token's smallest unit (the exact on-chain integer).
- `balance_units` (text): The token balance, in whole units, as a decimal string. A string because a float cannot hold it without rounding.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `contract_address` (text): The token asked about.

**Example output**

```json
{
  "address": "0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae",
  "balance": 135499,
  "balance_units": "0.000000000000135499",
  "chain_id": "1",
  "contract_address": "0xdac17f958d2ee523a2206206994597c13d831ec7"
}
```

### Get token total supply

Get how much of an ERC-20 token is in circulation.

**Inputs**

- Token contract address (`contract_address`, text, required): The token's contract address.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `contract_address` (text): The token asked about.
- `total_supply` (number): The circulating supply, in the token's smallest unit (the exact on-chain integer).
- `total_supply_units` (text): The circulating supply, in whole units, as a decimal string. A string because a float cannot hold it without rounding.

**Example output**

```json
{
  "chain_id": "1",
  "contract_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
  "total_supply": 21265524714464,
  "total_supply_units": "0.000021265524714464"
}
```

### List blocks validated by an address

List the blocks a validator or mining address produced, and what each one paid it.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block type (`block_type`, text): Full blocks, or the uncle blocks of pre-Merge Ethereum. One of: `blocks` (Full blocks), `uncles` (Uncle blocks (pre-Merge only)). Default: `blocks`.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.

**Outputs**

- `blocks` (list): The blocks this address produced, newest first.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.

**Example output**

```json
{
  "blocks": [
    {
      "block_number": 20226140,
      "block_reward": 33424103001400554,
      "block_reward_units": "0.033424103001400554",
      "timestamp": 1720011623,
      "timestamp_iso": "2024-07-03T11:40:23+00:00"
    }
  ],
  "chain_id": "1",
  "count": 1
}
```

### List ERC-1155 token transfers

List ERC-1155 transfers for a wallet, for a contract, or for both. ERC-1155 moves a quantity of a token id at a time, so each transfer carries both.

**Inputs**

- Wallet address (`address`, text): The wallet whose transfers you want. Give a wallet, a token contract, or both (both narrows to one wallet's transfers of one token).
- Token contract address (`contract_address`, text): Only include transfers of this token. Give a wallet, a token contract, or both.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to start at the first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to run to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transfers` (list): The ERC-1155 transfers.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transfers": [
    {
      "block_hash": "0xa5da536dfbe8125eb146114e2ee0d0bdef2b20483aacbf30fed6b60f092059e6",
      "block_number": 13472395,
      "confirmations": 9995266,
      "contract_address": "0x76be3b62873462d2142405439777e971754e8e77",
      "cumulative_gas_used": 11739203,
      "from_address": "0x1e63326a84d2fa207bdfa856da9278a93deba418",
      "function_name": null,
      "gas": 140000,
      "gas_price": 52898577246,
      "gas_price_gwei": "52.898577246",
      "gas_used": 105030,
      "hash": "0x643b15f3ffaad5d38e33e5872b4ebaa7a643eda8b50ffd5331f682934ee65d4d",
      "method_id": "0x3e6b214b",
      "nonce": 41,
      "quantity": 1,
      "timestamp": 1634973285,
      "timestamp_iso": "2021-10-23T07:14:45+00:00",
      "to_address": "0x83f564d180b58ad9a02a449105568189ee7de8cb",
      "token_id": "10371",
      "token_name": "parallel",
      "token_symbol": "LL",
      "transaction_index": 100
    }
  ]
}
```

### List ERC-20 token transfers

List ERC-20 token transfers for a wallet, for a token, or for one wallet's transfers of one token. Each transfer carries the token's name, symbol and decimals, and the amount in both raw and whole units.

**Inputs**

- Wallet address (`address`, text): The wallet whose transfers you want. Give a wallet, a token contract, or both (both narrows to one wallet's transfers of one token).
- Token contract address (`contract_address`, text): Only include transfers of this token. Give a wallet, a token contract, or both.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to start at the first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to run to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transfers` (list): The ERC-20 transfers.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transfers": [
    {
      "block_hash": "0x022c5e6a3d2487a8ccf8946a2ffb74938bf8e5c8a3f6d91b41c56378a96b5c37",
      "block_number": 4730207,
      "confirmations": 18737452,
      "contract_address": "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",
      "cumulative_gas_used": 2523379,
      "from_address": "0x642ae78fafbb8032da552d619ad43f1d81e4dd7c",
      "function_name": "redeem()",
      "gas": 940000,
      "gas_price": 32010000000,
      "gas_price_gwei": "32.01",
      "gas_used": 77759,
      "hash": "0xe8c208398bd5ae8e4c237658580db56a2a94dfa0ca382c99b776fa6e7d31d5b4",
      "method_id": "0xbe040fb0",
      "nonce": 406,
      "timestamp": 1513240363,
      "timestamp_iso": "2017-12-14T08:32:43+00:00",
      "to_address": "0x4e83362442b8d1bec281594cea3050c8eb01311c",
      "token_decimals": 18,
      "token_name": "Maker",
      "token_symbol": "MKR",
      "transaction_index": 81,
      "value": 5901522149285533025181,
      "value_units": "5901.522149285533025181"
    }
  ]
}
```

### List ERC-721 (NFT) transfers

List NFT transfers for a wallet, for a collection, or for one wallet's transfers within one collection. Each transfer names the exact token id that moved.

**Inputs**

- Wallet address (`address`, text): The wallet whose transfers you want. Give a wallet, a token contract, or both (both narrows to one wallet's transfers of one token).
- Token contract address (`contract_address`, text): Only include transfers of this token. Give a wallet, a token contract, or both.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to start at the first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to run to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transfers` (list): The ERC-721 transfers.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transfers": [
    {
      "block_hash": "0x4be19c278bfaead5cb0bc9476fa632e2447f6e6259e0303af210302d22779a24",
      "block_number": 4708120,
      "confirmations": 18759540,
      "contract_address": "0x06012c8cf97bead5deae237070f9587f8e7a266d",
      "cumulative_gas_used": 4880352,
      "from_address": "0xb1690c08e213a35ed9bab7b318de14420fb57d8c",
      "function_name": "bid(uint256 _tokenId)",
      "gas": 158820,
      "gas_price": 40000000000,
      "gas_price_gwei": "40",
      "gas_used": 60508,
      "hash": "0x031e6968a8de362e4328d60dcc7f72f0d6fc84284c452f63176632177146de66",
      "method_id": "0x454a2ab3",
      "nonce": 0,
      "timestamp": 1512907118,
      "timestamp_iso": "2017-12-10T11:58:38+00:00",
      "to_address": "0x6975be450864c02b4613023c2152ee0743572325",
      "token_decimals": 0,
      "token_id": "202106",
      "token_name": "CryptoKitties",
      "token_symbol": "CK",
      "transaction_index": 81
    }
  ]
}
```

### List internal transactions for an address

List the internal transactions that touched an address - the value moves a contract made on its own, which never appear in the normal transaction list. Withdrawals from an exchange contract or a DeFi position land here.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to start at the first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to run to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `internal_transactions` (list): The internal transactions, in the order asked for.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "internal_transactions": [
    {
      "block_number": 13481773,
      "contract_address": null,
      "error_code": null,
      "from_address": "0x3909336de913344701c6f096502d26208210b39f",
      "gas": 101300,
      "gas_used": 13898,
      "hash": "0x8b440f5ec0e986589517b131c5b75e921f2768b9912f028d2cdb009d759036ab",
      "input_data": null,
      "succeeded": true,
      "timestamp": 1635100060,
      "timestamp_iso": "2021-10-24T18:27:40+00:00",
      "to_address": "0xff62dfadca3b5643d0b283571fe154d886580c0c",
      "trace_id": "3",
      "type": "call",
      "value": 1159078546481168231,
      "value_units": "1.159078546481168231"
    }
  ]
}
```

### List internal transactions of one transaction

Break one transaction open and list every value move it set off inside contracts. This is what shows where the money actually went in a swap or a multi-step contract call.

**Inputs**

- Transaction hash (`transaction_hash`, text, required): The 66-character transaction hash, starting with 0x.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `internal_transactions` (list): The internal transactions this transaction set off.
- `transaction_hash` (text): A 66-character hash, lowercased.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "internal_transactions": [
    {
      "block_number": 13481773,
      "contract_address": null,
      "error_code": null,
      "from_address": "0x3909336de913344701c6f096502d26208210b39f",
      "gas": 101300,
      "gas_used": 13898,
      "hash": "0x8b440f5ec0e986589517b131c5b75e921f2768b9912f028d2cdb009d759036ab",
      "input_data": null,
      "succeeded": true,
      "timestamp": 1635100060,
      "timestamp_iso": "2021-10-24T18:27:40+00:00",
      "to_address": "0xff62dfadca3b5643d0b283571fe154d886580c0c",
      "trace_id": "3",
      "type": "call",
      "value": 1159078546481168231,
      "value_units": "1.159078546481168231"
    }
  ],
  "transaction_hash": "0x8b440f5ec0e986589517b131c5b75e921f2768b9912f028d2cdb009d759036ab"
}
```

### List L2 deposits for an address

List an address's deposits from Ethereum onto an L2 chain, each linked back to the L1 transaction that started it. Set the Chain to the L2 you are asking about.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `deposits` (list): The deposits onto this chain.

**Example output**

```json
{
  "chain_id": "10",
  "count": 1,
  "deposits": [
    {
      "block_hash": "0xef2ff158c8b12be842429f4a8cde58bfa6a389c5274b46f8a1dd2ee7f958ca4d",
      "block_number": 132992375,
      "cumulative_gas_used": 169497,
      "error_description": null,
      "from_address": "0x36bde71c97b33cc4729cf772ae268934f7ab70b2",
      "gas": 490798,
      "gas_price": 0,
      "gas_price_gwei": "0",
      "gas_used": 117234,
      "hash": "0x64ccd0cfa9f333578b36227492f3bc7f5f3ec4bfa82cdc46f82884db680d8e5b",
      "input_data": "0xd764ad0b0001",
      "l1_transaction_hash": "0x303bd05c47e62e1243a33210e535ebc70a7567e53a9972fbdef52ee5bcda5acb",
      "l1_transaction_origin": "0x36bde71c97b33cc4729cf772ae268934f7ab70b2",
      "nonce": 520502,
      "queue_index": 999999,
      "succeeded": true,
      "timestamp": 1741583527,
      "timestamp_iso": "2025-03-10T05:12:07+00:00",
      "to_address": "0x4200000000000000000000000000000000000007",
      "token_address": "ETH",
      "token_sent_from": null,
      "token_sent_to": "0x80f3950a4d371c43360f292a4170624abd9eed03",
      "token_value": 598200000000000,
      "token_value_units": "0.0005982",
      "value": 598200000000000,
      "value_units": "0.0005982"
    }
  ]
}
```

### List L2 withdrawals for an address

List an address's withdrawals from an L2 chain back to Ethereum. Set the Chain to the L2 you are asking about.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `withdrawals` (list): The withdrawals off this chain.

**Example output**

```json
{
  "chain_id": "10",
  "count": 1,
  "withdrawals": [
    {
      "block_hash": "0xef2ff158c8b12be842429f4a8cde58bfa6a389c5274b46f8a1dd2ee7f958ca4d",
      "block_number": 132992375,
      "cumulative_gas_used": 169497,
      "error_description": null,
      "from_address": "0x36bde71c97b33cc4729cf772ae268934f7ab70b2",
      "gas": 490798,
      "gas_price": 0,
      "gas_price_gwei": "0",
      "gas_used": 117234,
      "hash": "0x64ccd0cfa9f333578b36227492f3bc7f5f3ec4bfa82cdc46f82884db680d8e5b",
      "input_data": "0xd764ad0b0001",
      "l1_transaction_hash": "0x303bd05c47e62e1243a33210e535ebc70a7567e53a9972fbdef52ee5bcda5acb",
      "l1_transaction_origin": "0x36bde71c97b33cc4729cf772ae268934f7ab70b2",
      "nonce": 520502,
      "queue_index": 999999,
      "succeeded": true,
      "timestamp": 1741583527,
      "timestamp_iso": "2025-03-10T05:12:07+00:00",
      "to_address": "0x4200000000000000000000000000000000000007",
      "token_address": "ETH",
      "token_sent_from": null,
      "token_sent_to": "0x80f3950a4d371c43360f292a4170624abd9eed03",
      "token_value": 598200000000000,
      "token_value_units": "0.0005982",
      "value": 598200000000000,
      "value_units": "0.0005982"
    }
  ]
}
```

### List Plasma bridge deposits for an address

List the Plasma bridge deposits an address received. Polygon's older bridge; set the Chain to Polygon.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `deposits` (list): The Plasma deposits this address received.

**Example output**

```json
{
  "chain_id": "137",
  "count": 1,
  "deposits": [
    {
      "address": "0x4880bd4695a8e59dc527d124085749744b6c988e",
      "amount": 2341706540000000000,
      "amount_units": "2.34170654",
      "block_number": 51844560,
      "contract_address": "0x0000000000000000000000000000000000001010",
      "from_address": "0x0000000000000000000000000000000000000000",
      "hash": "0xf645deb2b6fbb8b76ccbcf4bde782e28d3520e8a30e9a568b9b8c526e2fd8434",
      "timestamp": 1704181285,
      "timestamp_iso": "2024-01-02T07:41:25+00:00",
      "token_decimals": 18,
      "token_name": "Polygon Token",
      "token_symbol": "POL"
    }
  ]
}
```

### List staking withdrawals to an address

List the beacon-chain withdrawals paid to an address - the staking rewards and exits that arrive without a transaction, and so never show up in a transaction list. Amounts are in gwei on the consensus layer and are also given in whole coins.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to start at the first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to run to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `withdrawals` (list): The withdrawals paid to this address.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "withdrawals": [
    {
      "address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
      "amount_ether": "3.402931175",
      "amount_gwei": 3402931175,
      "block_number": 17034877,
      "timestamp": 1681338599,
      "timestamp_iso": "2023-04-12T22:29:59+00:00",
      "validator_index": 117823,
      "withdrawal_index": 13
    }
  ]
}
```

### List supported chains

List every chain the Etherscan API covers, with each one's chain id, block explorer and current status. One API key works on all of them; the chain id is what every other action's Chain field holds.

**Inputs**: None.

**Outputs**

- `chains` (list): The supported chains, in Etherscan's own order.
- `count` (number): How many records this step returned.

**Example output**

```json
{
  "chains": [
    {
      "api_url": "https://api.etherscan.io/v2/api?chainid=1",
      "block_explorer_url": "https://etherscan.io/",
      "chain_id": "1",
      "comment": null,
      "is_available": true,
      "name": "Ethereum Mainnet",
      "status_code": 1
    },
    {
      "api_url": "https://api.etherscan.io/v2/api?chainid=8453",
      "block_explorer_url": "https://basescan.org/",
      "chain_id": "8453",
      "comment": null,
      "is_available": true,
      "name": "Base Mainnet",
      "status_code": 1
    }
  ],
  "count": 2
}
```

### List transactions for an address

List the transactions an address sent or received, newest first, each with its value, gas, fee, the function it called and whether it succeeded. These are the transactions a wallet signed; value moved inside a contract call shows up under 'List internal transactions' instead.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- From block (`start_block`, number): Only include results from this block onwards. Leave blank to start at the first block. At least 0.
- To block (`end_block`, number): Only include results up to this block. Leave blank to run to the latest block. At least 0.
- Page (`page`, number): Which page of results to return, counting from 1. At least 1.
- Results per page (`results_per_page`, number): How many results to return per page, up to 10000. From 1 to 10000.
- Order (`sort`, text): Which end of the history to return first. Defaults to newest first. One of: `asc` (Oldest first), `desc` (Newest first). Default: `desc`.

**Outputs**

- `chain_id` (text): The chain the call was made against, as its chain id.
- `count` (number): How many records this step returned.
- `transactions` (list): The transactions, in the order asked for.

**Example output**

```json
{
  "chain_id": "1",
  "count": 1,
  "transactions": [
    {
      "block_hash": "0xf5646226f819fbdd6b2f1cb99de6e5d17da3d876ec166e69f4e9736c8ebf7ab4",
      "block_number": 23467053,
      "confirmations": 589,
      "contract_address": null,
      "cumulative_gas_used": 22498564,
      "error_description": null,
      "from_address": "0x2449ecef5012f0a0e153b278ef4fcc9625bc4c78",
      "function_name": "delegate(address to)",
      "gas": 73271,
      "gas_price": 238744402,
      "gas_price_gwei": "0.238744402",
      "gas_used": 48847,
      "hash": "0xf9db905d77704596d3600816bc70201586cfeec13bcf576320e2f38d6ca851a0",
      "input_data": "0x5c19a95c0000000000000000000000002449ecef5012f0a0e153b278ef4fcc9625bc4c78",
      "method_id": "0x5c19a95c",
      "nonce": 8,
      "succeeded": true,
      "timestamp": 1759129619,
      "timestamp_iso": "2025-09-29T07:06:59+00:00",
      "to_address": "0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc",
      "transaction_fee": 11661947804494,
      "transaction_fee_units": "0.000011661947804494",
      "transaction_index": 184,
      "value": 0,
      "value_units": "0"
    }
  ]
}
```

### Read a contract storage slot

Read one 32-byte slot of a contract's storage directly - the way to see state a contract never exposed through a getter.

**Inputs**

- Address (`address`, text, required): The wallet or contract address to look at.
- Storage slot (`position`, number, required): Which slot to read, counting from 0. At least 0.
- Chain (`chain_id`, text): Which chain to query. Leave blank for Ethereum mainnet. The same key reaches every chain in this list, though a handful of them - Base, OP Mainnet, BNB Smart Chain and Avalanche among them - need a paid Etherscan plan, and say so if you pick one. Default: `1`.
- Block (`block_tag`, text): Which block to read the state at. Defaults to the latest block. One of: `latest` (Latest block), `earliest` (Earliest block), `pending` (Pending block). Default: `latest`.

**Outputs**

- `address` (text): A 42-character address, lowercased.
- `chain_id` (text): The chain the call was made against, as its chain id.
- `position` (number): The slot read.
- `tag` (text): The block it was read at.
- `value_hex` (text): The slot's raw 32-byte value.
- `value_number` (number): The same value read as a number.

**Example output**

```json
{
  "address": "0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd",
  "chain_id": "1",
  "position": 0,
  "tag": "latest",
  "value_hex": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "value_number": 0
}
```
