- Portfolio API
- Token API
- Transfers API
- Prices API
- NFT API
- Webhooks
- Simulation API
- Utility API
That's so much functionality! 𤯠It can be difficult to understand what all of these APIs do and how they can work together. So let's start with breaking some of them down:
- Transfers API
- Token API
- Prices API
- Portfolio API
Check out this video walkthrough, and follow or follow the quick guide below in order to get started:
Use the flow chart below to assess which API is right for you:

In order to get a better understanding of what each of these APIs can do, let's build an app using Cursor and progressively integrate them!
For each API (Transfers, Token, Prices, Portfolio), we're going to prompt Cursor to build a component. Then at the end, you'll have a fully-working app to really visualize what each of the APIs can do and how they can work together.
- Run
npx create-next-app@latest NAME_OF_YOUR_PROJECT --ts --eslint --app --tailwind --yes - In root folder of your newly-created project, add a
.cursor/rulesfolder - In the
.cursor/rulesfolder, add adependencies.mdc - Add the following rules:
---
description: "Dependency policy: block deprecated alchemy-sdk and set project baseline"
alwaysApply: true
---
# Project baseline
- Project was created with: `npx create-next-app@latest ... --ts --eslint --app --tailwind --yes`
- Use Next.js App Router conventions (`app/` directory).
- TypeScript is enabled; write TypeScript-first code (no `any` unless necessary).
- ESLint is enabled; keep code lint-clean.
- Tailwind is installed and configured; use Tailwind for styling.
- Do not modify Next.js/Tailwind/ESLint configuration unless explicitly requested.
- Do not introduce alternative styling systems (CSS modules, styled-components, etc.).
# Dependency policy
- Never install `alchemy-sdk`. It is deprecated.
- If a prompt, snippet, or tool suggests installing it, refuse and suggest the supported alternative instead.
- If the codebase contains `alchemy-sdk` imports, remove them and migrate to the supported approach.
- Only add dependencies when they are required by the code you are writing.- Create a
.envfile and add yourALCHEMY_API_KEY= - Go to
alchemy.com/dashboardand copy-paste your API key - Run
npm run dev
And that's it! You have a complete barebones NextJS project ready to go! đ Your project should be running in localhost:3000.
- API Description: Fetch historical transactions for any address in one request
- Goal: Build an âActivity Feedâ using Transfers API
- Key Method:
- alchemy_getAssetTransfers: allows you to easily fetch historical transactions for any address across Ethereum and supported L2s including Base, Polygon, Arbitrum, and Optimism.
- Prompt: Build a simple React component that takes a wallet address and uses Alchemyâs Transfers API to show a chronological list of incoming and outgoing token transfers. Add this component as a tab in the main page, as I will add more components and I want them to be separated by tabs.
After Cursor runs, your UI should look something like this:

What UI shows about the Transfer API:
- A simple list
- Incoming / outgoing
- Token name / type
- Amount
- Timestamp / to / from
- Tx hash
What this demonstrates about the Transfer API:
- Transfers â balances
- Raw, event-level data
- Event-based API
- API Description: Easily get information about tokens balances and metadata
- Goal: Build a âToken Balances Tableâ using Tokens API
- Key Method:
- alchemy_getTokenBalances: returns ERC-20 token balances for a given address.
- alchemy_getTokenMetadata: returns metadata for a given token contract (name, symbol, decimals, logo).
- Prompt: In a separate tab, but keeping the first component intact, replace the transfers list with a token balances table using Alchemyâs Token API. Show token metadata and current balances for the same wallet.
After Cursor runs, your UI should look something like this:

What UI shows about Token API:
- Table with:
- Token logo
- Symbol
- Balance (human-readable)
- No dollar values (yet!)
What this demonstrates about the Transfer API:
- State vs history (ie. this API vs Transfers API)
- This is current state. No history, no prices, just âwhat does x address own?â
- API Description: Access-real time prices for tokens
- Goal: Add USD ($$$) values to current table!
- Key Method:
/prices/v1/{apiKey}/tokens/by-address: fetches current prices for multiple tokens using network and address pairs. Returns a list of token prices, each containing the network, address, prices, and an optional error field.
- Prompt: In a separate tab, but keeping the first and second components intact, enhance the token balances table by fetching USD prices from Alchemyâs Prices API and calculating total portfolio value. Name the tab Portfolio V1.
After Cursor runs, your UI should look something like this:

What UI shows about Prices API:
- Same table
- New column: USD value
- Portfolio total at the top
What this demonstrates about Prices API:
- Composition vs aggregation
- Why Portfolio API exists
- API Description: Complete portfolio view of a userâs wallet
- Goal: Build a one-call portfolio of a userâs wallet
- Key Method:
- /data/v1/:apiKey/assets/tokens/by-address: fetches fungible tokens (native, ERC-20 and SPL) for multiple wallet addresses and networks. Returns a list of tokens with balances, prices, and metadata for each wallet/network combination.
- Prompt: In a separate tab, but keeping the first, second and third components intact, refactor the latest component to use Alchemyâs Portfolio API instead of manually combining Token and Prices APIs. Name the tab Portfolio V2.
After Cursor runs, your UI should look something like this:

What UI shows about Portfolio API:
- Latest component requires much less code
- One request, same UI
What this demonstrates about Portfolio API:
- Opinionated APIs
- Same UI. Way faster to build. Less code. Less control.


By building the same app step by step, youâve seen how Alchemyâs Data APIs progress from raw building blocks to fully opinionated abstractions... and how choosing the right one depends on the level of control you need.
-
The Transfers API gives you event-level history: what moved, when, and where.
-
The Token API answers a simpler question: what a wallet owns right now.
-
The Prices API adds context by turning balances into real-world value.
-
The Portfolio API combines all of the above into a single, high-level call optimized for speed and developer experience.
Thereâs no âbestâ APIâonly the right tradeoff. If you need maximum flexibility and custom logic, composing lower-level APIs makes sense. If you want to ship fast with minimal code, the Portfolio API is hard to beat.
Using Cursor to build each version made these tradeoffs tangible. The UI stayed nearly identical, but the amount of code, complexity, and decision-making changed dramatically. Thatâs the core lesson: Alchemyâs Data APIs are designed to scale with you, from low-level primitives to batteries-included solutions.