{
  "schemaVersion": "1.0",
  "item": {
    "slug": "moralis-data-api",
    "name": "Moralis Data Api",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/novnski/moralis-data-api",
    "canonicalUrl": "https://clawhub.ai/novnski/moralis-data-api",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "manual_only",
    "downloadUrl": "/downloads/moralis-data-api",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=moralis-data-api",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/CommonPitfalls.md",
      "references/DataTransformations.md",
      "references/DefiProtocols.md",
      "references/FilteredTokens.md",
      "references/NftMarketplaces.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Wait for the source to recover or retry later.",
      "Review SKILL.md only after the source returns a real package.",
      "Do not rely on this source for automated install yet."
    ],
    "agentAssist": {
      "summary": "Use the source page and any available docs to guide the install because the item is currently unstable or timing out.",
      "steps": [
        "Open the source page via Review source status.",
        "If you can obtain the package, extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the source page and extracted files."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I tried to install a skill package from Yavira, but the item is currently unstable or timing out. Inspect the source page and any extracted docs, then tell me what you can confirm and any manual steps still required."
        },
        {
          "label": "Upgrade existing",
          "body": "I tried to upgrade a skill package from Yavira, but the item is currently unstable or timing out. Compare the source page and any extracted docs with my current installation, then summarize what changed and what manual follow-up I still need."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "moralis-data-api",
      "status": "unstable",
      "reason": "timeout",
      "recommendedAction": "retry_later",
      "checkedAt": "2026-05-05T20:18:59.830Z",
      "expiresAt": "2026-05-06T08:18:59.830Z",
      "httpStatus": null,
      "finalUrl": null,
      "contentType": null,
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=moralis-data-api",
        "error": "Timed out after 5000ms",
        "slug": "moralis-data-api"
      },
      "scope": "item",
      "summary": "Item is unstable.",
      "detail": "This item is timing out or returning errors right now. Review the source page and try again later.",
      "primaryActionLabel": "Review source status",
      "primaryActionHref": "https://clawhub.ai/novnski/moralis-data-api"
    },
    "validation": {
      "installChecklist": [
        "Wait for the source to recover or retry later.",
        "Review SKILL.md only after the download returns a real package.",
        "Treat this source as transient until the upstream errors clear."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/moralis-data-api",
    "agentPageUrl": "https://openagent3.xyz/skills/moralis-data-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/moralis-data-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/moralis-data-api/agent.md"
  },
  "agentAssist": {
    "summary": "Use the source page and any available docs to guide the install because the item is currently unstable or timing out.",
    "steps": [
      "Open the source page via Review source status.",
      "If you can obtain the package, extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the source page and extracted files."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I tried to install a skill package from Yavira, but the item is currently unstable or timing out. Inspect the source page and any extracted docs, then tell me what you can confirm and any manual steps still required."
      },
      {
        "label": "Upgrade existing",
        "body": "I tried to upgrade a skill package from Yavira, but the item is currently unstable or timing out. Compare the source page and any extracted docs with my current installation, then summarize what changed and what manual follow-up I still need."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "CRITICAL: Read Rule Files Before Implementing",
        "body": "The #1 cause of bugs is not reading the endpoint rule file before writing code.\n\nFor EVERY endpoint:\n\nRead rules/{EndpointName}.md\nFind \"Example Response\" section\nCopy the EXACT JSON structure\nNote field names (snake_case), data types, HTTP method, path, wrapper structure\n\nReading Order:\n\nThis SKILL.md (core patterns)\nEndpoint rule file in rules/\nPattern references in references/ (for edge cases only)"
      },
      {
        "title": "API Key (optional)",
        "body": "Never ask the user to paste their API key into the chat. Instead:\n\nCheck 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\").\nIf not set, offer to create the .env file with an empty placeholder: MORALIS_API_KEY=\nTell the user to open the .env file and paste their key there themselves.\nLet them know: without the key, you won't be able to test or call the Moralis API on their behalf.\n\nIf they don't have a key yet, point them to admin.moralis.com/register (free, no credit card)."
      },
      {
        "title": "Environment Variable Discovery",
        "body": "The .env file location depends on how skills are installed:\n\nCreate the .env file in the project root (same directory the user runs Claude Code from). Make sure .env is in .gitignore."
      },
      {
        "title": "Verify Your Key",
        "body": "curl \"https://deep-index.moralis.io/api/v2.2/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/balance?chain=0x1\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\""
      },
      {
        "title": "Base URLs",
        "body": "APIBase URLEVMhttps://deep-index.moralis.io/api/v2.2Solanahttps://solana-gateway.moralis.io"
      },
      {
        "title": "Authentication",
        "body": "All requests require: X-API-Key: $MORALIS_API_KEY"
      },
      {
        "title": "Data Type Rules",
        "body": "FieldRealityNOTblock_numberDecimal 12386788Hex 0xf2b5a4timestampISO \"2021-05-07T11:08:35.000Z\"Unix 1620394115balanceString \"1000000000000000000\"NumberdecimalsString or numberAlways number"
      },
      {
        "title": "Block Numbers (always decimal)",
        "body": "block_number: 12386788; // number - use directly\nblock_number: \"12386788\"; // string - parseInt(block_number, 10)"
      },
      {
        "title": "Timestamps (usually ISO strings)",
        "body": "\"2021-05-07T11:08:35.000Z\"; // → new Date(timestamp).getTime()"
      },
      {
        "title": "Balances (always strings unless its a property named \"formatted\" eg. balanceFormatted, BigInt)",
        "body": "balance: \"1000000000000000000\";\n// → (Number(BigInt(balance)) / 1e18).toFixed(6)"
      },
      {
        "title": "Response Patterns",
        "body": "PatternExample EndpointsDirect array [...]getWalletTokenBalancesPrice, getTokenMetadataWrapped { result: [] }getWalletNFTs, getWalletTransactionsPaginated { page, cursor, result }getWalletHistory, getNFTTransfers\n\n// Safe extraction\nconst data = Array.isArray(response) ? response : response.result || [];"
      },
      {
        "title": "Common Field Mappings",
        "body": "token_address → tokenAddress\nfrom_address_label → fromAddressLabel\nblock_number → blockNumber\nreceipt_status: \"1\" → success, \"0\" → failed\npossible_spam: \"true\"/\"false\" → boolean check"
      },
      {
        "title": "Common Pitfalls (Top 5)",
        "body": "Block numbers are decimal, not hex - Use parseInt(x, 10), not parseInt(x, 16)\nTimestamps are ISO strings - Use new Date(timestamp).getTime()\nBalances are strings - Use BigInt(balance) for math\nResponse may be wrapped - Check for .result before .map()\nPath inconsistencies - Some use /wallets/{address}/..., others /{address}/...\n\nSee references/CommonPitfalls.md for complete reference."
      },
      {
        "title": "Pagination",
        "body": "Many endpoints use cursor-based pagination:\n\n# First request\ncurl \"...?limit=100\" -H \"X-API-Key: $KEY\"\n\n# Next page\ncurl \"...?limit=100&cursor=<cursor_from_response>\" -H \"X-API-Key: $KEY\"\n\nSee references/Pagination.md for details."
      },
      {
        "title": "Testing Endpoints",
        "body": "ADDRESS=\"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\nCHAIN=\"0x1\"\n\n# Wallet Balance\ncurl \"https://deep-index.moralis.io/api/v2.2/${ADDRESS}/balance?chain=${CHAIN}\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\"\n\n# Token Price\ncurl \"https://deep-index.moralis.io/api/v2.2/erc20/0x6B175474E89094C44Da98b954EedeAC495271d0F/price?chain=${CHAIN}\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\"\n\n# Wallet Transactions (note result wrapper)\ncurl \"https://deep-index.moralis.io/api/v2.2/${ADDRESS}?chain=${CHAIN}&limit=5\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\" | jq '.result'"
      },
      {
        "title": "Quick Troubleshooting",
        "body": "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 endpoint pathVerify path in rule file"
      },
      {
        "title": "Performance & Timeouts",
        "body": "Most endpoints respond quickly under normal conditions. Response times can vary based on wallet activity volume, chain, and query complexity.\n\nRecommended client timeouts:\n\nSimple queries (balance, price, metadata): 10s\nComplex queries (wallet history, DeFi positions): 30s\n\nLarge wallets with extensive transaction histories may take longer — use pagination with reasonable limit values.\n\nSee references/PerformanceAndLatency.md for optimization tips."
      },
      {
        "title": "Default Chain Behavior",
        "body": "EVM addresses (0x...): Default to Ethereum (chain=0x1) unless specified.\n\nSolana addresses (base58): Auto-detected and routed to Solana API."
      },
      {
        "title": "Supported Chains",
        "body": "EVM (40+ chains): Ethereum (0x1), Polygon (0x89), BSC (0x38), Arbitrum (0xa4b1), Optimism (0xa), Base (0x2105), Avalanche (0xa86a), and more.\n\nSolana: Mainnet, Devnet\n\nSee references/SupportedApisAndChains.md for full list."
      },
      {
        "title": "Endpoint Catalog",
        "body": "Complete list of all 136 endpoints (102 EVM + 34 Solana) organized by category."
      },
      {
        "title": "Wallet",
        "body": "Balances, tokens, NFTs, transaction history, profitability, and net worth data.\n\nEndpointDescriptiongetNativeBalanceGet native balance by walletgetNativeBalancesForAddressesGet native balance for a set of walletsgetWalletActiveChainsGet active chains by wallet addressgetWalletApprovalsGet ERC20 approvals by walletgetWalletHistoryGet the complete decoded transaction history of a walletgetWalletInsightGet wallet insight metricsgetWalletNetWorthGet wallet net worthgetWalletNFTCollectionsGet NFT collections by wallet addressgetWalletNFTsGet NFTs by wallet addressgetWalletNFTTransfersGet NFT Transfers by wallet addressgetWalletProfitabilityGet detailed profit and loss by wallet addressgetWalletProfitabilitySummaryGet profit and loss summary by wallet addressgetWalletStatsGet summary stats by wallet addressgetWalletTokenBalancesPriceGet token balances with prices by wallet addressgetWalletTokenTransfersGet ERC20 token transfers by wallet addressgetWalletTransactionsGet native transactions by walletgetWalletTransactionsVerboseGet decoded transactions by wallet"
      },
      {
        "title": "Token",
        "body": "Token prices, metadata, pairs, DEX swaps, analytics, security scores, and sniper detection.\n\nEndpointDescriptiongetAggregatedTokenPairStatsGet aggregated token pair statistics by addressgetHistoricalTokenScoreGet historical token score by token addressgetMultipleTokenAnalyticsGet token analytics for a list of token addressesgetPairAddressGet DEX token pair addressgetPairReservesGet DEX token pair reservesgetPairStatsGet stats by pair addressgetSnipersByPairAddressGet snipers by pair addressgetSwapsByPairAddressGet swap transactions by pair addressgetSwapsByTokenAddressGet swap transactions by token addressgetSwapsByWalletAddressGet swap transactions by wallet addressgetTimeSeriesTokenAnalyticsRetrieve timeseries trading stats by token addressesgetTokenAnalyticsGet token analytics by token addressgetTokenBondingStatusGet the token bonding statusgetTokenCategoriesGet ERC20 token categoriesgetTokenHoldersGet a holders summary by token addressgetTokenMetadataGet ERC20 token metadata by contractgetTokenMetadataBySymbolGet ERC20 token metadata by symbolsgetTokenOwnersGet ERC20 token owners by contractgetTokenPairsGet token pairs by addressgetTokenScoreGet token score by token addressgetTokenStatsGet ERC20 token statsgetTokenTransfersGet ERC20 token transfers by contract address"
      },
      {
        "title": "NFT",
        "body": "NFT metadata, transfers, traits, rarity, floor prices, and trades.\n\nEndpointDescriptiongetContractNFTsGet NFTs by contract addressgetMultipleNFTsGet Metadata for NFTsgetNFTBulkContractMetadataGet metadata for multiple NFT contractsgetNFTByContractTraitsGet NFTs by traitsgetNFTCollectionStatsGet summary stats by NFT collectiongetNFTContractMetadataGet NFT collection metadatagetNFTContractSalePricesGet NFT sale prices by collectiongetNFTContractTransfersGet NFT transfers by contract addressgetNFTFloorPriceByContractGet NFT floor price by contractgetNFTFloorPriceByTokenGet NFT floor price by tokengetNFTHistoricalFloorPriceByContractGet historical NFT floor price by contractgetNFTMetadataGet NFT metadatagetNFTOwnersGet NFT owners by contract addressgetNFTSalePricesGet NFT sale prices by tokengetNFTTokenIdOwnersGet NFT owners by token IDgetNFTTradesGet NFT trades by collectiongetNFTTradesByTokenGet NFT trades by tokengetNFTTradesByWalletGet NFT trades by wallet addressgetNFTTraitsByCollectionGet NFT traits by collectiongetNFTTraitsByCollectionPaginateGet NFT traits by collection paginategetNFTTransfersGet NFT transfers by token IDgetTopNFTCollectionsByMarketCapGet top NFT collections by market cap"
      },
      {
        "title": "DeFi",
        "body": "DeFi protocol positions, liquidity, and exposure data.\n\nEndpointDescriptiongetDefiPositionsByProtocolGet detailed DeFi positions by protocol for a walletgetDefiPositionsSummaryGet DeFi positions of a walletgetDefiSummaryGet the DeFi summary of a wallet"
      },
      {
        "title": "Entity",
        "body": "Labeled addresses including exchanges, funds, protocols, and whales.\n\nEndpointDescriptiongetEntityGet Entity Details By IdgetEntityCategoriesGet Entity Categories"
      },
      {
        "title": "Price",
        "body": "Token and NFT prices, OHLCV candlestick data.\n\nEndpointDescriptiongetMultipleTokenPricesGet Multiple ERC20 token pricesgetPairCandlesticksGet OHLCV by pair addressgetPairPriceGet DEX token pair pricegetTokenPriceGet ERC20 token price"
      },
      {
        "title": "Blockchain",
        "body": "Blocks, transactions, date-to-block conversion, and contract functions.\n\nEndpointDescriptiongetBlockGet block by hashgetDateToBlockGet block by dategetLatestBlockNumberGet latest block numbergetTransactionGet transaction by hashgetTransactionVerboseGet decoded transaction by hash"
      },
      {
        "title": "Discovery",
        "body": "Trending tokens, blue chips, market movers, and token discovery.\n\nEndpointDescriptiongetDiscoveryTokenGet token detailsgetTimeSeriesVolumeRetrieve timeseries trading stats by chaingetTimeSeriesVolumeByCategoryRetrieve timeseries trading stats by categorygetTopCryptoCurrenciesByMarketCapGet top crypto currencies by market capgetTopCryptoCurrenciesByTradingVolumeGet top crypto currencies by trading volumegetTopERC20TokensByMarketCapGet top ERC20 tokens by market capgetTopERC20TokensByPriceMoversGet top ERC20 tokens by price movements (winners and losers)getTopGainersTokensGet tokens with top gainersgetTopLosersTokensGet tokens with top losersgetTopProfitableWalletPerTokenGet top traders for a given ERC20 tokengetTrendingTokensGet trending tokensgetVolumeStatsByCategoryGet trading stats by categoriesgetVolumeStatsByChainGet trading stats by chain"
      },
      {
        "title": "Other",
        "body": "Utility endpoints including API version, endpoint weights, and address resolution.\n\nEndpointDescriptiongetBondingTokensByExchangeGet bonding tokens by exchangegetEntitiesByCategoryGet Entities By CategorygetFilteredTokensReturns a list of tokens that match the specified filters and criteriagetGraduatedTokensByExchangeGet graduated tokens by exchangegetHistoricalTokenHoldersGet timeseries holders datagetNewTokensByExchangeGet new tokens by exchangegetUniqueOwnersByCollectionGet unique wallet addresses owning NFTs from a contract.resolveAddressENS lookup by addressresolveAddressToDomainResolve Address to Unstoppable domainresolveDomainResolve Unstoppable domainresolveENSDomainENS lookup by domainreSyncMetadataResync NFT metadatasearchEntitiesSearch Entities, Organizations or WalletssearchTokensSearch for tokens based on contract address, pair address, token name or token symbol."
      },
      {
        "title": "Solana Endpoints",
        "body": "Solana-specific endpoints (24 native + 10 EVM variants that support Solana chain = 34 total).\n\nEndpointDescriptionbalanceGets native balance owned by the given addressgetAggregatedTokenPairStatsGet aggregated token pair statistics by addressgetBondingTokensByExchangeGet bonding tokens by exchangegetCandleSticksGet candlesticks for a pair addressgetGraduatedTokensByExchangeGet graduated tokens by exchangegetHistoricalTokenHoldersGet token holders overtime for a given tokensgetMultipleTokenMetadataGet multiple token metadatagetMultipleTokenPricesGet token pricegetNFTMetadataGet the global metadata for a given contractgetNFTsGets NFTs owned by the given addressgetNewTokensByExchangeGet new tokens by exchangegetPairStatsGet stats for a pair addressgetPortfolioGets the portfolio of the given addressgetSPLGets token balances owned by the given addressgetSnipersByPairAddressGet snipers by pair 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.getTokenBondingStatusGet Token Bonding StatusgetTokenHoldersGet the summary of holders for a given token token.getTokenMetadataGet Token metadatagetTokenPairsGet token pairs by addressgetTokenPriceGet token pricegetTopHoldersGet paginated top holders for a given token.getDiscoveryTokenSolana variant: Get token detailsgetHistoricalTokenScoreSolana variant: Get historical token score by token addressgetTimeSeriesVolumeSolana variant: Retrieve timeseries trading stats by chaingetTimeSeriesVolumeByCategorySolana variant: Retrieve timeseries trading stats by categorygetTokenAnalyticsSolana variant: Get token analytics by token addressgetTokenScoreSolana variant: Get token score by token addressgetTopGainersTokensSolana variant: Get tokens with top gainersgetTopLosersTokensSolana variant: Get tokens with top losersgetTrendingTokensSolana variant: Get trending tokensgetVolumeStatsByCategorySolana variant: Get trading stats by categories"
      },
      {
        "title": "Reference Documentation",
        "body": "references/CommonPitfalls.md - Complete pitfalls reference\nreferences/DataTransformations.md - Type conversion reference\nreferences/FilteredTokens.md - Token discovery metrics, timeframes, filters, and examples\nreferences/PerformanceAndLatency.md - Response time guidance, timeout recommendations, caching\nreferences/ResponsePatterns.md - Pagination patterns\nreferences/SupportedApisAndChains.md - Chains and APIs"
      },
      {
        "title": "See Also",
        "body": "Endpoint rules: rules/*.md files\nStreams API: @moralis-streams-api for real-time events"
      }
    ],
    "body": "CRITICAL: Read Rule Files Before Implementing\n\nThe #1 cause of bugs is not reading the endpoint rule file before writing code.\n\nFor EVERY endpoint:\n\nRead rules/{EndpointName}.md\nFind \"Example Response\" section\nCopy the EXACT JSON structure\nNote field names (snake_case), data types, HTTP method, path, wrapper structure\n\nReading Order:\n\nThis SKILL.md (core patterns)\nEndpoint rule file in rules/\nPattern references in references/ (for edge cases only)\nSetup\nAPI Key (optional)\n\nNever ask the user to paste their API key into the chat. Instead:\n\nCheck 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\").\nIf not set, offer to create the .env file with an empty placeholder: MORALIS_API_KEY=\nTell the user to open the .env file and paste their key there themselves.\nLet them know: without the key, you won't be able to test or call the Moralis API on their behalf.\n\nIf they don't have a key yet, point them to admin.moralis.com/register (free, no credit card).\n\nEnvironment Variable Discovery\n\nThe .env file location depends on how skills are installed:\n\nCreate the .env file in the project root (same directory the user runs Claude Code from). Make sure .env is in .gitignore.\n\nVerify Your Key\ncurl \"https://deep-index.moralis.io/api/v2.2/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045/balance?chain=0x1\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\"\n\nBase URLs\nAPI\tBase URL\nEVM\thttps://deep-index.moralis.io/api/v2.2\nSolana\thttps://solana-gateway.moralis.io\nAuthentication\n\nAll requests require: X-API-Key: $MORALIS_API_KEY\n\nQuick Reference: Most Common Patterns\nData Type Rules\nField\tReality\tNOT\nblock_number\tDecimal 12386788\tHex 0xf2b5a4\ntimestamp\tISO \"2021-05-07T11:08:35.000Z\"\tUnix 1620394115\nbalance\tString \"1000000000000000000\"\tNumber\ndecimals\tString or number\tAlways number\nBlock Numbers (always decimal)\nblock_number: 12386788; // number - use directly\nblock_number: \"12386788\"; // string - parseInt(block_number, 10)\n\nTimestamps (usually ISO strings)\n\"2021-05-07T11:08:35.000Z\"; // → new Date(timestamp).getTime()\n\nBalances (always strings unless its a property named \"formatted\" eg. balanceFormatted, BigInt)\nbalance: \"1000000000000000000\";\n// → (Number(BigInt(balance)) / 1e18).toFixed(6)\n\nResponse Patterns\nPattern\tExample Endpoints\nDirect array [...]\tgetWalletTokenBalancesPrice, getTokenMetadata\nWrapped { result: [] }\tgetWalletNFTs, getWalletTransactions\nPaginated { page, cursor, result }\tgetWalletHistory, getNFTTransfers\n// Safe extraction\nconst data = Array.isArray(response) ? response : response.result || [];\n\nCommon Field Mappings\ntoken_address → tokenAddress\nfrom_address_label → fromAddressLabel\nblock_number → blockNumber\nreceipt_status: \"1\" → success, \"0\" → failed\npossible_spam: \"true\"/\"false\" → boolean check\n\nCommon Pitfalls (Top 5)\nBlock numbers are decimal, not hex - Use parseInt(x, 10), not parseInt(x, 16)\nTimestamps are ISO strings - Use new Date(timestamp).getTime()\nBalances are strings - Use BigInt(balance) for math\nResponse may be wrapped - Check for .result before .map()\nPath inconsistencies - Some use /wallets/{address}/..., others /{address}/...\n\nSee references/CommonPitfalls.md for complete reference.\n\nPagination\n\nMany endpoints use cursor-based pagination:\n\n# First request\ncurl \"...?limit=100\" -H \"X-API-Key: $KEY\"\n\n# Next page\ncurl \"...?limit=100&cursor=<cursor_from_response>\" -H \"X-API-Key: $KEY\"\n\n\nSee references/Pagination.md for details.\n\nTesting Endpoints\nADDRESS=\"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\nCHAIN=\"0x1\"\n\n# Wallet Balance\ncurl \"https://deep-index.moralis.io/api/v2.2/${ADDRESS}/balance?chain=${CHAIN}\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\"\n\n# Token Price\ncurl \"https://deep-index.moralis.io/api/v2.2/erc20/0x6B175474E89094C44Da98b954EedeAC495271d0F/price?chain=${CHAIN}\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\"\n\n# Wallet Transactions (note result wrapper)\ncurl \"https://deep-index.moralis.io/api/v2.2/${ADDRESS}?chain=${CHAIN}&limit=5\" \\\n  -H \"X-API-Key: $MORALIS_API_KEY\" | jq '.result'\n\nQuick Troubleshooting\nIssue\tCause\tSolution\n\"Property does not exist\"\tField name mismatch\tCheck snake_case in rule file\n\"Cannot read undefined\"\tMissing optional field\tUse ?. optional chaining\n\"blockNumber is NaN\"\tParsing decimal as hex\tUse radix 10: parseInt(x, 10)\n\"Wrong timestamp\"\tParsing ISO as number\tUse new Date(timestamp).getTime()\n\"404 Not Found\"\tWrong endpoint path\tVerify path in rule file\nPerformance & Timeouts\n\nMost endpoints respond quickly under normal conditions. Response times can vary based on wallet activity volume, chain, and query complexity.\n\nRecommended client timeouts:\n\nSimple queries (balance, price, metadata): 10s\nComplex queries (wallet history, DeFi positions): 30s\n\nLarge wallets with extensive transaction histories may take longer — use pagination with reasonable limit values.\n\nSee references/PerformanceAndLatency.md for optimization tips.\n\nDefault Chain Behavior\n\nEVM addresses (0x...): Default to Ethereum (chain=0x1) unless specified.\n\nSolana addresses (base58): Auto-detected and routed to Solana API.\n\nSupported Chains\n\nEVM (40+ chains): Ethereum (0x1), Polygon (0x89), BSC (0x38), Arbitrum (0xa4b1), Optimism (0xa), Base (0x2105), Avalanche (0xa86a), and more.\n\nSolana: Mainnet, Devnet\n\nSee references/SupportedApisAndChains.md for full list.\n\nEndpoint Catalog\n\nComplete list of all 136 endpoints (102 EVM + 34 Solana) organized by category.\n\nWallet\n\nBalances, tokens, NFTs, transaction history, profitability, and net worth data.\n\nEndpoint\tDescription\ngetNativeBalance\tGet native balance by wallet\ngetNativeBalancesForAddresses\tGet native balance for a set of wallets\ngetWalletActiveChains\tGet active chains by wallet address\ngetWalletApprovals\tGet ERC20 approvals by wallet\ngetWalletHistory\tGet the complete decoded transaction history of a wallet\ngetWalletInsight\tGet wallet insight metrics\ngetWalletNetWorth\tGet wallet net worth\ngetWalletNFTCollections\tGet NFT collections by wallet address\ngetWalletNFTs\tGet NFTs by wallet address\ngetWalletNFTTransfers\tGet NFT Transfers by wallet address\ngetWalletProfitability\tGet detailed profit and loss by wallet address\ngetWalletProfitabilitySummary\tGet profit and loss summary by wallet address\ngetWalletStats\tGet summary stats by wallet address\ngetWalletTokenBalancesPrice\tGet token balances with prices by wallet address\ngetWalletTokenTransfers\tGet ERC20 token transfers by wallet address\ngetWalletTransactions\tGet native transactions by wallet\ngetWalletTransactionsVerbose\tGet decoded transactions by wallet\nToken\n\nToken prices, metadata, pairs, DEX swaps, analytics, security scores, and sniper detection.\n\nEndpoint\tDescription\ngetAggregatedTokenPairStats\tGet aggregated token pair statistics by address\ngetHistoricalTokenScore\tGet historical token score by token address\ngetMultipleTokenAnalytics\tGet token analytics for a list of token addresses\ngetPairAddress\tGet DEX token pair address\ngetPairReserves\tGet DEX token pair reserves\ngetPairStats\tGet stats by pair address\ngetSnipersByPairAddress\tGet snipers by pair address\ngetSwapsByPairAddress\tGet swap transactions by pair address\ngetSwapsByTokenAddress\tGet swap transactions by token address\ngetSwapsByWalletAddress\tGet swap transactions by wallet address\ngetTimeSeriesTokenAnalytics\tRetrieve timeseries trading stats by token addresses\ngetTokenAnalytics\tGet token analytics by token address\ngetTokenBondingStatus\tGet the token bonding status\ngetTokenCategories\tGet ERC20 token categories\ngetTokenHolders\tGet a holders summary by token address\ngetTokenMetadata\tGet ERC20 token metadata by contract\ngetTokenMetadataBySymbol\tGet ERC20 token metadata by symbols\ngetTokenOwners\tGet ERC20 token owners by contract\ngetTokenPairs\tGet token pairs by address\ngetTokenScore\tGet token score by token address\ngetTokenStats\tGet ERC20 token stats\ngetTokenTransfers\tGet ERC20 token transfers by contract address\nNFT\n\nNFT metadata, transfers, traits, rarity, floor prices, and trades.\n\nEndpoint\tDescription\ngetContractNFTs\tGet NFTs by contract address\ngetMultipleNFTs\tGet Metadata for NFTs\ngetNFTBulkContractMetadata\tGet metadata for multiple NFT contracts\ngetNFTByContractTraits\tGet NFTs by traits\ngetNFTCollectionStats\tGet summary stats by NFT collection\ngetNFTContractMetadata\tGet NFT collection metadata\ngetNFTContractSalePrices\tGet NFT sale prices by collection\ngetNFTContractTransfers\tGet NFT transfers by contract address\ngetNFTFloorPriceByContract\tGet NFT floor price by contract\ngetNFTFloorPriceByToken\tGet NFT floor price by token\ngetNFTHistoricalFloorPriceByContract\tGet historical NFT floor price by contract\ngetNFTMetadata\tGet NFT metadata\ngetNFTOwners\tGet NFT owners by contract address\ngetNFTSalePrices\tGet NFT sale prices by token\ngetNFTTokenIdOwners\tGet NFT owners by token ID\ngetNFTTrades\tGet NFT trades by collection\ngetNFTTradesByToken\tGet NFT trades by token\ngetNFTTradesByWallet\tGet NFT trades by wallet address\ngetNFTTraitsByCollection\tGet NFT traits by collection\ngetNFTTraitsByCollectionPaginate\tGet NFT traits by collection paginate\ngetNFTTransfers\tGet NFT transfers by token ID\ngetTopNFTCollectionsByMarketCap\tGet top NFT collections by market cap\nDeFi\n\nDeFi protocol positions, liquidity, and exposure data.\n\nEndpoint\tDescription\ngetDefiPositionsByProtocol\tGet detailed DeFi positions by protocol for a wallet\ngetDefiPositionsSummary\tGet DeFi positions of a wallet\ngetDefiSummary\tGet the DeFi summary of a wallet\nEntity\n\nLabeled addresses including exchanges, funds, protocols, and whales.\n\nEndpoint\tDescription\ngetEntity\tGet Entity Details By Id\ngetEntityCategories\tGet Entity Categories\nPrice\n\nToken and NFT prices, OHLCV candlestick data.\n\nEndpoint\tDescription\ngetMultipleTokenPrices\tGet Multiple ERC20 token prices\ngetPairCandlesticks\tGet OHLCV by pair address\ngetPairPrice\tGet DEX token pair price\ngetTokenPrice\tGet ERC20 token price\nBlockchain\n\nBlocks, transactions, date-to-block conversion, and contract functions.\n\nEndpoint\tDescription\ngetBlock\tGet block by hash\ngetDateToBlock\tGet block by date\ngetLatestBlockNumber\tGet latest block number\ngetTransaction\tGet transaction by hash\ngetTransactionVerbose\tGet decoded transaction by hash\nDiscovery\n\nTrending tokens, blue chips, market movers, and token discovery.\n\nEndpoint\tDescription\ngetDiscoveryToken\tGet token details\ngetTimeSeriesVolume\tRetrieve timeseries trading stats by chain\ngetTimeSeriesVolumeByCategory\tRetrieve timeseries trading stats by category\ngetTopCryptoCurrenciesByMarketCap\tGet top crypto currencies by market cap\ngetTopCryptoCurrenciesByTradingVolume\tGet top crypto currencies by trading volume\ngetTopERC20TokensByMarketCap\tGet top ERC20 tokens by market cap\ngetTopERC20TokensByPriceMovers\tGet top ERC20 tokens by price movements (winners and losers)\ngetTopGainersTokens\tGet tokens with top gainers\ngetTopLosersTokens\tGet tokens with top losers\ngetTopProfitableWalletPerToken\tGet top traders for a given ERC20 token\ngetTrendingTokens\tGet trending tokens\ngetVolumeStatsByCategory\tGet trading stats by categories\ngetVolumeStatsByChain\tGet trading stats by chain\nOther\n\nUtility endpoints including API version, endpoint weights, and address resolution.\n\nEndpoint\tDescription\ngetBondingTokensByExchange\tGet bonding tokens by exchange\ngetEntitiesByCategory\tGet Entities By Category\ngetFilteredTokens\tReturns a list of tokens that match the specified filters and criteria\ngetGraduatedTokensByExchange\tGet graduated tokens by exchange\ngetHistoricalTokenHolders\tGet timeseries holders data\ngetNewTokensByExchange\tGet new tokens by exchange\ngetUniqueOwnersByCollection\tGet unique wallet addresses owning NFTs from a contract.\nresolveAddress\tENS lookup by address\nresolveAddressToDomain\tResolve Address to Unstoppable domain\nresolveDomain\tResolve Unstoppable domain\nresolveENSDomain\tENS lookup by domain\nreSyncMetadata\tResync NFT metadata\nsearchEntities\tSearch Entities, Organizations or Wallets\nsearchTokens\tSearch for tokens based on contract address, pair address, token name or token symbol.\nSolana Endpoints\n\nSolana-specific endpoints (24 native + 10 EVM variants that support Solana chain = 34 total).\n\nEndpoint\tDescription\nbalance\tGets native balance owned by the given address\ngetAggregatedTokenPairStats\tGet aggregated token pair statistics by address\ngetBondingTokensByExchange\tGet bonding tokens by exchange\ngetCandleSticks\tGet candlesticks for a pair address\ngetGraduatedTokensByExchange\tGet graduated tokens by exchange\ngetHistoricalTokenHolders\tGet token holders overtime for a given tokens\ngetMultipleTokenMetadata\tGet multiple token metadata\ngetMultipleTokenPrices\tGet token price\ngetNFTMetadata\tGet the global metadata for a given contract\ngetNFTs\tGets NFTs owned by the given address\ngetNewTokensByExchange\tGet new tokens by exchange\ngetPairStats\tGet stats for a pair address\ngetPortfolio\tGets the portfolio of the given address\ngetSPL\tGets token balances owned by the given address\ngetSnipersByPairAddress\tGet snipers by pair address.\ngetSwapsByPairAddress\tGet all swap related transactions (buy, sell, add liquidity & remove liquidity)\ngetSwapsByTokenAddress\tGet all swap related transactions (buy, sell)\ngetSwapsByWalletAddress\tGet all swap related transactions (buy, sell) for a specific wallet address.\ngetTokenBondingStatus\tGet Token Bonding Status\ngetTokenHolders\tGet the summary of holders for a given token token.\ngetTokenMetadata\tGet Token metadata\ngetTokenPairs\tGet token pairs by address\ngetTokenPrice\tGet token price\ngetTopHolders\tGet paginated top holders for a given token.\ngetDiscoveryToken\tSolana variant: Get token details\ngetHistoricalTokenScore\tSolana variant: Get historical token score by token address\ngetTimeSeriesVolume\tSolana variant: Retrieve timeseries trading stats by chain\ngetTimeSeriesVolumeByCategory\tSolana variant: Retrieve timeseries trading stats by category\ngetTokenAnalytics\tSolana variant: Get token analytics by token address\ngetTokenScore\tSolana variant: Get token score by token address\ngetTopGainersTokens\tSolana variant: Get tokens with top gainers\ngetTopLosersTokens\tSolana variant: Get tokens with top losers\ngetTrendingTokens\tSolana variant: Get trending tokens\ngetVolumeStatsByCategory\tSolana variant: Get trading stats by categories\nReference Documentation\nreferences/CommonPitfalls.md - Complete pitfalls reference\nreferences/DataTransformations.md - Type conversion reference\nreferences/FilteredTokens.md - Token discovery metrics, timeframes, filters, and examples\nreferences/PerformanceAndLatency.md - Response time guidance, timeout recommendations, caching\nreferences/ResponsePatterns.md - Pagination patterns\nreferences/SupportedApisAndChains.md - Chains and APIs\nSee Also\nEndpoint rules: rules/*.md files\nStreams API: @moralis-streams-api for real-time events"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/novnski/moralis-data-api",
    "publisherUrl": "https://clawhub.ai/novnski/moralis-data-api",
    "owner": "novnski",
    "version": "1.3.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/moralis-data-api",
    "downloadUrl": "https://openagent3.xyz/downloads/moralis-data-api",
    "agentUrl": "https://openagent3.xyz/skills/moralis-data-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/moralis-data-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/moralis-data-api/agent.md"
  }
}