Skip to content

Transfer History

Fetch paginated transfer history for a wallet address across any supported chain.

GET/v1/wallets/{address}/transfers

Parameters

ParameterTypeDescription
address*stringWallet address (path parameter)
chainoptionalstringChain slug (e.g., ethereum, bsc, polygon). Omit to search all chains.
fromBlockoptionalintegerStart block number
toBlockoptionalintegerEnd block number
fromDateoptionalISO 8601Start date (e.g., 2026-01-01T00:00:00Z)
toDateoptionalISO 8601End date. Max range: 365 days.
assetoptionalstringFilter by asset contract address
directionoptionalstring = bothFilter: in, out, or both
includePricesoptionalboolean = falseInclude USD/fiat prices at time of transfer
currencyoptionalstring = USDFiat currency for prices (36 supported)
limitoptionalinteger = 100Results per page (max 1000)
cursoroptionalstringPagination cursor from previous response

Request

bash
curl 'https://api.cryptachain.com/v1/wallets/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/transfers?chain=ethereum&limit=2&includePrices=true' \
  -H 'X-API-Key: $CRYPTACHAIN_API_KEY'
typescript
const res = await fetch(
  'https://api.cryptachain.com/v1/wallets/0xd8dA.../transfers?' +
  new URLSearchParams({ chain: 'ethereum', limit: '2', includePrices: 'true' }),
  { headers: { 'X-API-Key': process.env.CRYPTACHAIN_API_KEY! } }
);
const data = await res.json();
python
res = requests.get(
    'https://api.cryptachain.com/v1/wallets/0xd8dA.../transfers',
    params={'chain': 'ethereum', 'limit': 2, 'includePrices': True},
    headers={'X-API-Key': os.environ['CRYPTACHAIN_API_KEY']}
)

Response

Response 200 OK

json
{
  "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
  "chain": "ethereum",
  "transfers": [
    {
      "txHash": "0xabc123...",
      "blockNumber": 21950000,
      "timestamp": "2026-04-04T14:30:00Z",
      "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
      "to": "0x1234567890abcdef1234567890abcdef12345678",
      "value": "1.5",
      "asset": "ETH",
      "contractAddress": null,
      "direction": "out",
      "price_usd": 3850.25,
      "value_usd": 5775.38
    },
    {
      "txHash": "0xdef456...",
      "blockNumber": 21949000,
      "timestamp": "2026-04-04T12:15:00Z",
      "from": "0xabcdef1234567890abcdef1234567890abcdef12",
      "to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
      "value": "100",
      "asset": "USDC",
      "contractAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "direction": "in",
      "price_usd": 1.00,
      "value_usd": 100.00
    }
  ],
  "cursor": "eyJibG9jayI6MjE5NDkwMDB9",
  "hasMore": true
}

Response fields

FieldTypeDescription
txHashstringTransaction hash
blockNumberintegerBlock number
timestampstringISO 8601 UTC timestamp
fromstringSender address
tostringRecipient address
valuestringTransfer amount (decimal string to preserve precision)
assetstringAsset symbol (ETH, USDC, etc.)
contractAddressstring|nullToken contract address (null for native transfers)
directionstringin or out relative to the queried address
price_usdnumberPrice per unit at time of transfer (if includePrices=true)
value_usdnumberTotal value in fiat (if includePrices=true)
cursorstringPass to next request for pagination
hasMorebooleanWhether more results exist

Pagination

Use cursor-based pagination for large result sets:

typescript
let cursor: string | undefined;
do {
  const params = new URLSearchParams({ chain: 'ethereum', limit: '100' });
  if (cursor) params.set('cursor', cursor);

  const res = await fetch(`${BASE}/v1/wallets/${addr}/transfers?${params}`, {
    headers: { 'X-API-Key': key },
  });
  const data = await res.json();

  process(data.transfers);
  cursor = data.hasMore ? data.cursor : undefined;
} while (cursor);

CryptaChain API — built by CryptaCount Luxembourg S.a r.l.