Introducing the Multichain Transfers API (Beta)
Author: Alchemy
.png&w=3840&q=75)
Wallets and portfolio apps are one of the fastest-growing categories onchain. The crypto wallet market is on track to grow from $15.5B in 2025 to $100.8B by 2033, a 26.6% CAGR. We're proud to help leading wallets like Zerion, Rainbow, Phantom, Trust Wallet, and Coinbase Wallet power their transfer history and balance tracking.
One of the most used methods for these teams is alchemy_getAssetTransfers. Tens of thousands of teams called it in the last 30 days, making it the #2 most-used Data API by request volume. Teams use it to pull a wallet's native, ERC-20, ERC-721, and ERC-1155 transfer history and power activity feeds, balance tracking, and portfolio views.
Today, we're upgrading that experience: the Multichain Transfers API returns a single wallet's transfer history across up to 5 networks in one call, already merged and ordered by time.
It's live in beta now: try it yourself.
One call, multiple chains
Today, calling alchemy_getAssetTransfers gets you one network per request. Scaling to more chains means multiplying calls, merging the results yourself, and deciding what to do when one network is slow or comes back with an error.
So we upgraded it. Four key upgrades in our Multichain Transfers API:
- Multichain in one call. Pass a list of networks and get back one list, ordered by
blockTimestamp. - Query in both directions at once. Set
directiontoto,from, orbothand get incoming and outgoing transfers together. - Time-based filtering. Filter by
fromTimestampandtoTimestampinstead of block numbers, and sort results byblockTimestampwithorder(ascordesc). - A cleaner response shape. Token amounts live under
fungible, NFT data undernfts,blockTimestampis always at the top level, and so iscontractAddressfor token and NFT transfers.
If one of the networks you asked for doesn't return a result, the call still comes back with a 200 and everything that did load, plus an error.partialErrors array naming what failed.
Try it
curl --request POST \
--url https://api.g.alchemy.com/data/v1/YOUR_API_KEY/transfers/by-address \
--header 'Content-Type: application/json' \
--data '{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"direction": "both",
"networks": ["eth-mainnet", "base-mainnet", "matic-mainnet"],
"fromTimestamp": "2026-08-01T00:00:00Z",
"toTimestamp": "2026-08-06T00:00:00Z",
"category": ["external", "erc20", "erc721", "erc1155"],
"order": "desc",
"maxCount": 100
}'The response is one transfers array spanning every network you asked for, newest first, with a pageKey to pull the next page (trimmed for readability):
{
"transfers": [
{
"network": "base-mainnet",
"blockTimestamp": "2026-08-05T23:58:41Z",
"category": "erc20",
"from": "0x1f98abcd...",
"to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"contractAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"fungible": { "value": 250, "decimals": 6, "asset": "USDC" }
},
{
"network": "eth-mainnet",
"blockTimestamp": "2026-08-05T23:55:12Z",
"category": "external",
"from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"to": "0x7a250d...",
"fungible": { "value": 0.5, "decimals": 18, "asset": "ETH" }
}
],
"pageKey": "eyJ0cyI6..."
}Native, ERC-20, ERC-721, and ERC-1155 transfers work on all 14 supported networks (11 mainnets and 3 testnets), including Ethereum, Base, Polygon, Arbitrum, Optimism, and BNB Chain (full list). Internal transfers are available on Ethereum, Base, Polygon, and Arc (mainnet and testnet), and special NFTs on Ethereum. We're adding more networks all the time.
One thing to know: category is required, so pass at least one in every request.
Get started
The Multichain Transfers API is now in beta at POST /data/v1/{apiKey}/transfers/by-address. Try it yourself in the docs playground, no signup required. Or swap your own API key into the example above, and migrate your existing getAssetTransfers integration to the new endpoint to drop the per-network loop.
How is this different from alchemy_getAssetTransfers?
getAssetTransfers returns transfers for one network per call. The Multichain Transfers API takes a list of up to 5 networks and returns one merged, time-ordered list, in either or both directions, in a single request.
What happens if one network fails?
You still get a 200 response with every transfer that loaded successfully, plus an error.partialErrors array listing which networks or categories didn't come back. Nothing fails silently and nothing blocks on the slowest network.
Alchemy Newsletter
Be the first to know about releases
Sign up for our newsletter
Get the latest product updates and resources from Alchemy
By entering your email address, you agree to receive our marketing communications and product updates. You acknowledge that Alchemy processes the information we receive in accordance with our Privacy Notice. You can unsubscribe anytime.
Related articles

Introducing the Dashboard AI Assistant
Ask Alchemy is live in the Dashboard. Debug requests, check usage, and manage your setup in plain language.

This month at Alchemy: October edition
Arc builder credits, Tokyo regional support, an RPC benchmarking guide, and more from October at Alchemy.

HyperCore streaming is now in early access on Alchemy
Stream Hyperliquid order books, best bid and offer, and fills over WebSocket, on the same Alchemy account and API key you already use for HyperEVM RPC.