Skip to content

How to fetch a Smart Account's ERC-20 tokens

Alchemy provides several Enhanced APIs, which are especially useful for querying information about the smart accounts you create using Account Kit, such as the account's ERC-20 Token balances using the Token API.

For the purposes of our example, we will use the Token API to query our smart account's data by extending the Alchemy Smart Account Client with Enhanced APIs.

1. Install the alchemy-sdk

Alchemy has developed a Typescript SDK to make development with the Enhanced APIs simple. The SDK includes ways to leverage Alchemy's Simulation API, Token API, Transact API, NFT API, Webhooks and Websockets, and more across Alchemy's supported chains. Take a look at the code here.

We will use the Alchemy SDK Client to extend our Alchemy Smart Account Client using the client's alchemyEnhancedApiActions method. That way, our client will have direct access to the Enhanced APIs.

To use the Alchemy SDK in our project directory, we will need to install the required package:

npm i alchemy-sdk

2. Extend the Alchemy Smart Account Client with Enhanced APIs

Then, all we need to do is create an alchemy client from the Alchemy SDK, create an AlchemySmartAccountClient from Account Kit, and then extend the client with functionality from the SDK client using withAlchemyEnhancedApis. We can get the smart account's address from the AlchemySmartAccountClient in order to fetch the smart account's ERC-20 Tokens in just 1 line of code!

import {
} from "@alchemy/aa-alchemy";
import { LocalAccountSigner, sepolia } from "@alchemy/aa-core";
import { Alchemy, Network } from "alchemy-sdk";
const alchemy = new Alchemy({
  network: Network.ETH_SEPOLIA,
  apiKey: "YOUR_API_KEY",
const client = (
  await createModularAccountAlchemyClient({
    chain: sepolia,
    apiKey: "YOUR_API_KEY",
    signer: LocalAccountSigner.mnemonicToAccountSigner("OWNER_MNEMONIC"),
const address = client.getAddress();
// get all tokens owned by the smart account
export const tokenBalances = client.core.getTokenBalances(address);

That's it! There are so many more Enhanced APIs the Alchemy SDK exposes, and can be useful for development with Account Abstraction. Try it out here, and check out How to fetch a Smart Account's NFTs for another example.