Documentation Index
Fetch the complete documentation index at: https://docs.moralis.com/llms.txt
Use this file to discover all available pages before exploring further.
Migrating from Alchemy to Moralis
Moralis is a drop-in alternative to Alchemy. Moralis combines RPC node access, an enriched Web3 Data API, and real-time Streams behind a single API key — so you can replace Alchemy’s enhanced APIs (NFT, Token, Prices, Portfolio, Transfers, Webhooks) and, if you want, your RPC traffic too. This page maps the Alchemy surface to Moralis method-by-method so the swap is mostly search-and-replace.
Alchemy and Moralis solve the same problem: get clean, decoded, enriched blockchain data into your app without running indexers. Alchemy exposes this through its Enhanced APIs (mostly JSON-RPC method extensions plus REST Data APIs); Moralis exposes it through a REST Web3 Data API. Field names differ, but the resource shapes line up — most teams write a thin response adapter and keep shipping.
Quick reference: Alchemy → Moralis
NFT API
| Alchemy method | Moralis equivalent |
|---|
getNFTsForOwner | Get NFTs by Wallet |
getContractsForOwner | Get NFT Collections by Wallet |
getNFTsForContract | Get NFTs by Contract |
getNFTMetadata / getNFTMetadataBatch | Get NFT Metadata |
getContractMetadata | Get NFT Collection Metadata |
getOwnersForNFT | Get NFT Owners by Token ID |
getOwnersForContract | Get NFT Owners by Contract |
getFloorPrice | Get NFT Floor Price by Contract |
getNFTSales | Get NFT Trades by Contract |
getTransfersForContract | Get NFT Contract Transfers |
getTransfersForOwner | Get NFT Trades by Wallet |
summarizeNFTAttributes | Get NFT Traits by Collection |
computeRarity / search by trait | Get NFTs by Traits |
getSpamContracts / isSpamContract | Built in — every NFT response includes a possible_spam flag |
Token API & Prices API
| Alchemy method | Moralis equivalent |
|---|
alchemy_getTokenBalances | Get Token Balances by Wallet |
alchemy_getTokenMetadata | Get Token Metadata |
alchemy_getTokenAllowance | Get Wallet Token Approvals |
| Prices — Token Prices by Address/Symbol | Get Token Price · Get Multiple Token Prices |
| Prices — Historical Token Prices | Get OHLCV by Pair Address |
| Token holders (via indexing) | Get Token Holders |
Transfers & transaction data
| Alchemy method | Moralis equivalent |
|---|
alchemy_getAssetTransfers | Get Wallet History (native + ERC20 + NFT, decoded) |
alchemy_getTransactionReceipts | Get Wallet Transactions |
| Decoded transaction view | Get Decoded Wallet Transactions |
eth_getTransactionByHash | Get Transaction by Hash |
Portfolio API (multichain)
| Alchemy endpoint | Moralis equivalent |
|---|
Tokens by Wallet (/assets/tokens/by-address) | Cross-Chain Token Balances |
NFTs by Wallet (/assets/nfts/by-address) | Get NFTs by Wallet |
| NFT Collections by Wallet | Get NFT Collections by Wallet |
| Transaction History by Wallet | Get Wallet History |
| Net worth (derived) | Get Wallet Net Worth |
Real-time — Webhooks (Notify) & Subscription API → Streams
| Alchemy feature | Moralis equivalent |
|---|
| Address Activity webhook | EVM Streams — address activity + ERC20/native filters |
| NFT Activity / NFT Metadata Update | EVM Streams — NFT transfer filters |
| Mined / Dropped Transaction | EVM Streams |
| Custom (GraphQL) webhook | EVM Streams — contract-event + smart-filter expressions |
Subscription API (eth_subscribe, alchemy_minedTransactions) | Streams API (push delivery) or websockets via RPC Nodes |
Solana (SVM)
| Alchemy capability | Moralis equivalent |
|---|
Solana token balances / getTokenAccountsByOwner | Get SPL Token Balances · Get Portfolio |
Solana NFTs (DAS getAssetsByOwner) | Get NFTs by Wallet |
| Solana NFT metadata | Get NFT Metadata |
| Solana token prices | Get Token Price |
| Solana swaps / transactions | Get Wallet Swaps |
| Real-time events | Solana Streams |
RPC
| Alchemy feature | Moralis equivalent |
|---|
| Supernode JSON-RPC | Moralis RPC Nodes |
Endpoint details
Each section shows the Alchemy call, the Moralis URL(s) that replace it by chain, and a runnable example.
NFTs by wallet
Alchemy: GET https://{network}.g.alchemy.com/nft/v3/{apiKey}/getNFTsForOwner
| Chain | Moralis Equivalent | Moralis URL | Documentation |
|---|
| EVM | Get NFTs by Wallet | https://deep-index.moralis.io/api/v2.2/:address/nft | Documentation |
| Solana | Get NFTs by Wallet | https://solana-gateway.moralis.io/account/:network/:address/nft | Documentation |
# Alchemy
curl "https://eth-mainnet.g.alchemy.com/nft/v3/$ALCHEMY_API_KEY/getNFTsForOwner?owner=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&withMetadata=true"
# Moralis
curl "https://deep-index.moralis.io/api/v2.2/0xd8da6bf26964af9d7eed9e03e53415d37aa96045/nft?chain=eth&format=decimal&normalizeMetadata=true&media_items=true" \
-H "X-API-Key: $MORALIS_API_KEY"
Notes: Moralis returns ERC721 and ERC1155 holdings with normalized metadata, hosted media previews, and a possible_spam flag — no separate getSpamContracts call needed.
Token balances
Alchemy: POST {rpcUrl} with method alchemy_getTokenBalances
| Chain | Moralis Equivalent | Moralis URL | Documentation |
|---|
| EVM | Get Native & ERC20 Balances | https://deep-index.moralis.io/api/v2.2/wallets/:address/tokens | Documentation |
| Solana | Get Portfolio (native + SPL) | https://solana-gateway.moralis.io/account/:network/:address/portfolio | Documentation |
# Alchemy
curl "https://eth-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY" \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"alchemy_getTokenBalances","params":["0xd8da6bf26964af9d7eed9e03e53415d37aa96045"]}'
# Moralis
curl "https://deep-index.moralis.io/api/v2.2/wallets/0xd8da6bf26964af9d7eed9e03e53415d37aa96045/tokens?chain=eth" \
-H "X-API-Key: $MORALIS_API_KEY"
Notes: Unlike alchemy_getTokenBalances (which returns raw balances and requires a second alchemy_getTokenMetadata call), Moralis returns balance, decimals, USD price, USD value, and full metadata (symbol, name, logo, verified flag, spam flag) in one response.
Asset transfers / wallet history
Alchemy: POST {rpcUrl} with method alchemy_getAssetTransfers
| Chain | Moralis Equivalent | Moralis URL | Documentation |
|---|
| EVM | Wallet History | https://deep-index.moralis.io/api/v2.2/wallets/:address/history | Documentation |
| Solana | Wallet Swaps | https://solana-gateway.moralis.io/account/:network/:address/swaps | Documentation |
# Alchemy
curl "https://eth-mainnet.g.alchemy.com/v2/$ALCHEMY_API_KEY" \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"alchemy_getAssetTransfers","params":[{"fromAddress":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","category":["external","erc20","erc721","erc1155"]}]}'
# Moralis
curl "https://deep-index.moralis.io/api/v2.2/wallets/0xd8da6bf26964af9d7eed9e03e53415d37aa96045/history?chain=eth" \
-H "X-API-Key: $MORALIS_API_KEY"
Notes: Moralis returns a single normalized, chronological feed of native transfers, ERC20 movements, NFT transfers, swaps, contract interactions, and approvals — already decoded into human-readable summaries.
Token prices
Alchemy: GET https://api.g.alchemy.com/prices/v1/{apiKey}/tokens/by-address
| Chain | Moralis Equivalent | Moralis URL | Documentation |
|---|
| EVM | Get Token Price | https://deep-index.moralis.io/api/v2.2/erc20/:address/price | Documentation |
| EVM | Get Multiple Token Prices | https://deep-index.moralis.io/api/v2.2/erc20/prices | Documentation |
| Solana | Get Token Price | https://solana-gateway.moralis.io/token/:network/:address/price | Documentation |
Notes: For historical prices and candles, use Get OHLCV by Pair Address. Moralis pricing is sourced from on-chain DEX liquidity with USD conversion.
Portfolio (multichain balances)
Alchemy: POST https://api.g.alchemy.com/data/v1/{apiKey}/assets/tokens/by-address
| Chain | Moralis Equivalent | Moralis URL | Documentation |
|---|
| EVM | Cross-Chain Token Balances | https://deep-index.moralis.io/api/v2.2/wallets/:address/tokens | Documentation |
Notes: Alchemy’s Portfolio API rolls up multiple chains in one request; Moralis offers the same with Cross-Chain Token Balances, and per-chain calls can be parallelized for full control.
Webhooks (Notify) → Moralis Streams
Alchemy: Notify API webhooks (Address Activity, NFT Activity, Mined/Dropped Transaction, Custom GraphQL)
| Feature | Moralis Equivalent | Documentation |
|---|
| Address activity events | EVM Streams | Documentation |
| NFT activity events | EVM Streams | Documentation |
| Solana account events | Solana Streams | Documentation |
| Stream management API | Streams API Reference | Documentation |
# Moralis Streams — create one stream, then attach many addresses to it
curl -X POST "https://api.moralis-streams.com/streams/evm" \
-H "X-API-Key: $MORALIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhookUrl": "https://your.app/webhooks/moralis",
"description": "Wallet activity",
"tag": "wallet-activity",
"chainIds": ["0x1", "0x2105"],
"includeNativeTxs": true,
"includeContractLogs": true
}'
Notes: Where Alchemy’s Notify API is one webhook per address list, Moralis Streams uses a stream-with-attached-addresses model — create the stream once and add or remove addresses dynamically without re-subscribing. Streams also adds ABI-decoded contract events and smart-filter expressions, covering the same ground as Alchemy’s Custom (GraphQL) webhooks.
Chain coverage
Alchemy supports 80+ EVM networks plus Solana. Moralis covers a comparable footprint across EVM, Solana, and Bitcoin — see Supported Chains. Before cutover, diff the chains you’ve configured in Alchemy against the supported list and flag any gaps.
Migration checklist
- Get an API key — Get your API key.
- Map your call sites — replace each Alchemy method with the equivalent above. Field names differ; most teams write a thin response adapter rather than threading new shapes through the codebase.
- Collapse multi-call patterns — Alchemy flows that chained
getTokenBalances + getTokenMetadata (or getNFTsForOwner + spam checks) usually become a single Moralis call.
- Move Notify webhooks to Streams — create one Stream per event class and attach addresses dynamically instead of one webhook per address list.
- Verify chain coverage — diff your Alchemy network configuration against Supported Chains.
- (Optional) Move RPC traffic — point your JSON-RPC calls at Moralis RPC Nodes to consolidate billing.
Beyond Alchemy: what Moralis adds
Once migrated, teams commonly adopt Moralis endpoints that have no direct Alchemy counterpart:
Need help migrating off Alchemy?
If you’re moving a production Alchemy workload to Moralis, the support team can help size the migration and review your call patterns — reach out via moralis.com.