Skip to main content

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 methodMoralis equivalent
getNFTsForOwnerGet NFTs by Wallet
getContractsForOwnerGet NFT Collections by Wallet
getNFTsForContractGet NFTs by Contract
getNFTMetadata / getNFTMetadataBatchGet NFT Metadata
getContractMetadataGet NFT Collection Metadata
getOwnersForNFTGet NFT Owners by Token ID
getOwnersForContractGet NFT Owners by Contract
getFloorPriceGet NFT Floor Price by Contract
getNFTSalesGet NFT Trades by Contract
getTransfersForContractGet NFT Contract Transfers
getTransfersForOwnerGet NFT Trades by Wallet
summarizeNFTAttributesGet NFT Traits by Collection
computeRarity / search by traitGet NFTs by Traits
getSpamContracts / isSpamContractBuilt in — every NFT response includes a possible_spam flag

Token API & Prices API

Alchemy methodMoralis equivalent
alchemy_getTokenBalancesGet Token Balances by Wallet
alchemy_getTokenMetadataGet Token Metadata
alchemy_getTokenAllowanceGet Wallet Token Approvals
Prices — Token Prices by Address/SymbolGet Token Price · Get Multiple Token Prices
Prices — Historical Token PricesGet OHLCV by Pair Address
Token holders (via indexing)Get Token Holders

Transfers & transaction data

Alchemy methodMoralis equivalent
alchemy_getAssetTransfersGet Wallet History (native + ERC20 + NFT, decoded)
alchemy_getTransactionReceiptsGet Wallet Transactions
Decoded transaction viewGet Decoded Wallet Transactions
eth_getTransactionByHashGet Transaction by Hash

Portfolio API (multichain)

Alchemy endpointMoralis 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 WalletGet NFT Collections by Wallet
Transaction History by WalletGet Wallet History
Net worth (derived)Get Wallet Net Worth

Real-time — Webhooks (Notify) & Subscription API → Streams

Alchemy featureMoralis equivalent
Address Activity webhookEVM Streams — address activity + ERC20/native filters
NFT Activity / NFT Metadata UpdateEVM Streams — NFT transfer filters
Mined / Dropped TransactionEVM Streams
Custom (GraphQL) webhookEVM Streams — contract-event + smart-filter expressions
Subscription API (eth_subscribe, alchemy_minedTransactions)Streams API (push delivery) or websockets via RPC Nodes

Solana (SVM)

Alchemy capabilityMoralis equivalent
Solana token balances / getTokenAccountsByOwnerGet SPL Token Balances · Get Portfolio
Solana NFTs (DAS getAssetsByOwner)Get NFTs by Wallet
Solana NFT metadataGet NFT Metadata
Solana token pricesGet Token Price
Solana swaps / transactionsGet Wallet Swaps
Real-time eventsSolana Streams

RPC

Alchemy featureMoralis equivalent
Supernode JSON-RPCMoralis 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
ChainMoralis EquivalentMoralis URLDocumentation
EVMGet NFTs by Wallethttps://deep-index.moralis.io/api/v2.2/:address/nftDocumentation
SolanaGet NFTs by Wallethttps://solana-gateway.moralis.io/account/:network/:address/nftDocumentation
# 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
ChainMoralis EquivalentMoralis URLDocumentation
EVMGet Native & ERC20 Balanceshttps://deep-index.moralis.io/api/v2.2/wallets/:address/tokensDocumentation
SolanaGet Portfolio (native + SPL)https://solana-gateway.moralis.io/account/:network/:address/portfolioDocumentation
# 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
ChainMoralis EquivalentMoralis URLDocumentation
EVMWallet Historyhttps://deep-index.moralis.io/api/v2.2/wallets/:address/historyDocumentation
SolanaWallet Swapshttps://solana-gateway.moralis.io/account/:network/:address/swapsDocumentation
# 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
ChainMoralis EquivalentMoralis URLDocumentation
EVMGet Token Pricehttps://deep-index.moralis.io/api/v2.2/erc20/:address/priceDocumentation
EVMGet Multiple Token Priceshttps://deep-index.moralis.io/api/v2.2/erc20/pricesDocumentation
SolanaGet Token Pricehttps://solana-gateway.moralis.io/token/:network/:address/priceDocumentation
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
ChainMoralis EquivalentMoralis URLDocumentation
EVMCross-Chain Token Balanceshttps://deep-index.moralis.io/api/v2.2/wallets/:address/tokensDocumentation
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)
FeatureMoralis EquivalentDocumentation
Address activity eventsEVM StreamsDocumentation
NFT activity eventsEVM StreamsDocumentation
Solana account eventsSolana StreamsDocumentation
Stream management APIStreams API ReferenceDocumentation
# 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

  1. Get an API keyGet your API key.
  2. 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.
  3. Collapse multi-call patterns — Alchemy flows that chained getTokenBalances + getTokenMetadata (or getNFTsForOwner + spam checks) usually become a single Moralis call.
  4. Move Notify webhooks to Streams — create one Stream per event class and attach addresses dynamically instead of one webhook per address list.
  5. Verify chain coverage — diff your Alchemy network configuration against Supported Chains.
  6. (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.