# ERC-20 Token Transfer History by Ethereum Address

> ERC-20 Token Transfer History by Ethereum Address is a paid API for AI agents from 2s.io, paid per call via x402, $0.0036/call, status unknown (last checked 2026-09-14).

Retrieves the full ERC-20 token transfer history for an Ethereum (or EVM-compatible) wallet address, with optional filtering by token contract, via Etherscan V2.

## Facts

- Endpoint: GET https://2s.io/api/crypto/token-transfers
- Price: $0.0036/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/erc-20-token-transfer-history-by-ethereum-address-1ccf7d6c
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_9veWy-Y5_llef0_phuKmh

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability erc-20-token-transfer-history-by-ethereum-address-1ccf7d6c
```

Example prompt: Show me the ERC-20 token transfer history for Ethereum address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 — I want the most recent 25 transfers sorted newest first, and only show transfers for the USDC contract at 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48.

## When to prefer this

Use this endpoint when you need on-chain ERC-20 token transfer records for a specific Ethereum or EVM-compatible wallet address, especially when you need structured metadata (name, symbol, decimals) alongside raw transfer values. Prefer this over generic blockchain explorers when you need paginated, filterable results ready for agent consumption and are willing to pay per-call at a low fixed rate.

## Known failure modes

- Missing required 'address' parameter returns a validation error
- Invalid Ethereum address format may return empty results or an upstream error
- Unsupported chainId returns an error or empty dataset if Etherscan lacks multichain coverage for that chain
- Offset exceeding maximum of 100 returns a validation error
- Rate limiting or upstream Etherscan API unavailability may return a 5xx error
- Wallet with no ERC-20 transfers returns an empty result set

## How this service works

ERC-20 token transfer history for an Ethereum address (via Etherscan V2). Each transfer: hash, block, timestamp, from/to, token contract, name, symbol, decimals, and value (raw + decimal-adjusted). Optionally filter to one token contract. Paginate with page + offset. Defaults to Ethereum mainnet; other EVM chains by chainId where upstream coverage allows. Trace what tokens a wallet sent/received.

## Output

A paginated list of ERC-20 token transfer events for the specified address, each containing transaction hash, block number, Unix timestamp, from and to addresses, token contract address, token name, symbol, decimals, raw value, and decimal-adjusted value. Results can be filtered to a single token contract and sorted ascending or descending.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "queryParams"
   ],
   "properties": {
    "type": {
     "const": "http"
    },
    "method": {
     "const": "GET"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "address"
     ],
     "properties": {
      "page": {
       "type": "integer",
       "minimum": 1
      },
      "sort": {
       "enum": [
        "asc",
        "desc"
       ],
       "type": "string"
      },
      "offset": {
       "type": "integer",
       "maximum": 100,
       "minimum": 1
      },
      "address": {
       "type": "string"
      },
      "chainId": {
       "type": "integer",
       "default": 1,
       "minimum": 1,
       "description": "EVM chain id; defaults to 1 (Ethereum). Other chains require upstream multichain coverage."
      },
      "contractAddress": {
       "type": "string",
       "description": "Filter to one ERC-20 contract."
      }
     },
     "additionalProperties": false
    }
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/erc-20-token-transfer-history-by-ethereum-address-1ccf7d6c/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from 2s.io](https://www.zero.xyz/host/2s.io/llms.txt)
