{"id":"b9553fd6-1758-41b5-abe8-683faad5500b","shortId":"4PTz35","kind":"skill","title":"etherscan-api","tagline":"This skill should be used when the user asks to \"check ETH balance\", \"query ERC-20 balance\", \"get wallet balance\", \"check token holdings\", \"fetch NFT transfers\", \"ERC-721 transfer history\", \"ERC-1155 transfer history\", \"find first funding transaction\", \"trace fund origin\", \"who f","description":"# Etherscan API V2\n\n## Overview\n\nQuery blockchain data using Etherscan's unified API V2. This skill covers:\n\n- Native ETH balance queries\n- ERC-20 token balance queries (single contract on every plan; full holdings on PRO)\n- Transaction history queries (normal, internal, ERC-20/ERC-721/ERC-1155 transfers)\n- First-funding lookup for an address (PRO `fundedby` with a 2-call free-tier fallback)\n- Multi-chain support via the `chainid` parameter\n- Auto-detection of Free vs Lite vs PRO so paid-only chains and PRO-only endpoints are used when available\n\n**Scope:** Read-only account queries. For other Etherscan API features, consult the fallback documentation.\n\n## Prerequisites\n\n### API Key Validation\n\nBefore making any API call, verify the `ETHERSCAN_API_KEY` environment variable is set:\n\n```bash\nif [ -z \"$ETHERSCAN_API_KEY\" ]; then\n  echo \"Error: ETHERSCAN_API_KEY environment variable is not set.\"\n  echo \"Get a free API key at: https://etherscan.io/myapikey\"\n  exit 1\nfi\n```\n\nIf the environment variable is missing, inform the user and halt execution.\n\n### Plan Detection\n\nRun the detection helper **once per session** and cache the result. It maps `getapilimit` → plan tier and probes a Base balance call to disambiguate Free from Lite:\n\n```bash\n./scripts/detect-plan.sh\n```\n\nOutput (key=value lines):\n\n```\nplan=lite\ncredit_limit=100000\ncredits_used=4\ncredits_available=99996\nlimit_interval=daily\ninterval_expiry=14:38:10\npro_endpoints=false\npaid_chains=true\n```\n\n`plan` is one of `free`, `lite`, `standard`, `advanced`, `professional`, `pro_plus`, `enterprise`, `unknown`. Two boolean fields gate behavior:\n\n- `paid_chains=true` — paid-only chains (Base, OP, Avalanche, BNB) are queryable. True for Lite and all higher tiers.\n- `pro_endpoints=true` — PRO-only actions (`addresstokenbalance`, `balancehistory`, `tokenholderlist`, `fundedby`, daily-stats endpoints, etc.) are callable. True for Standard and higher; **false on Lite**.\n\n**Manual detection** (if the script is unavailable):\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=getapilimit&action=getapilimit&apikey=$ETHERSCAN_API_KEY\"\n# → {\"status\":\"1\",\"message\":\"OK\",\"result\":{\"creditsUsed\":1,\"creditsAvailable\":99999,\"creditLimit\":100000,\"limitInterval\":\"daily\",\"intervalExpiryTimespan\":\"07:20:05\"}}\n```\n\n| `creditLimit` | Plan         | Paid-only chains | PRO endpoints |\n| ------------- | ------------ | ---------------- | ------------- |\n| 100,000       | Free or Lite | Probe to confirm | No            |\n| 200,000       | Standard     | Yes              | Yes           |\n| 500,000       | Advanced     | Yes              | Yes           |\n| 1,000,000     | Professional | Yes              | Yes           |\n| 1,500,000     | Pro Plus     | Yes              | Yes           |\n| > 1,500,000   | Enterprise   | Yes              | Yes           |\n\nFree and Lite both report `creditLimit: 100000`. Lite ($49/mo) raises rate-limit-per-second (5 vs 3) **and unlocks every supported chain** (Base, OP, Avalanche, BNB), but does **not** add PRO endpoints — those start at Standard. To disambiguate, attempt a paid-chain balance call (e.g., `chainid=8453`): status=1 → Lite, status=0 → Free. To probe PRO instead, the failure response is `\"Sorry, it looks like you are trying to access an API Pro endpoint.\"`.\n\n`getapilimit` itself consumes 1 credit (plus 1 more for the paid-chain probe), so do not re-run mid-session.\n\n## Chain Inference\n\nDo not default to Ethereum Mainnet. Always infer the chain from the user's prompt before making any API call.\n\n### Inference Rules\n\n1. **Explicit chain mention** — If the user mentions a chain name (e.g., \"on Polygon\", \"Arbitrum balance\", \"Base chain\"), use that chain.\n2. **Chain-specific tokens** — Some tokens exist primarily on specific chains:\n   - POL → Polygon (137)\n   - ARB → Arbitrum One (42161)\n   - OP → OP Mainnet (10)\n   - AVAX → Avalanche C-Chain (43114)\n   - BNB → BNB Smart Chain (56)\n   - SONIC → Sonic (146)\n   - SEI → Sei (1329)\n   - MON → Monad (143)\n3. **Contract address patterns** — If the user provides a contract address, consider asking which chain it's deployed on (many contracts exist on multiple chains).\n4. **Testnet keywords** — Words like \"testnet\", \"Sepolia\", \"Hoodi\", \"Amoy\" indicate testnet chains.\n5. **Ambiguous cases** — If the chain cannot be inferred, **ask the user** before proceeding. Do not assume Ethereum Mainnet.\n\n### Unsupported Chains\n\nIf the user references an **EVM chain** that Etherscan API V2 does not cover (e.g., a niche L2 or appchain not in `./references/chains.md`), do **not** halt. Fall back to direct RPC calls against the chain's default public RPC:\n\n1. Resolve the chain via the `evm-chains` skill to get the default public RPC, chain ID, native currency symbol, and explorer URL.\n2. Issue equivalent JSON-RPC calls (e.g., `eth_getBalance`, `eth_getLogs`, `eth_getTransactionByHash`) against that RPC using `curl` or the `cast` CLI from the `cli-cast` skill.\n3. Note in the response that the data came from the chain's public RPC, not Etherscan, so PRO-style aggregations (full token holdings, first-funding lookup) are unavailable and must be derived manually from logs/transactions if needed.\n\nIf the user references a **non-EVM chain** (e.g., Solana, Bitcoin, Cosmos), inform them — no RPC fallback applies:\n\n```\nThe chain \"[chain name]\" is not supported by Etherscan API V2.\n\nEtherscan supports EVM-compatible chains only. For the full list, see:\nhttps://docs.etherscan.io/supported-chains\n```\n\nFor the complete list of Etherscan-supported chains and their IDs, see `./references/chains.md`.\n\n## API Base URL\n\nAll requests use the unified V2 endpoint:\n\n```\nhttps://api.etherscan.io/v2/api\n```\n\nThe `chainid` parameter determines which blockchain to query.\n\n## ETH Balance Query\n\nQuery native ETH (or native token) balance for an address.\n\n### Endpoint Parameters\n\n| Parameter | Required | Default  | Description                                                                                                                                           |\n| --------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `chainid` | No       | `1`      | Chain ID (see chains.md)                                                                                                                              |\n| `module`  | Yes      | -        | Set to `account`                                                                                                                                      |\n| `action`  | Yes      | -        | Set to `balance`                                                                                                                                      |\n| `address` | Yes      | -        | Wallet address (supports up to 20 comma-separated)                                                                                                    |\n| `tag`     | No       | `latest` | `latest` or hex block number. On free/Lite, only the last 128 blocks are queryable; older history needs the `balancehistory` PRO endpoint (Standard+) |\n| `apikey`  | Yes      | -        | API key from `$ETHERSCAN_API_KEY`                                                                                                                     |\n\n### Single Address Query\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=balance&address=0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe&tag=latest&apikey=$ETHERSCAN_API_KEY\"\n```\n\n### Multi-Address Query (up to 20)\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=balancemulti&address=0xaddress1,0xaddress2,0xaddress3&tag=latest&apikey=$ETHERSCAN_API_KEY\"\n```\n\n### Response Format\n\n**Single address:**\n\n```json\n{\n  \"status\": \"1\",\n  \"message\": \"OK\",\n  \"result\": \"172774397764084972158218\"\n}\n```\n\n**Multi-address:**\n\n```json\n{\n  \"status\": \"1\",\n  \"message\": \"OK\",\n  \"result\": [\n    {\"account\": \"0xaddress1\", \"balance\": \"1000000000000000000\"},\n    {\"account\": \"0xaddress2\", \"balance\": \"2500000000000000000\"}\n  ]\n}\n```\n\n## ERC-20 Token Balance Query\n\nQuery ERC-20 token balance for an address.\n\n### Endpoint Parameters\n\n| Parameter         | Required | Default  | Description                       |\n| ----------------- | -------- | -------- | --------------------------------- |\n| `chainid`         | No       | `1`      | Chain ID (see chains.md)          |\n| `module`          | Yes      | -        | Set to `account`                  |\n| `action`          | Yes      | -        | Set to `tokenbalance`             |\n| `contractaddress` | Yes      | -        | ERC-20 token contract address     |\n| `address`         | Yes      | -        | Wallet address to query           |\n| `tag`             | No       | `latest` | Block tag                         |\n| `apikey`          | Yes      | -        | API key from `$ETHERSCAN_API_KEY` |\n\n### Example Query\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=tokenbalance&contractaddress=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&address=0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe&tag=latest&apikey=$ETHERSCAN_API_KEY\"\n```\n\n### Response Format\n\n```json\n{\n  \"status\": \"1\",\n  \"message\": \"OK\",\n  \"result\": \"135499000000\"\n}\n```\n\n### Full Holdings\n\n`tokenbalance` returns the balance for **one** ERC-20 contract at a time. To list **every** token an address holds:\n\n| Action                   | Returns                                                    |\n| ------------------------ | ---------------------------------------------------------- |\n| `addresstokenbalance`    | All ERC-20 holdings (token, quantity, decimals, USD price) |\n| `addresstokennftbalance` | All ERC-721 collection holdings and counts                 |\n\n**Use only when `pro_endpoints=true`** from plan detection. Both require Standard plan or higher and are throttled to **2 calls/second** regardless of tier.\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=addresstokenbalance&address=0x...&page=1&offset=100&apikey=$ETHERSCAN_API_KEY\"\n```\n\nWhen `pro_endpoints=false`, fall back to looping `tokenbalance` over a known token contract list.\n\n## Transaction History Queries\n\nQuery an address's transaction history. Five actions are available under `module=account`:\n\n| Action           | Returns                                    |\n| ---------------- | ------------------------------------------ |\n| `txlist`         | Normal (external) transactions             |\n| `txlistinternal` | Internal transactions (contract-initiated) |\n| `tokentx`        | ERC-20 token transfer events               |\n| `tokennfttx`     | ERC-721 (NFT) token transfer events        |\n| `token1155tx`    | ERC-1155 token transfer events             |\n\n### Endpoint Parameters\n\n| Parameter         | Required | Default     | Description                                                  |\n| ----------------- | -------- | ----------- | ------------------------------------------------------------ |\n| `chainid`         | No       | `1`         | Chain ID (see chains.md)                                     |\n| `module`          | Yes      | -           | Set to `account`                                             |\n| `action`          | Yes      | -           | One of the actions above                                     |\n| `address`         | Yes      | -           | Wallet address                                               |\n| `contractaddress` | No       | -           | Token contract filter (`tokentx`/`tokennfttx`/`token1155tx`) |\n| `startblock`      | No       | `0`         | Starting block number                                        |\n| `endblock`        | No       | `999999999` | Ending block number                                          |\n| `page`            | No       | `1`         | Page number for pagination                                   |\n| `offset`          | No       | `100`       | Results per page (see free-tier limit note below)            |\n| `sort`            | No       | `asc`       | `asc` or `desc` by block number                              |\n| `apikey`          | Yes      | -           | API key from `$ETHERSCAN_API_KEY`                            |\n\n> **Pagination cap by plan (effective July 1, 2026):** `offset` maximum is `1000` for free-tier accounts and `10000` for paid tiers (Lite included) on `txlist`, `txlistinternal`, `tokentx`, `tokennfttx`, `token1155tx`, and other list endpoints. When `plan=free`, paginate in batches ≤ 1,000.\n\n### Example Query\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=0x8877bcb2223682048baDD5b09b7eE5a8FA2F3424&startblock=0&endblock=999999999&page=1&offset=100&sort=desc&apikey=$ETHERSCAN_API_KEY\"\n```\n\n### Response Format\n\n`result` is an array of transaction objects. Each contains a Unix `timeStamp` (seconds, as a string) and chain-specific fields (`hash`, `from`, `to`, `value`, `gasUsed`, etc.).\n\n```json\n{\n  \"status\": \"1\",\n  \"message\": \"OK\",\n  \"result\": [\n    {\n      \"blockNumber\": \"18000000\",\n      \"timeStamp\": \"1693526400\",\n      \"hash\": \"0x...\",\n      \"from\": \"0x...\",\n      \"to\": \"0x...\",\n      \"value\": \"1000000000000000000\",\n      \"gasUsed\": \"21000\"\n    }\n  ]\n}\n```\n\n### Timestamp Conversion\n\n`timeStamp` is a Unix epoch in seconds. Always produce **timezone-aware UTC datetimes**.\n\n```python\nfrom datetime import datetime, timezone\n\ndt = datetime.fromtimestamp(int(tx[\"timeStamp\"]), tz=timezone.utc)\n```\n\nDo **not** use `datetime.utcfromtimestamp()` — it returns a naive datetime and is deprecated in Python 3.12+.\n\n```bash\n# Shell equivalent (GNU date)\ndate -u -d \"@1693526400\" --iso-8601=seconds\n# macOS / BSD date\ndate -u -r 1693526400 +\"%Y-%m-%dT%H:%M:%SZ\"\n```\n\n## NFT Transfer History\n\nFetch historical ERC-721 or ERC-1155 transfers for an address. Both actions share the parameter table in the previous section; pass `contractaddress` to filter by collection. Pagination caps (1,000 free / 10,000 paid) and the `startblock`/`endblock`/`page`/`offset`/`sort` semantics are identical to `txlist`.\n\n### ERC-721 Transfers (`tokennfttx`)\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=tokennfttx&address=0x6975be450864c02b4613023c2152ee0743572325&contractaddress=0x06012c8cf97bead5deae237070f9587f8e7a266d&startblock=0&endblock=999999999&page=1&offset=100&sort=asc&apikey=$ETHERSCAN_API_KEY\"\n```\n\nResponse entry (one per `Transfer` event involving the address):\n\n```json\n{\n  \"blockNumber\": \"4708120\",\n  \"timeStamp\": \"1512907118\",\n  \"hash\": \"0x031e6968...\",\n  \"nonce\": \"0\",\n  \"blockHash\": \"0x4be19c27...\",\n  \"from\": \"0xb1690c08e213a35ed9bab7b318de14420fb57d8c\",\n  \"contractAddress\": \"0x06012c8cf97bead5deae237070f9587f8e7a266d\",\n  \"to\": \"0x6975be450864c02b4613023c2152ee0743572325\",\n  \"tokenID\": \"202106\",\n  \"tokenName\": \"CryptoKitties\",\n  \"tokenSymbol\": \"CK\",\n  \"tokenDecimal\": \"0\",\n  \"transactionIndex\": \"81\",\n  \"gas\": \"158820\",\n  \"gasPrice\": \"40000000000\",\n  \"gasUsed\": \"60508\",\n  \"cumulativeGasUsed\": \"4880352\",\n  \"input\": \"deprecated\",\n  \"methodId\": \"0x454a2ab3\",\n  \"functionName\": \"bid(uint256 _tokenId)\",\n  \"confirmations\": \"18759540\"\n}\n```\n\nNFT-specific fields: `contractAddress` (collection), `tokenID` (per-NFT identifier), `tokenName`, `tokenSymbol`, `tokenDecimal` (always `\"0\"` for ERC-721).\n\n### ERC-1155 Transfers (`token1155tx`)\n\nSame parameter shape — swap `action=token1155tx`. ERC-1155 differs from ERC-721 in two response fields:\n\n- **`tokenValue`** (string) — quantity transferred for this `tokenID`. Required because ERC-1155 is semi-fungible; a single transfer can move N copies of one ID. **Not present in ERC-721 responses.**\n- **`tokenDecimal`** is omitted (ERC-1155 has no decimals concept).\n\n```json\n{\n  \"blockNumber\": \"...\",\n  \"timeStamp\": \"...\",\n  \"hash\": \"...\",\n  \"from\": \"...\",\n  \"to\": \"...\",\n  \"contractAddress\": \"0x76be3b62873462d2142405439777e971754e8e77\",\n  \"tokenID\": \"10371\",\n  \"tokenValue\": \"1\",\n  \"tokenName\": \"...\",\n  \"tokenSymbol\": \"...\",\n  \"...\": \"(other tx-level fields identical to tokennfttx)\"\n}\n```\n\n`TransferBatch` events (multiple IDs in one tx) appear as **multiple result entries sharing the same `hash`** — one per `(tokenID, tokenValue)` pair. Group by `hash` to reconstruct the batch.\n\n### Filtering by Collection or Token ID\n\n- **By collection** — pass `contractaddress=<collection>`. The API filters server-side; omit to fetch transfers across all collections.\n- **By token ID** — no server-side filter exists. Fetch the collection's transfers and filter `result[].tokenID == <id>` client-side. For high-volume collections, narrow with `startblock`/`endblock` first.\n- **Mint vs burn vs transfer** — derive from `from`/`to`:\n  - `from == 0x0000...0000` → mint\n  - `to == 0x0000...0000` → burn\n  - otherwise → transfer\n\n### Cost & Limits\n\nStandard list-endpoint pricing — 1 credit per call, same rate-limit tier as `txlist`. Not a PRO endpoint; available on Free and Lite for all supported chains (paid-chain restriction still applies to Base/OP/Avalanche/BNB).\n\n## First Funding Transaction\n\nIdentify the earliest transaction that sent native value to an address — useful for fund-origin tracing, provenance, or compliance checks. Cost is **1 API call** (PRO) or **2 API calls** (fallback).\n\n### Preferred: `fundedby` (PRO endpoint)\n\nReturns the address, tx hash, block, timestamp, and value of the transaction that first funded an EOA. Single call, structured response.\n\n| Parameter | Required | Default | Description                         |\n| --------- | -------- | ------- | ----------------------------------- |\n| `chainid` | No       | `1`     | Chain ID (see chains.md)            |\n| `module`  | Yes      | -       | Set to `account`                    |\n| `action`  | Yes      | -       | Set to `fundedby`                   |\n| `address` | Yes      | -       | EOA address (contracts unsupported) |\n| `apikey`  | Yes      | -       | API key from `$ETHERSCAN_API_KEY`   |\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=fundedby&address=0x4838B106FCe9647Bdf1E7877BF73cE8B0BAD5f97&apikey=$ETHERSCAN_API_KEY\"\n```\n\nResponse:\n\n```json\n{\n  \"status\": \"1\",\n  \"message\": \"OK\",\n  \"result\": {\n    \"block\": 53708500,\n    \"timeStamp\": \"1708349932\",\n    \"fundingAddress\": \"0x6969174fd72466430a46e18234d0b530c9fd5f49\",\n    \"fundingTxn\": \"0xbc0ca4a67eb1555920552246409626cd60df01314dd2bcdb99718b506d9c9946\",\n    \"value\": \"1000000000000000\"\n  }\n}\n```\n\n**Requirements & limits:**\n\n- PRO endpoint — requires Standard plan or higher (`pro_endpoints=true` from plan detection).\n- Throttled to **2 calls/second** regardless of paid tier.\n- **EOA only.** Contract addresses return an error; use the fallback below.\n\n### Fallback: scan ASC normal + internal transactions\n\nWhen `pro_endpoints=false` (free/Lite) or the address is a contract, scan both transaction lists ascending and pick the earliest qualifying incoming entry. Two API calls per address.\n\n```bash\n# Earliest normal txs involving the address\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=0x...&startblock=0&endblock=999999999&page=1&offset=10&sort=asc&apikey=$ETHERSCAN_API_KEY\"\n\n# Earliest internal txs involving the address\ncurl -s \"https://api.etherscan.io/v2/api?chainid=1&module=account&action=txlistinternal&address=0x...&startblock=0&endblock=999999999&page=1&offset=10&sort=asc&apikey=$ETHERSCAN_API_KEY\"\n```\n\nFor each response, pick the first entry where **all** of the following hold:\n\n- `to.toLowerCase() == address.toLowerCase()` — incoming, not outgoing.\n- `value` (in wei) is greater than `0` — actual funding, not a zero-value call.\n- `isError == \"0\"` (omit this filter for internal txs, which use `isError` differently or not at all).\n\nThe funding tx is whichever match has the lower `blockNumber`; break ties by `transactionIndex` (normal txs) or by list order (internal txs).\n\n**Why both lists:** An address may be funded externally (normal tx) or internally (contract sent ETH — common for CEX withdrawals routed through proxy/router contracts, contract deployments with non-zero `msg.value`, or SELFDESTRUCT refunds). Checking only `txlist` will miss internally-funded addresses.\n\n**Why `offset=10`, not `1`:** A `txlist` query returns every tx involving the address, including outgoing ones. The very first entry is occasionally outgoing (e.g., the address was internally pre-funded), so fetch a small window and scan for the first incoming match.\n\n**Edge cases:**\n\n- **No qualifying entry in the first 10** — extend with `offset=100` and `page=1`, or paginate further. In practice, > 10 outgoing-before-incoming is exceedingly rare.\n- **Genesis allocation** — pre-mined balances do not appear in either list. The address shows a balance with no funding tx; report this explicitly.\n- **Token-only funding** — `fundedby` and this fallback only consider native value. If the address was bootstrapped with ERC-20 transfers alone (rare for EOAs since gas is needed), repeat the fallback against `tokentx`.\n\n## Multi-Chain Usage\n\nSpecify the `chainid` parameter to query different blockchains.\n\n### Common Chain IDs (Free Tier)\n\n| Chain        | Chain ID |\n| ------------ | -------- |\n| Ethereum     | `1`      |\n| Polygon      | `137`    |\n| Arbitrum One | `42161`  |\n| Linea        | `59144`  |\n| Blast        | `81457`  |\n| Unichain     | `130`    |\n| Mantle       | `5000`   |\n\n### Example: Polygon Query\n\n```bash\ncurl -s \"https://api.etherscan.io/v2/api?chainid=137&module=account&action=balance&address=0x...&tag=latest&apikey=$ETHERSCAN_API_KEY\"\n```\n\nFor the complete list of supported chains, see `./references/chains.md`.\n\n## Wei to Human-Readable Conversion\n\nAPI responses return balances in the smallest unit (wei for ETH, smallest decimals for tokens).\n\n### ETH Conversion\n\nDivide by 10^18:\n\n```bash\n# Using bc for precision\necho \"scale=18; 172774397764084972158218 / 1000000000000000000\" | bc\n# Result: 172774.397764084972158218\n```\n\n### ERC-20 Conversion\n\nDivide by 10^decimals (typically 18, but varies per token):\n\n| Token       | Decimals |\n| ----------- | -------- |\n| Most tokens | 18       |\n| USDC, USDT  | 6        |\n| WBTC        | 8        |\n\n```bash\n# USDC example (6 decimals)\necho \"scale=6; 135499000000 / 1000000\" | bc\n# Result: 135499.000000\n```\n\n## Output Formatting\n\n**Default behavior:** Present results in a Markdown table:\n\n```markdown\n| Address | Balance (ETH) | Chain |\n|---------|---------------|-------|\n| 0xde0B...7BAe | 172,774.40 | Ethereum |\n| 0xabc1...2def | 50.25 | Polygon |\n```\n\n**User preference:** If the user requests a specific format (JSON, CSV, plain text, etc.), use that format instead. Do not generate a Markdown table when the user specifies an alternative output format.\n\n## Plan-Gated Capabilities\n\nDecisions in this section depend on the cached output of `./scripts/detect-plan.sh`.\n\n### Paid-Only Chains\n\nFour chain families (8 chains total, mainnet + testnet) require any paid Etherscan plan. **Lite ($49/mo) is sufficient** — it grants access to every supported chain at the same 100,000 daily-credit limit as Free. Data endpoints (balance, txlist, logs, etc.) fail only when `plan=free` (i.e., `paid_chains=false`):\n\n| Chain             | Chain ID   |\n| ----------------- | ---------- |\n| Base Mainnet      | `8453`     |\n| Base Sepolia      | `84532`    |\n| OP Mainnet        | `10`       |\n| OP Sepolia        | `11155420` |\n| Avalanche C-Chain | `43114`    |\n| Avalanche Fuji    | `43113`    |\n| BNB Smart Chain   | `56`       |\n| BNB Testnet       | `97`       |\n\n**Exception:** `module=contract` endpoints (`getsourcecode`, `getabi`, etc.) work on **all** chains for every plan including free. The paid-plan requirement applies only to data endpoints.\n\nIf `paid_chains=false` (i.e., `plan=free`) and the user requests a data query on the chains above, halt and inform them upgrading to Lite or higher is required.\n\n### PRO-Only Endpoints\n\nWhen `pro_endpoints=true`, the following actions become available (non-exhaustive — see `https://docs.etherscan.io/api-pro/api-pro` for the full list):\n\n| Module       | Action(s)                                                                     | Use case                                                 |\n| ------------ | ----------------------------------------------------------------------------- | -------------------------------------------------------- |\n| `account`    | `addresstokenbalance`, `addresstokennftbalance`, `balancehistory`, `fundedby` | Full holdings, historical balances, first-funding lookup |\n| `token`      | `tokenholderlist`, `tokeninfo`, `tokensupplyhistory`, `tokenbalancehistory`   | Token analytics                                          |\n| `block`      | `dailyavgblocksize`, `dailyblkcount`, `dailyblockrewards`, etc.               | Daily block stats                                        |\n| `stats`      | `dailytxnfee`, `dailynewaddress`, `dailynetutilization`, etc.                 | Network-wide daily metrics                               |\n| `gastracker` | `dailyavggaslimit`, `dailygasused`, `dailyavggasprice`                        | Daily gas metrics                                        |\n\nWhen `pro_endpoints=false` (free or Lite), prefer the non-PRO equivalents listed in this skill or fall back to per-token loops.\n\n### All Plans\n\nAll other supported chains — Ethereum, Polygon, Arbitrum One, Linea, Blast, Mantle, Unichain, Gnosis, Celo, Fraxtal, Moonbeam, Moonriver, opBNB, Sonic, Sei, Monad, Berachain, Abstract, ApeChain, World, Katana, HyperEVM, MegaETH, Memecore, Plasma, Stable, Taiko, BitTorrent, XDC, and their testnets — are available on every plan including Free. On Lite and higher, the paid-only chains above also become available.\n\nSee `./references/chains.md` for the full list with chain IDs.\n\n## Error Handling\n\n### Common Error Responses\n\n| Status | Message                  | Cause                           |\n| ------ | ------------------------ | ------------------------------- |\n| `0`    | `NOTOK`                  | Invalid API key or rate limited |\n| `0`    | `Invalid address format` | Malformed address               |\n| `0`    | `No transactions found`  | Address has no activity         |\n\n### Rate Limits by Plan\n\n| Plan         | Calls/second | Daily calls |\n| ------------ | ------------ | ----------- |\n| Free         | 3            | 100,000     |\n| Lite         | 5            | 100,000     |\n| Standard     | 10           | 200,000     |\n| Advanced     | 20           | 500,000     |\n| Professional | 30           | 1,000,000   |\n| Pro Plus     | 30           | 1,500,000   |\n| Enterprise   | custom       | unmetered   |\n\nPRO endpoints (`addresstokenbalance`, etc.) are throttled to **2 calls/second** regardless of tier. See `https://docs.etherscan.io/resources/rate-limits` for the authoritative schedule.\n\nIf rate limited, wait briefly and retry.\n\n## Reference Files\n\n- **`./references/chains.md`** - Complete list of supported chains with chain IDs\n- **`./scripts/detect-plan.sh`** - Plan-tier detection helper (run once per session)\n\n## Fallback Documentation\n\nFor use cases not covered by this skill (transaction history, contract verification, gas estimates, etc.), fetch the AI-friendly documentation:\n\n```\nhttps://docs.etherscan.io/llms.txt\n```\n\nUse `WebFetch` to retrieve this documentation for extended API capabilities.","tags":["etherscan","api","agent","skills","paulrberg","agent-skills","ai-agents"],"capabilities":["skill","source-paulrberg","skill-etherscan-api","topic-agent-skills","topic-ai-agents"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/PaulRBerg/agent-skills/etherscan-api","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add PaulRBerg/agent-skills","source_repo":"https://github.com/PaulRBerg/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.478","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 56 github stars · SKILL.md body (27,417 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:57:36.622Z","embedding":null,"createdAt":"2026-05-09T12:56:17.472Z","updatedAt":"2026-05-18T18:57:36.622Z","lastSeenAt":"2026-05-18T18:57:36.622Z","tsv":"'-1155':35,1208,1475,1600,1610,1629,1654 '-20':19,68,87,1001,1007,1039,1088,1105,1195,2260,2369 '-721':31,1115,1201,1472,1517,1598,1614,1648 '-8601':1451 '/api-pro/api-pro':2633 '/erc-721/erc-1155':88 '/llms.txt':2922 '/myapikey':197 '/references/chains.md':680,848,2327,2773,2878 '/resources/rate-limits':2864 '/scripts/detect-plan.sh':243,2474,2887 '/supported-chains':834 '/v2/api':861 '/v2/api?chainid=1&module=account&action=addresstokenbalance&address=0x...&page=1&offset=100&apikey=$etherscan_api_key':1149 '/v2/api?chainid=1&module=account&action=balance&address=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae&tag=latest&apikey=$etherscan_api_key':958 '/v2/api?chainid=1&module=account&action=balancemulti&address=0xaddress1,0xaddress2,0xaddress3&tag=latest&apikey=$etherscan_api_key':971 '/v2/api?chainid=1&module=account&action=fundedby&address=0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97&apikey=$etherscan_api_key':1921 '/v2/api?chainid=1&module=account&action=tokenbalance&contractaddress=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&address=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae&tag=latest&apikey=$etherscan_api_key':1069 '/v2/api?chainid=1&module=account&action=tokennfttx&address=0x6975be450864c02b4613023c2152ee0743572325&contractaddress=0x06012c8cf97bead5deae237070f9587f8e7a266d&startblock=0&endblock=999999999&page=1&offset=100&sort=asc&apikey=$etherscan_api_key':1525 '/v2/api?chainid=1&module=account&action=txlist&address=0x...&startblock=0&endblock=999999999&page=1&offset=10&sort=asc&apikey=$etherscan_api_key':2018 '/v2/api?chainid=1&module=account&action=txlist&address=0x8877bcb2223682048badd5b09b7ee5a8fa2f3424&startblock=0&endblock=999999999&page=1&offset=100&sort=desc&apikey=$etherscan_api_key':1347 '/v2/api?chainid=1&module=account&action=txlistinternal&address=0x...&startblock=0&endblock=999999999&page=1&offset=10&sort=asc&apikey=$etherscan_api_key':2029 '/v2/api?chainid=1&module=getapilimit&action=getapilimit&apikey=$etherscan_api_key':349 '/v2/api?chainid=137&module=account&action=balance&address=0x...&tag=latest&apikey=$etherscan_api_key':2318 '0':466,1251,1543,1559,1595,2054,2064,2789,2797,2803 '000':376,385,390,395,396,402,409,1339,1499,1502,2507,2822,2826,2830,2834,2838,2839,2845 '0000':1774,1778 '05':366 '07':364 '0x':1388,1390,1392 '0x0000':1773,1777 '0x031e6968':1541 '0x06012c8cf97bead5deae237070f9587f8e7a266d':1549 '0x454a2ab3':1573 '0x4be19c27':1545 '0x6969174fd72466430a46e18234d0b530c9fd5f49':1934 '0x6975be450864c02b4613023c2152ee0743572325':1551 '0x76be3b62873462d2142405439777e971754e8e77':1666 '0xabc1':2424 '0xaddress1':993 '0xaddress2':997 '0xb1690c08e213a35ed9bab7b318de14420fb57d8c':1547 '0xbc0ca4a67eb1555920552246409626cd60df01314dd2bcdb99718b506d9c9946':1936 '0xde0b':2419 '1':199,351,356,394,400,407,463,492,495,536,697,891,978,988,1021,1074,1220,1263,1304,1338,1379,1498,1670,1789,1847,1887,1925,2148,2203,2296,2837,2843 '10':266,579,1501,2146,2196,2209,2353,2373,2540,2828 '100':375,1270,2200,2506,2821,2825 '1000':1309 '10000':1316 '100000':252,360,419 '1000000':2400 '1000000000000000':1938 '1000000000000000000':995,1394,2364 '10371':1668 '11155420':2543 '128':930 '130':2307 '1329':596 '135499.000000':2403 '135499000000':1078,2399 '137':571,2298 '14':264 '143':599 '146':593 '1512907118':1539 '158820':1563 '1693526400':1386,1449,1459 '1708349932':1932 '172':2421 '172774.397764084972158218':2367 '172774397764084972158218':982,2363 '18':2354,2362,2376,2385 '18000000':1384 '18759540':1579 '2':101,557,721,1139,1852,1956,2856 '20':365,913,965,2832 '200':384,2829 '202106':1553 '2026':1305 '21000':1396 '2500000000000000000':999 '2def':2425 '3':430,600,750,2820 '3.12':1440 '30':2836,2842 '38':265 '4':255,625 '40000000000':1565 '42161':575,2301 '43113':2551 '43114':585,2548 '4708120':1537 '4880352':1569 '49/mo':421,2493 '5':428,637,2824 '50.25':2426 '500':389,401,408,2833,2844 '5000':2309 '53708500':1930 '56':590,2555 '59144':2303 '6':2388,2394,2398 '60508':1567 '774.40':2422 '7bae':2420 '8':2390,2482 '81':1561 '81457':2305 '8453':461,2534 '84532':2537 '97':2558 '99996':258 '99999':358 '999999999':1257 'abstract':2737 'access':484,2498 'account':142,900,992,996,1030,1180,1229,1314,1896,2643 'across':1729 'action':317,901,1031,1100,1175,1181,1230,1235,1481,1607,1897,2624,2639 'activ':2810 'actual':2055 'add':443 'address':96,602,610,882,906,909,951,961,975,985,1012,1042,1043,1046,1098,1170,1237,1240,1479,1534,1834,1862,1902,1905,1965,1986,2006,2013,2024,2105,2143,2157,2170,2230,2255,2415,2799,2802,2807 'address.tolowercase':2044 'addresstokenbal':318,1102,2644,2851 'addresstokennftbal':1112,2645 'advanc':280,391,2831 'aggreg':771 'ai':2917 'ai-friend':2916 'alloc':2218 'alon':2262 'also':2769 'altern':2457 'alway':520,1406,1594 'ambigu':638 'amoy':633 'analyt':2662 'apechain':2738 'api':3,48,58,147,154,160,165,175,181,192,486,532,667,818,849,944,948,1056,1060,1292,1296,1720,1848,1853,1910,1914,2003,2334,2792,2931 'api.etherscan.io':348,860,957,970,1068,1148,1346,1524,1920,2017,2028,2317 'api.etherscan.io/v2/api':859 'api.etherscan.io/v2/api?chainid=1&module=account&action=addresstokenbalance&address=0x...&page=1&offset=100&apikey=$etherscan_api_key':1147 'api.etherscan.io/v2/api?chainid=1&module=account&action=balance&address=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae&tag=latest&apikey=$etherscan_api_key':956 'api.etherscan.io/v2/api?chainid=1&module=account&action=balancemulti&address=0xaddress1,0xaddress2,0xaddress3&tag=latest&apikey=$etherscan_api_key':969 'api.etherscan.io/v2/api?chainid=1&module=account&action=fundedby&address=0x4838b106fce9647bdf1e7877bf73ce8b0bad5f97&apikey=$etherscan_api_key':1919 'api.etherscan.io/v2/api?chainid=1&module=account&action=tokenbalance&contractaddress=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&address=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae&tag=latest&apikey=$etherscan_api_key':1067 'api.etherscan.io/v2/api?chainid=1&module=account&action=tokennfttx&address=0x6975be450864c02b4613023c2152ee0743572325&contractaddress=0x06012c8cf97bead5deae237070f9587f8e7a266d&startblock=0&endblock=999999999&page=1&offset=100&sort=asc&apikey=$etherscan_api_key':1523 'api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=0x...&startblock=0&endblock=999999999&page=1&offset=10&sort=asc&apikey=$etherscan_api_key':2016 'api.etherscan.io/v2/api?chainid=1&module=account&action=txlist&address=0x8877bcb2223682048badd5b09b7ee5a8fa2f3424&startblock=0&endblock=999999999&page=1&offset=100&sort=desc&apikey=$etherscan_api_key':1345 'api.etherscan.io/v2/api?chainid=1&module=account&action=txlistinternal&address=0x...&startblock=0&endblock=999999999&page=1&offset=10&sort=asc&apikey=$etherscan_api_key':2027 'api.etherscan.io/v2/api?chainid=1&module=getapilimit&action=getapilimit&apikey=$etherscan_api_key':347 'api.etherscan.io/v2/api?chainid=137&module=account&action=balance&address=0x...&tag=latest&apikey=$etherscan_api_key':2316 'apikey':942,1054,1290,1908 'appchain':677 'appear':1688,2225 'appli':808,1818,2580 'arb':572 'arbitrum':550,573,2299,2721 'array':1353 'asc':1283,1284,1975 'ascend':1994 'ask':12,612,646 'assum':653 'attempt':452 'authorit':2867 'auto':116 'auto-detect':115 'avail':137,257,1177,1804,2626,2753,2771 'avalanch':300,438,581,2544,2549 'avax':580 'awar':1410 'back':685,1155,2707 'balanc':16,20,23,65,70,235,457,551,871,879,905,994,998,1003,1009,1084,2222,2233,2337,2416,2516,2651 'balancehistori':319,938,2646 'base':234,298,436,552,850,2532,2535 'base/op/avalanche/bnb':1820 'bash':171,242,344,953,966,1064,1144,1342,1441,1520,1916,2007,2313,2355,2391 'batch':1337,1708 'bc':2357,2365,2401 'becom':2625,2770 'behavior':290,2407 'berachain':2736 'bid':1575 'bitcoin':801 'bittorr':2747 'blast':2304,2724 'block':923,931,1052,1253,1259,1288,1865,1929,2663,2669 'blockchain':52,867,2286 'blockhash':1544 'blocknumb':1383,1536,1660,2088 'bnb':301,439,586,587,2552,2556 'boolean':287 'bootstrap':2257 'break':2089 'briefli':2873 'bsd':1454 'burn':1765,1779 'c':583,2546 'c-chain':582,2545 'cach':223,2471 'call':102,161,236,458,533,689,727,1792,1849,1854,1878,2004,2062,2818 'callabl':328 'calls/second':1140,1957,2816,2857 'came':758 'cannot':643 'cap':1299,1497 'capabl':2463,2932 'case':639,2189,2642,2901 'cast':742,748 'caus':2788 'celo':2728 'cex':2119 'chain':109,128,271,292,297,372,435,456,501,512,523,538,545,553,556,559,568,584,589,614,624,636,642,657,664,692,700,705,713,761,798,810,811,825,843,892,1022,1221,1368,1812,1815,1888,2277,2288,2292,2293,2325,2418,2478,2480,2483,2502,2527,2529,2530,2547,2554,2569,2587,2601,2718,2767,2779,2883,2885 'chain-specif':558,1367 'chainid':113,460,863,889,1019,1218,1885,2281 'chains.md':895,1025,1224,1891 'check':14,24,1844,2135 'ck':1557 'cli':743,747 'cli-cast':746 'client':1751 'client-sid':1750 'collect':1116,1495,1585,1711,1716,1731,1743,1757 'comma':915 'comma-separ':914 'common':2117,2287,2783 'compat':824 'complet':837,2321,2879 'complianc':1843 'concept':1658 'confirm':382,1578 'consid':611,2250 'consult':149 'consum':491 'contain':1358 'contract':73,601,609,620,1041,1089,1163,1191,1244,1906,1964,1989,2114,2124,2125,2561,2909 'contract-initi':1190 'contractaddress':1036,1241,1491,1548,1584,1665,1718 'convers':1398,2333,2350,2370 'copi':1640 'cosmos':802 'cost':1782,1845 'count':1119 'cover':62,671,2903 'credit':250,253,256,493,1790,2510 'creditlimit':359,367,418 'creditsavail':357 'creditsus':355 'cryptokitti':1555 'csv':2438 'cumulativegasus':1568 'curl':345,739,954,967,1065,1145,1343,1521,1917,2014,2025,2314 'currenc':716 'custom':2847 'd':1448 'daili':261,323,362,2509,2668,2679,2685,2817 'daily-credit':2508 'daily-stat':322 'dailyavgblocks':2664 'dailyavggaslimit':2682 'dailyavggaspric':2684 'dailyblkcount':2665 'dailyblockreward':2666 'dailygasus':2683 'dailynetutil':2674 'dailynewaddress':2673 'dailytxnfe':2672 'data':53,757,2514,2583,2597 'date':1445,1446,1455,1456 'datetim':1412,1415,1417,1434 'datetime.fromtimestamp':1420 'datetime.utcfromtimestamp':1429 'decim':1109,1657,2346,2374,2382,2395 'decis':2464 'default':516,694,710,887,1017,1216,1883,2406 'depend':2468 'deploy':617,2126 'deprec':1437,1571 'deriv':784,1768 'desc':1286 'descript':888,1018,1217,1884 'detect':117,214,217,338,1128,1953,2891 'determin':865 'differ':1611,2074,2285 'direct':687 'disambigu':238,451 'divid':2351,2371 'docs.etherscan.io':833,2632,2863,2921 'docs.etherscan.io/api-pro/api-pro':2631 'docs.etherscan.io/llms.txt':2920 'docs.etherscan.io/resources/rate-limits':2862 'docs.etherscan.io/supported-chains':832 'document':152,2898,2919,2928 'dt':1419,1462 'e.g':459,547,672,728,799,2168 'earliest':1826,1998,2008,2019 'echo':178,188,2360,2396 'edg':2188 'effect':1302 'either':2227 'end':1258 'endblock':1255,1507,1761 'endpoint':133,268,312,325,374,445,488,858,883,940,1013,1124,1152,1212,1331,1787,1803,1859,1942,1949,1981,2515,2562,2584,2617,2620,2690,2850 'enterpris':284,410,2846 'entri':1527,1692,2001,2036,2164,2192 'environ':167,183,203 'eoa':1876,1904,1962,2265 'epoch':1403 'equival':723,1443,2700 'erc':18,30,34,67,86,1000,1006,1038,1087,1104,1114,1194,1200,1207,1471,1474,1516,1597,1599,1609,1613,1628,1647,1653,2259,2368 'error':179,1968,2781,2784 'estim':2912 'etc':326,1376,2441,2519,2565,2667,2675,2852,2913 'eth':15,64,729,731,733,870,875,2116,2344,2349,2417 'ethereum':518,654,2295,2423,2719 'etherscan':2,47,55,146,164,174,180,666,766,817,820,841,947,1059,1295,1913,2490 'etherscan-api':1 'etherscan-support':840 'etherscan.io':196 'etherscan.io/myapikey':195 'event':1198,1205,1211,1531,1682 'everi':75,433,1095,2153,2500,2571,2755 'evm':663,704,797,823 'evm-chain':703 'evm-compat':822 'exampl':1062,1340,2310,2393 'exceed':2215 'except':2559 'execut':212 'exhaust':2629 'exist':564,621,1740 'exit':198 'expiri':263 'explicit':537,2240 'explor':719 'extend':2197,2930 'extern':1185,2109 'f':46 'fail':2520 'failur':473 'fall':684,1154,2706 'fallback':106,151,807,1855,1971,1973,2248,2272,2897 'fals':269,334,1153,1982,2528,2588,2691 'famili':2481 'featur':148 'fetch':27,1469,1727,1741,2177,2914 'fi':200 'field':288,1370,1583,1618,1677 'file':2877 'filter':1245,1493,1709,1721,1739,1747,2067 'find':38 'first':39,91,776,1762,1821,1873,2035,2163,2185,2195,2653 'first-fund':90,775,2652 'five':1174 'follow':2041,2623 'format':973,1071,1349,2405,2436,2444,2459,2800 'found':2806 'four':2479 'fraxtal':2729 'free':104,119,191,239,277,377,413,467,1276,1312,1334,1500,1806,2290,2513,2524,2574,2591,2692,2758,2819 'free-tier':103,1275,1311 'free/lite':926,1983 'friend':2918 'fuji':2550 'full':77,772,829,1079,2636,2648,2776 'functionnam':1574 'fund':40,43,92,777,1822,1838,1874,2056,2080,2108,2142,2175,2236,2244,2654 'fund-origin':1837 'fundedbi':98,321,1857,1901,2245,2647 'fundingaddress':1933 'fundingtxn':1935 'fungibl':1633 'gas':1562,2267,2686,2911 'gaspric':1564 'gastrack':2681 'gasus':1375,1395,1566 'gate':289,2462 'generat':2448 'genesi':2217 'get':21,189,708 'getabi':2564 'getapilimit':228,489 'getbal':730 'getlog':732 'getsourcecod':2563 'gettransactionbyhash':734 'gnosi':2727 'gnu':1444 'grant':2497 'greater':2052 'group':1702 'h':1463 'halt':211,683,2603 'handl':2782 'hash':1371,1387,1540,1662,1696,1704,1864 'helper':218,2892 'hex':922 'high':1755 'high-volum':1754 'higher':309,333,1134,1947,2611,2762 'histor':1470,2650 'histori':33,37,82,935,1166,1173,1468,2908 'hold':26,78,774,1080,1099,1106,1117,2042,2649 'hoodi':632 'human':2331 'human-read':2330 'hyperevm':2741 'i.e':2525,2589 'id':714,846,893,1023,1222,1643,1684,1714,1734,1889,2289,2294,2531,2780,2886 'ident':1513,1678 'identifi':1590,1824 'import':1416 'includ':1321,2158,2573,2757 'incom':2000,2045,2186,2213 'indic':634 'infer':513,521,534,645 'inform':207,803,2605 'initi':1192 'input':1570 'instead':471,2445 'int':1421 'intern':85,1188,1977,2020,2069,2099,2113,2141,2172 'internally-fund':2140 'interv':260,262 'intervalexpirytimespan':363 'invalid':2791,2798 'involv':1532,2011,2022,2155 'iserror':2063,2073 'iso':1450 'issu':722 'json':725,976,986,1072,1377,1535,1659,1923,2437 'json-rpc':724 'juli':1303 'katana':2740 'key':155,166,176,182,193,245,945,949,1057,1061,1293,1297,1911,1915,2793 'keyword':627 'known':1161 'l2':675 'last':929 'latest':919,920,1051 'level':1676 'like':479,629 'limit':251,259,425,1278,1783,1796,1940,2511,2796,2812,2871 'limitinterv':361 'line':247 'linea':2302,2723 'list':830,838,1094,1164,1330,1786,1993,2097,2103,2228,2322,2637,2701,2777,2880 'list-endpoint':1785 'lite':121,241,249,278,306,336,379,415,420,464,1320,1808,2492,2609,2694,2760,2823 'log':2518 'logs/transactions':787 'look':478 'lookup':93,778,2655 'loop':1157,2712 'lower':2087 'm':1461,1464 'maco':1453 'mainnet':519,578,655,2485,2533,2539 'make':158,530 'malform':2801 'mani':619 'mantl':2308,2725 'manual':337,785 'map':227 'markdown':2412,2414,2450 'match':2084,2187 'maximum':1307 'may':2106 'megaeth':2742 'memecor':2743 'mention':539,543 'messag':352,979,989,1075,1380,1926,2787 'methodid':1572 'metric':2680,2687 'mid':510 'mid-sess':509 'mine':2221 'mint':1763,1775 'miss':206,2139 'modul':896,1026,1179,1225,1892,2560,2638 'mon':597 'monad':598,2735 'moonbeam':2730 'moonriv':2731 'move':1638 'msg.value':2131 'multi':108,960,984,2276 'multi-address':959,983 'multi-chain':107,2275 'multipl':623,1683,1690 'must':782 'n':1639 'naiv':1433 'name':546,812 'narrow':1758 'nativ':63,715,874,877,1830,2251 'need':789,936,2269 'network':2677 'network-wid':2676 'nft':28,1202,1466,1581,1589 'nft-specif':1580 'nich':674 'non':796,2129,2628,2698 'non-evm':795 'non-exhaust':2627 'non-pro':2697 'non-zero':2128 'nonc':1542 'normal':84,1184,1976,2009,2093,2110 'note':751,1279 'notok':2790 'number':924,1254,1260,1265,1289 'object':1356 'occasion':2166 'offset':1268,1306,1509,2145,2199 'ok':353,980,990,1076,1381,1927 'older':934 'omit':1652,1725,2065 'one':275,574,1086,1232,1528,1642,1686,1697,2160,2300,2722 'op':299,437,576,577,2538,2541 'opbnb':2732 'order':2098 'origin':44,1839 'otherwis':1780 'outgo':2047,2159,2167,2211 'outgoing-before-incom':2210 'output':244,2404,2458,2472 'overview':50 'page':1261,1264,1273,1508,2202 'pagin':1267,1298,1335,1496,2205 'paid':126,270,291,295,370,455,500,1318,1503,1814,1960,2476,2489,2526,2577,2586,2765 'paid-chain':454,499,1813 'paid-on':125,294,369,2475,2764 'paid-plan':2576 'pair':1701 'paramet':114,864,884,885,1014,1015,1213,1214,1484,1604,1881,2282 'pass':1490,1717 'pattern':603 'per':220,426,1272,1529,1588,1698,1791,2005,2379,2710,2895 'per-nft':1587 'per-token':2709 'pick':1996,2033 'plain':2439 'plan':76,213,229,248,273,368,1127,1132,1301,1333,1945,1952,2461,2491,2523,2572,2578,2590,2714,2756,2814,2815,2889 'plan-gat':2460 'plan-tier':2888 'plasma':2744 'plus':283,404,494,2841 'pol':569 'polygon':549,570,2297,2311,2427,2720 'practic':2208 'pre':2174,2220 'pre-fund':2173 'pre-min':2219 'precis':2359 'prefer':1856,2429,2695 'prerequisit':153 'present':1645,2408 'previous':1488 'price':1111,1788 'primarili':565 'pro':80,97,123,131,267,282,311,315,373,403,444,470,487,769,939,1123,1151,1802,1850,1858,1941,1948,1980,2615,2619,2689,2699,2840,2849 'pro-on':130,314,2614 'pro-styl':768 'probe':232,380,469,502 'proceed':650 'produc':1407 'profession':281,397,2835 'prompt':528 'proven':1841 'provid':607 'proxy/router':2123 'public':695,711,763 'python':1413,1439 'qualifi':1999,2191 'quantiti':1108,1621 'queri':17,51,66,71,83,143,869,872,873,952,962,1004,1005,1048,1063,1167,1168,1341,2151,2284,2312,2598 'queryabl':303,933 'r':1458 'rais':422 'rare':2216,2263 'rate':424,1795,2795,2811,2870 'rate-limit':1794 'rate-limit-per-second':423 're':507 're-run':506 'read':140 'read-on':139 'readabl':2332 'reconstruct':1706 'refer':661,793,2876 'refund':2134 'regardless':1141,1958,2858 'repeat':2270 'report':417,2238 'request':853,2433,2595 'requir':886,1016,1130,1215,1626,1882,1939,1943,2487,2579,2613 'resolv':698 'respons':474,754,972,1070,1348,1526,1617,1649,1880,1922,2032,2335,2785 'restrict':1816 'result':225,354,981,991,1077,1271,1350,1382,1691,1748,1928,2366,2402,2409 'retri':2875 'retriev':2926 'return':1082,1101,1182,1431,1860,1966,2152,2336 'rout':2121 'rpc':688,696,712,726,737,764,806 'rule':535 'run':215,508,2893 'scale':2361,2397 'scan':1974,1990,2182 'schedul':2868 'scope':138 'script':341 'second':427,1362,1405,1452 'section':1489,2467 'see':831,847,894,1024,1223,1274,1890,2326,2630,2772,2861 'sei':594,595,2734 'selfdestruct':2133 'semant':1511 'semi':1632 'semi-fung':1631 'sent':1829,2115 'separ':916 'sepolia':631,2536,2542 'server':1723,1737 'server-sid':1722,1736 'session':221,511,2896 'set':170,187,898,903,1028,1033,1227,1894,1899 'shape':1605 'share':1482,1693 'shell':1442 'show':2231 'side':1724,1738,1752 'sinc':2266 'singl':72,950,974,1635,1877 'skill':5,61,706,749,2704,2906 'skill-etherscan-api' 'small':2179 'smallest':2340,2345 'smart':588,2553 'solana':800 'sonic':591,592,2733 'sorri':476 'sort':1281,1510 'source-paulrberg' 'specif':560,567,1369,1582,2435 'specifi':2279,2455 'stabl':2745 'standard':279,331,386,449,941,1131,1784,1944,2827 'start':447,1252 'startblock':1249,1506,1760 'stat':324,2670,2671 'status':350,462,465,977,987,1073,1378,1924,2786 'still':1817 'string':1365,1620 'structur':1879 'style':770 'suffici':2495 'support':110,434,815,821,842,910,1811,2324,2501,2717,2882 'swap':1606 'symbol':717 'sz':1465 'tabl':1485,2413,2451 'tag':917,1049,1053 'taiko':2746 'testnet':626,630,635,2486,2557,2751 'text':2440 'throttl':1137,1954,2854 'tie':2090 'tier':105,230,310,1143,1277,1313,1319,1797,1961,2291,2860,2890 'time':1092 'timestamp':1361,1385,1397,1399,1423,1538,1661,1866,1931 'timezon':1409,1418 'timezone-awar':1408 'timezone.utc':1425 'to.tolowercase':2043 'token':25,69,561,563,773,878,1002,1008,1040,1096,1107,1162,1196,1203,1209,1243,1713,1733,2242,2348,2380,2381,2384,2656,2661,2711 'token-on':2241 'token1155tx':1206,1248,1327,1602,1608 'tokenbal':1035,1081,1158 'tokenbalancehistori':2660 'tokendecim':1558,1593,1650 'tokenholderlist':320,2657 'tokenid':1552,1577,1586,1625,1667,1699,1749 'tokeninfo':2658 'tokennam':1554,1591,1671 'tokennfttx':1199,1247,1326,1519,1680 'tokensupplyhistori':2659 'tokensymbol':1556,1592,1672 'tokentx':1193,1246,1325,2274 'tokenvalu':1619,1669,1700 'topic-agent-skills' 'topic-ai-agents' 'total':2484 'trace':42,1840 'transact':41,81,1165,1172,1186,1189,1355,1823,1827,1871,1978,1992,2805,2907 'transactionindex':1560,2092 'transfer':29,32,36,89,1197,1204,1210,1467,1476,1518,1530,1601,1622,1636,1728,1745,1767,1781,2261 'transferbatch':1681 'tri':482 'true':272,293,304,313,329,1125,1950,2621 'two':286,1616,2002 'tx':1422,1675,1687,1863,2081,2111,2154,2237 'tx-level':1674 'txlist':1183,1323,1515,1799,2137,2150,2517 'txlistintern':1187,1324 'txs':2010,2021,2070,2094,2100 'typic':2375 'tz':1424 'u':1447,1457 'uint256':1576 'unavail':343,780 'unichain':2306,2726 'unifi':57,856 'unit':2341 'unix':1360,1402 'unknown':285 'unlock':432 'unmet':2848 'unsupport':656,1907 'upgrad':2607 'url':720,851 'usag':2278 'usd':1110 'usdc':2386,2392 'usdt':2387 'use':8,54,135,254,554,738,854,1120,1428,1835,1969,2072,2356,2442,2641,2900,2923 'user':11,209,526,542,606,648,660,792,2428,2432,2454,2594 'utc':1411 'v2':49,59,668,819,857 'valid':156 'valu':246,1374,1393,1831,1868,1937,2048,2061,2252 'vari':2378 'variabl':168,184,204 'verif':2910 'verifi':162 'via':111,701 'volum':1756 'vs':120,122,429,1764,1766 'wait':2872 'wallet':22,908,1045,1239 'wbtc':2389 'webfetch':2924 'wei':2050,2328,2342 'whichev':2083 'wide':2678 'window':2180 'withdraw':2120 'word':628 'work':2566 'world':2739 'xdc':2748 'y':1460 'yes':387,388,392,393,398,399,405,406,411,412,897,902,907,943,1027,1032,1037,1044,1055,1226,1231,1238,1291,1893,1898,1903,1909 'z':173 'zero':2060,2130 'zero-valu':2059","prices":[{"id":"3b2fe138-3695-491b-a7f7-21225a50f23e","listingId":"b9553fd6-1758-41b5-abe8-683faad5500b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"PaulRBerg","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-09T12:56:17.472Z"}],"sources":[{"listingId":"b9553fd6-1758-41b5-abe8-683faad5500b","source":"github","sourceId":"PaulRBerg/agent-skills/etherscan-api","sourceUrl":"https://github.com/PaulRBerg/agent-skills/tree/main/skills/etherscan-api","isPrimary":false,"firstSeenAt":"2026-05-09T12:56:17.472Z","lastSeenAt":"2026-05-18T18:57:36.622Z"}],"details":{"listingId":"b9553fd6-1758-41b5-abe8-683faad5500b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"PaulRBerg","slug":"etherscan-api","github":{"repo":"PaulRBerg/agent-skills","stars":56,"topics":["agent-skills","ai-agents"],"license":"mit","html_url":"https://github.com/PaulRBerg/agent-skills","pushed_at":"2026-05-17T10:33:19Z","description":"PRB's collection of agent skills","skill_md_sha":"b61e8f6a8c8f38438bf1c0d3f12b02758d14e41b","skill_md_path":"skills/etherscan-api/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/PaulRBerg/agent-skills/tree/main/skills/etherscan-api"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"etherscan-api","description":"This skill should be used when the user asks to \"check ETH balance\", \"query ERC-20 balance\", \"get wallet balance\", \"check token holdings\", \"fetch NFT transfers\", \"ERC-721 transfer history\", \"ERC-1155 transfer history\", \"find first funding transaction\", \"trace fund origin\", \"who funded this address\", \"query Etherscan\", or mentions Etherscan API, blockchain balance queries, NFT transfer history, multi-chain balance lookups, or wallet provenance tracing."},"skills_sh_url":"https://skills.sh/PaulRBerg/agent-skills/etherscan-api"},"updatedAt":"2026-05-18T18:57:36.622Z"}}