mcpField
M
moralis-data-api

moralis-data-api

github.com/novnskiData & databases140 installsUpdated 8w ago
Repository

About moralis-data-api

A skill for developers using the Moralis Data API with Claude Code to query on-chain data and implement API endpoints. It focuses on endpoint-specific rules, response structures, authentication, pagination, and common data-type pitfalls.

Key features

  1. 01Endpoint-specific API implementation guidance
  2. 02Moralis API key setup instructions
  3. 03EVM, Solana, and Universal API notes
  4. 04Response structures and field-type guidance
  5. 05Pagination, timeouts, and troubleshooting

Use cases

  1. 01Implementing wallet balance or transaction queries
  2. 02Handling token and NFT API responses
  3. 03Paginating on-chain data requests
  4. 04Diagnosing field, path, or parsing errors

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/novnski/onchain-skills --skill moralis-data-api

After installing, type/moralis-data-apiin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
ApiResponseCodes.md
CommonPitfalls.md
DataFeatureGuidance.md
DataTransformations.md
DefiProtocols.md
DeprecatedEndpoints.md
NftMarketplaces.md
Pagination.md
PerformanceAndLatency.md
PricingAndPremium.md
ResponsePatterns.md
SpamDetection.md
SupportedApisAndChains.md
SupportedDexs.md
TokenHoldersFaq.md
TokenSearch.md
UniversalAndBitcoin.md
WalletHistory.md
rules/
balance__solana.md
getAddressesByXpub__universal.md
getAggregatedTokenPairStats__solana.md
getBlock.md
getBlockByNumberOrHash__universal.md
getCandleSticks__solana.md
getCandleSticks__universal.md
getContractNFTs.md
getDateToBlock.md
getDefiPositions__universal.md
getDefiPositionsByProtocol.md
getDefiPositionsSummary.md

Details

From the project README

CRITICAL: Read Rule Files Before Implementing

The #1 cause of bugs is not reading the endpoint rule file before writing code.

For EVERY endpoint:

  1. Read rules/{EndpointName}.md
  2. Find "Example Response" section
  3. Copy the EXACT JSON structure
  4. Note field names (snake_case), data types, HTTP method, path, wrapper structure

Reading Order:

  1. This SKILL.md (core patterns)
  2. Endpoint rule file in rules/
  3. references/PricingAndPremium.md when the user asks about CU costs, premium endpoints, or plan requirements
  4. Pattern references in references/ (for edge cases only)

Setup

API Key

Never ask the user to paste their API key into the chat. Instead:

  1. Check if MORALIS_API_KEY is set in the environment (try running [ -n "$MORALIS_API_KEY" ] && echo "API key is set" || echo "API key is NOT set").
  2. If not set, offer to create the .env file with an empty placeholder: MORALIS_API_KEY=
  3. Tell the user to open the .env file and paste their key there themselves.
  4. Let them know: without the key, you won't be able to test or call the Moralis API on their behalf.

If they don't have a key yet, point them to admin.moralis.com/register. The Free plan was removed on September 1, 2026; a paid plan is required. For Starter, Pro, and Business monthly prices, see plan pricing and verify the live pricing page.

Environment Variable Discovery

The .env file location depends on how skills are installed:

Create the .env file in the project root (same directory the user runs Claude Code from). Make sure .env is in .gitignore.

Verify Your Key
curl "https://deep-index.moralis.io/api/v2.2/YOUR_EVM_ADDRESS/balance?chain=0x1" \
  -H "X-API-Key: $MORALIS_API_KEY"

Base URLs

APIBase URL
EVMhttps://deep-index.moralis.io/api/v2.2
Solanahttps://solana-gateway.moralis.io
Universal / Bitcoinhttps://api.moralis.com

Authentication

All requests require: X-API-Key: $MORALIS_API_KEY


Quick Reference: Most Common Patterns

Data Type Rules
FieldRealityNOT
block_numberDecimal 12386788Hex 0xf2b5a4
timestampISO "2021-05-07T11:08:35.000Z"Unix 1620394115
balanceString "1000000000000000000"Number
decimalsString or numberAlways number
Block Numbers (always decimal)
block_number: 12386788; // number - use directly
block_number: "12386788"; // string - parseInt(block_number, 10)
Timestamps (usually ISO strings)
"2021-05-07T11:08:35.000Z"; // → new Date(timestamp).getTime()
Balances (always strings unless its a property named "formatted" eg. balanceFormatted, BigInt)
balance: "1000000000000000000";
// → (Number(BigInt(balance)) / 1e18).toFixed(6)
Response Patterns
PatternExample Endpoints
Direct array [...]getWalletTokenBalancesPrice, getTokenMetadata
Wrapped { result: [] }getWalletNFTs, getWalletTransactions
Paginated { page, cursor, result }getWalletHistory, getNFTTransfers
// Safe extraction
const data = Array.isArray(response) ? response : response.result || [];
Common Field Mappings
token_address → tokenAddress
from_address_label → fromAddressLabel
block_number → blockNumber
receipt_status: "1" → success, "0" → failed
possible_spam: "true"/"false" → boolean check

Common Pitfalls (Top 5)

  1. Block numbers are decimal, not hex - Use parseInt(x, 10), not parseInt(x, 16)
  2. Timestamps are ISO strings - Use new Date(timestamp).getTime()
  3. Balances are strings - Use BigInt(balance) for math
  4. Response may be wrapped - Check for .result before .map()
  5. Path inconsistencies - Some use /wallets/{address}/..., others /{address}/...

See references/CommonPitfalls.md for complete reference.


Pagination

Many endpoints use cursor-based pagination:

# First request
curl "...?limit=100" -H "X-API-Key: $KEY"

# Next page
curl "...?limit=100&cursor=<cursor_from_response>" -H "X-API-Key: $KEY"

See references/Pagination.md for details.


Testing Endpoints

ADDRESS="YOUR_EVM_ADDRESS"
CHAIN="0x1"

# Wallet Balance
curl "https://deep-index.moralis.io/api/v2.2/${ADDRESS}/balance?chain=${CHAIN}" \
  -H "X-API-Key: $MORALIS_API_KEY"

# Token Price
curl "https://deep-index.moralis.io/api/v2.2/erc20/YOUR_EVM_ADDRESS/price?chain=${CHAIN}" \
  -H "X-API-Key: $MORALIS_API_KEY"

# Wallet Transactions (note result wrapper)
curl "https://deep-index.moralis.io/api/v2.2/${ADDRESS}?chain=${CHAIN}&limit=5" \
  -H "X-API-Key: $MORALIS_API_KEY" | jq '.result'

Quick Troubleshooting

IssueCauseSolution
"Property does not exist"Field name mismatchCheck snake_case in rule file
"Cannot read undefined"Missing optional fieldUse ?. optional chaining
"blockNumber is NaN"Parsing decimal as hexUse radix 10: parseInt(x, 10)
"Wrong timestamp"Parsing ISO as numberUse new Date(timestamp).getTime()
"404 Not Found"Wrong or removed endpoint pathVerify the rule catalog and DeprecatedEndpoints.md

Performance & Timeouts

Most endpoints respond quickly under normal conditions. Response times can vary based on wallet activity volume, chain, and query complexity.

Recommended client timeouts:

  • Simple queries (balance, price, metadata): 10s
  • Complex queries (wallet history, DeFi positions): 30s

Large wallets with extensive transaction histories may take longer — use pagination with reasonable limit values.

See references/PerformanceAndLatency.md for optimization tips.

Pricing and Plan Requirements

Data API endpoints have explicit Compute Unit (CU) costs, and some endpoints require Starter or Pro plans. Use references/PricingAndPremium.md before answering cost, quota, premium endpoint, or plan-gating questions.


Default Chain Behavior

EVM addresses (0x...): Default to Ethereum (chain=0x1) unless specified.

Solana addresses (base58): Auto-detected and routed to Solana API.


Supported Chains

EVM: Use the current aliases and hex IDs from the endpoint rule. Fantom and several testnets have been removed. Moonbeam, Moonriver, and Lisk are scheduled for removal on September 25, 2026.

Solana: Mainnet only

See references/SupportedApisAndChains.md for full list.


Endpoint Catalog

Complete list of all 116 endpoints (79 EVM + 18 Solana + 19 Universal / Bitcoin) organized by category.

Wallet

Balances, tokens, NFTs, transaction history, profitability, and net worth data.

EndpointDescription
getNativeBalanceGet native balance by wallet
getNativeBalancesForAddressesGet native balance for a set of wallets
getWalletActiveChainsGet active chains by wallet address
getWalletApprovalsGet ERC20 approvals by wallet
getWalletHistoryGet the complete decoded transaction history of a wallet
getWalletInsightGet wallet insight metrics
getWalletNetWorthGet wallet net worth
getWalletNFTCollectionsGet NFT collections by wallet address
getWalletNFTsGet NFTs by wallet address
getWalletNFTTransfersGet NFT Transfers by wallet address
getWalletProfitabilityGet detailed profit and loss by wallet address
getWalletProfitabilitySummaryGet profit and loss summary by wallet address
getWalletStatsGet summary stats by wallet address
getWalletTokenBalancesGet ERC20 token balances by wallet
getWalletTokenBalancesPriceGet token balances with prices by wallet address
getWalletTokenTransfersGet ERC20 token transfers by wallet address
getWalletTransactionsGet native transactions by wallet
getWalletTransactionsVerboseGet decoded transactions by wallet
Token

Token prices, metadata, pairs, DEX swaps, analytics, security scores, and holders.

EndpointDescription
getHistoricalTokenScoreGet historical token score by token address
getMultipleTokenAnalyticsGet token analytics for a list of token addresses
getPairStatsGet stats by pair address
getSwapsByPairAddressGet swap transactions by pair address
getSwapsByTokenAddressGet swap transactions by token address
getSwapsByWalletAddressGet swap transactions by wallet address
getTimeSeriesTokenAnalyticsRetrieve timeseries trading stats by token addresses
getTokenAnalyticsGet token analytics by token address
getTokenCategoriesGet ERC20 token categories
getTokenHoldersGet a holders summary by token address
getTokenMetadataGet ERC20 token metadata by contract
getTokenOwnersGet ERC20 token owners by contract
getTokenPairsGet token pairs by address
getTokenScoreGet token score by token address
getTokenTransfersGet ERC20 token transfers by contract address
NFT

NFT metadata, transfers, traits, rarity, floor prices, and trades.

EndpointDescription
getContractNFTsGet NFTs by contract address
getMultipleNFTsGet Metadata for NFTs
getNFTBulkContractMetadataGet metadata for multiple NFT contracts
getNFTByContractTraitsGet NFTs by traits
getNFTCollectionStatsGet summary stats by NFT collection
getNFTContractMetadataGet NFT collection metadata
getNFTContractSalePricesGet NFT sale prices by collection
getNFTContractTransfersGet NFT transfers by contract address
getNFTFloorPriceByContractGet NFT floor price by contract
getNFTFloorPriceByTokenGet NFT floor price by token
getNFTHistoricalFloorPriceByContractGet historical NFT floor price by contract
getNFTMetadataGet NFT metadata
getNFTOwnersGet NFT owners by contract address
getNFTSalePricesGet NFT sale prices by token
getNFTTokenIdOwnersGet NFT owners by token ID
getNFTTradesGet NFT trades by collection
getNFTTradesByTokenGet NFT trades by token
getNFTTradesByWalletGet NFT trades by wallet address
getNFTTraitsByCollectionGet NFT traits by collection
getNFTTraitsByCollectionPaginateGet NFT traits by collection paginate
getNFTTransfersGet NFT transfers by token ID
resyncNFTRarityResync NFT Trait
DeFi

DeFi protocol positions, liquidity, and exposure data.

EndpointDescription
getDefiPositionsByProtocolGet detailed DeFi positions by protocol for a wallet
getDefiPositionsSummaryGet DeFi positions of a wallet
getDefiSummaryGet the DeFi summary of a wallet
Entity

Labeled addresses including exchanges, funds, protocols, and whales.

EndpointDescription
getEntityGet Entity Details By Id
getEntityCategoriesGet Entity Categories
Price

Token and NFT prices, OHLCV candlestick data.

EndpointDescription
getMultipleTokenPricesGet Multiple ERC20 token prices
getPairCandlesticksGet OHLCV by pair address
getTokenPriceGet ERC20 token price
Blockchain

Blocks, transactions, date-to-block conversion, and contract functions.

EndpointDescription
getBlockGet block by hash
getDateToBlockGet block by date
getLatestBlockNumberGet latest block number
getTransactionGet transaction by hash
getTransactionVerboseGet decoded transaction by hash
Discovery

Trending tokens and top-trader discovery.

EndpointDescription
getTopProfitableWalletPerTokenGet top traders for a given ERC20 token
getTrendingTokensV2Get trending tokens
Other

Address resolution, entity search, and supporting utilities.

EndpointDescription
getEntitiesByCategoryGet Entities By Category
getUniqueOwnersByCollectionGet unique wallet addresses owning NFTs from a contract.
resolveAddressENS lookup by address
resolveAddressToDomainResolve Address to Unstoppable domain
resolveDomainResolve Unstoppable domain
resolveENSDomainENS lookup by domain
reSyncMetadataResync NFT metadata
searchEntitiesSearch Entities, Organizations or Wallets
searchTokensSearch for tokens based on contract address, pair address, token name or token symbol.
Solana Endpoints

Solana-specific endpoints (16 native + 2 EVM variants that support Solana chain = 18 total).

EndpointDescription
balanceGets native balance owned by the given address
getAggregatedTokenPairStatsGet aggregated token pair statistics by address
getCandleSticksGet candlesticks for a pair address
getMultipleTokenMetadataGet multiple token metadata
getMultipleTokenPricesGet token price
getNFTMetadataGet the global metadata for a given contract
getNFTsGets NFTs owned by the given address
getPairStatsGet stats for a pair address
getPortfolioGets the portfolio of the given address
getSPLGets token balances owned by the given address
getSwapsByPairAddressGet all swap related transactions (buy, sell, add liquidity & remove liquidity)
getSwapsByTokenAddressGet all swap related transactions (buy, sell)
getSwapsByWalletAddressGet all swap related transactions (buy, sell) for a specific wallet address.
getTokenMetadataGet Token metadata
getTokenPairsGet token pairs by address
getTokenPriceGet token price
getTokenAnalyticsSolana variant: Get token analytics by token address
getTrendingTokensV2Solana variant: Get trending tokens
Universal / Bitcoin Endpoints

Universal v1 endpoints used by the Bitcoin Data API and cross-chain Universal API pages.

EndpointDescription
getAddressesByXpubGet derived addresses from a Bitcoin extended public key (xpub).
getBlockByNumberOrHashGet a block by chain and block number or hash
getCandleSticksGet the OHLCV candle stick by using pair address
getDefiPositionsGet DeFi positions for a wallet across multiple chains
getDefiProtocolPositionsGet DeFi positions for a specific protocol
getDefiProtocolsGet all supported DeFi protocols
getDefiSummaryGet DeFi positions summary for a wallet across multiple chains
getSwapsByPairAddressGet all swap related transactions (buy, sell, add liquidity & remove liquidity)
getSwapsByTokenAddressGet all swap related transactions (buy, sell)
getTokenBalancesGet token balances from multiple chains for a specific wallet address.
getTokenPriceGet the price of a token by its address
getTokenPriceSparklineGet sparkline price data for a token
getTokenPriceTimeSeriesGet historical price time-series for a token
getTopTradersByTokenGet the top traders for a token on a single chain.
getTransactionByHashGet a transaction by chain and transaction hash
getWalletHistoryGet wallet transaction history across multiple chains.
getWalletInsightGet wallet insight metrics across multiple chains.
getWalletProfitabilityGet per-token profitability for a wallet across multiple chains.
getWalletProfitabilitySummaryGet the wallet-level profitability summary across multiple chains.

Reference Documentation


See Also

  • Endpoint rules: rules/*.md files
  • Streams API: @moralis-streams-api for real-time events

Comments

Markdown supported