Skip to main content

Don't have an API key yet?

Sign-up to Moralis to get your free API key and start building today.

Get Your Free API Key
Version: 2.0

EVM Compute Units

All Moralis plans have generous limits on the number of requests you can make per month. How many included requests you have depends on the plan you have, check the pricing page for more details.

Some requests are more expensive than others. By giving some heavy requests higher weight, we ensure that you only pay for what you use and not a cent more.

This allows you to get cheaper requests for most use cases while protecting our systems from abuse by weighing the computationally expensive endpoints.

What is a Compute Unit (CU)?​

A compute unit is a measure of the requests needed to query computationally expensive API endpoints. Each request has both price and rate limit cost that are measured in terms of compute units. It is also important to note that some API will have dynamic pricing that will cost more CU the more inputs you add for the request.

Price​

Request price refers to the amount of compute units that will be calculated towards your API usage billing.

Dynamic Prices​

Some endpoints have a dynamically priced CU cost based on the number of resources being requested. The more resources being requested, the higher the CU cost for that particular request. Taking getNativeBalancesForAddresses as an example; the base CU cost of this endpoint when fetching the balance of a single address is 1 CU. If we wanted to fetch the balances of 5 addresses at once, then the CU cost for that particular call would be 5 CU.

Rate limit Cost​

On the other hand, request rate limit cost refers to the amount of compute units that an API request cost in terms of rate limits.

NamePathPriceRate Limit Cost
BaseAdditional
getBlock/block/{block_number_or_hash}100020
getContractEvents/{address}/events20020
getTransaction/transaction/{transaction_hash}10010
getTransactions/{address}30020
getTransactionVerbose/transaction/{transaction_hash}/verbose20010
getMultipleNFTs/nft/getMultipleNFTs150020
getTransactionsVerbose/{address}/verbose50020
getInternalTransactions/transaction/{transaction_hash}/internal-transactions20010
getNativeBalance/{address}/balance10010
getNativeBalancesForAddresses/wallets/balances10+10 CUs per wallet addresses10
getWalletTokenBalances/{address}/erc20100020
getWalletTokenBalancesPrice/{address}/tokens100020
getDefiSummary/wallets/{address}/defi/summary50020
getDefiPositionsByProtocol/wallets/:address/defi/:protocol/positions15010
getDefiPositionsSummary/wallets/{address}/defi/positions50020
getWalletProfitabilitySummary/wallets/{address}/profitability/summary30020
getWalletProfitability/wallets/{address}/profitability50020
getTokenTransfers/{address}/erc20/transfers50020
getTokenAddressTransfers/erc20/{address}/transfers50020
getTopProfitableWalletPerToken/erc20/{address}/top-gainers50050
getNFTs/{address}/nft50020
getNFTTransfers/{address}/nft/transfers50020
getNftTransfersByBlock/block/{block_number_or_hash}/nft/transfers20020
getTokenMetadata/erc20/metadata10020
web3ApiVersion/web3/version101
getTokenMetadataBySymbol/erc20/metadata/symbols10010
getTokenPrice/erc20/{address}/price50020
getMultipleTokenPrices/erc20/prices100020
getTokenAllowance/erc20/{address}/allowance10020
getAllTokenIds/nft/{address}50020
getContractNFTTransfers/nft/{address}/transfers50020
getWalletNFTCollections/nft/{address}/collections50020
getNFTOwners/nft/{address}/owners50020
getNFTMetadata/nft/{address}/metadata50020
syncNFTContract/nft/{address}/sync50050
reSyncMetadata/nft/{address}/{token_id}/metadata/resync50050
getTokenIdMetadata/nft/{address}/{token_id}20020
getTokenIdOwners/nft/{address}/{token_id}/owners50020
getWalletTokenIdTransfers/nft/{address}/{token_id}/transfers20020
resolveDomain/resolve/{domain}10010
resolveAddressToDomain/resolve/{address}/domain10010
resolveENSDomain/resolve/ens/{domain}10010
resolveAddress/resolve/{address}/reverse10010
getPairReserves/{pair_address}/reserves10010
getLogsByAddress/{address}/logs20020
getNftTransfersFromToBlock/nft/transfers50020
getNFTTrades/nft/{address}/trades40020
getNFTTradesByToken/nft/{address}/{token_id}/trades40020
getNFTTradesByWallet/wallets/{address}/nfts/trades40020
getNFTLowestPrice/nft/{address}/lowestprice40020
getNFTContractSalePrices/nft/{address}/price30030
getNFTSalePrices/nft/{address}/{token_id}/price30030
getWalletActiveChains/wallets/{address}/chains50+50 CUs per chains50
getTopERC20TokensByMarketCap/market-data/erc20s/top-tokens200020
getTopERC20TokensByPriceMovers/market-data/erc20s/top-movers200020
getTopNFTCollectionsByMarketCap/market-data/nfts/top-collections200020
getHottestNFTCollectionsByTradingVolume/market-data/nfts/hottest-collections200020
contractsReview/contracts-review1010
endpointWeights/info/endpointWeights1010
getWalletStats/wallets/{address}/stats50050
getNFTCollectionStats/nft/{address}/stats50050
getNFTTokenStats/nft/{address}/{token_id}/stats50050
getTokenOwners/erc20/{token_address}/owners50020
getTokenStats/erc20/{address}/stats50050
getBlockStats/block/{block_number_or_hash}/stats50050
getWalletNetWorth/wallets/{address}/net-worth500+500 CUs per chains50
getWalletHistory/wallets/{address}/history150030

Query Parameters​

In addition to having compute units charged on each API request, there are additional query parameters that cost additional compute units when added to an API request.

Query parameterCU Cost
include=internal_transactions on /{address}5
include=internal_transactions on /transaction/{transaction_hash}3
include=internal_transactions on /block/{block_number_or_hash}10
media_items=true2
include=percent_change on /erc20/prices5

How to Check Compute Units?​

To check the latest compute units of our API offerings, you can use endpointWeights to do so.

const Moralis = require("moralis").default;

await Moralis.start({
apiKey: "YOUR_API_KEY",
// ...and any other configuration
});

const response = await Moralis.EvmApi.utils.endpointWeights();

console.log(response?.toJSON());

Your output for the API request will be as follows:

[
{
"endpoint": "getBlock",
"path": "/block/{block_number_or_hash}",
"price": 5,
"rateLimitCost": 5
},
{
"endpoint": "getContractEvents",
"path": "/{address}/events",
"price": 2,
"rateLimitCost": 2
},
{
"endpoint": "getTransactions",
"path": "/transaction/{transaction_hash}",
"price": 1,
"rateLimitCost": 3
}
]

where price refers to how much CU does the API request cost in terms of billing and rateLimitCost refers to how much CU does the API request cost in terms of rate limits.