moralis-data-api について
Claude CodeでMoralis Data APIを利用し、オンチェーンデータの照会やAPIエンドポイントの実装を行う開発者向けスキルです。エンドポイントごとの規則、レスポンス構造、認証、ページネーション、データ型の注意点を扱います。
主な機能
- 01エンドポイント規則に沿った実装ガイド
- 02Moralis APIキーの設定手順
- 03EVM、Solana、Universal APIの説明
- 04レスポンス構造とフィールド型の案内
- 05ページネーション、タイムアウト、トラブル対応
活用シーン
- 01ウォレット残高や取引の照会実装
- 02トークンやNFTのレスポンス処理
- 03オンチェーンデータ取得のページ分割
- 04フィールド、パス、解析エラーの調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ novnski/ onchain-skills --skill moralis-data-apiインストール後、Claude Code で/moralis-data-apiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ApiResponseCodes.mdCommonPitfalls.mdDataFeatureGuidance.mdDataTransformations.mdDefiProtocols.mdDeprecatedEndpoints.mdNftMarketplaces.mdPagination.mdPerformanceAndLatency.mdPricingAndPremium.mdResponsePatterns.mdSpamDetection.mdSupportedApisAndChains.mdSupportedDexs.mdTokenHoldersFaq.mdTokenSearch.mdUniversalAndBitcoin.mdWalletHistory.mdrules/balance__solana.mdgetAddressesByXpub__universal.mdgetAggregatedTokenPairStats__solana.mdgetBlock.mdgetBlockByNumberOrHash__universal.mdgetCandleSticks__solana.mdgetCandleSticks__universal.mdgetContractNFTs.mdgetDateToBlock.mdgetDefiPositions__universal.mdgetDefiPositionsByProtocol.mdgetDefiPositionsSummary.md詳細
重要:実装前にルールファイルを読む
バグの最大の原因は、コードを書く前にエンドポイントのルールファイルを読まないことです。
すべてのエンドポイントについて:
rules/{EndpointName}.mdを読む- 「Example Response」セクションを探す
- JSON の構造を正確にコピーする
- フィールド名(snake_case)、データ型、HTTP メソッド、パス、ラッパー構造を確認する
読む順序:
- この SKILL.md(基本パターン)
rules/内のエンドポイントルールファイル- ユーザーが CU コスト、プレミアムエンドポイント、またはプラン要件について尋ねた場合は
references/PricingAndPremium.md references/内のパターンリファレンス(エッジケースのみ)
セットアップ
API キー
チャットに API キーを貼り付けるよう、ユーザーに求めないでください。 代わりに:
- 環境変数に
MORALIS_API_KEYが設定されているか確認します([ -n "$MORALIS_API_KEY" ] && echo "API key is set" || echo "API key is NOT set"を実行してみてください)。 - 設定されていない場合は、空のプレースホルダー
MORALIS_API_KEY=を含む.envファイルの作成を提案します。 - ユーザー自身で
.envファイルを開き、キーを貼り付けるよう伝えます。 - キーがないと、ユーザーに代わって Moralis API をテストしたり呼び出したりできないことを伝えます。
まだキーを持っていない場合は、admin.moralis.com/register を案内してください。Free プランは2026年9月1日に廃止されました。利用には有料プランが必要です。Starter、Pro、Business の月額料金については、プラン料金を参照し、最新の料金ページで確認してください。
環境変数の場所の確認
.env ファイルの場所は、スキルのインストール方法によって異なります。
プロジェクトのルート(ユーザーが Claude Code を実行するディレクトリと同じ場所)に .env ファイルを作成してください。.env が .gitignore に含まれていることを確認してください。
キーの確認
curl "https://deep-index.moralis.io/api/v2.2/YOUR_EVM_ADDRESS/balance?chain=0x1" \
-H "X-API-Key: $MORALIS_API_KEY"
ベース URL
| API | ベース URL |
|---|---|
| EVM | https://deep-index.moralis.io/api/v2.2 |
| Solana | https://solana-gateway.moralis.io |
| Universal / Bitcoin | https://api.moralis.com |
認証
すべてのリクエストに必要です:X-API-Key: $MORALIS_API_KEY
クイックリファレンス:よく使うパターン
データ型のルール
| フィールド | 実際の形式 | そうではない形式 |
|---|---|---|
block_number | 10進数 12386788 | 16進数 0xf2b5a4 |
timestamp | ISO 形式 "2021-05-07T11:08:35.000Z" | Unix 時刻 1620394115 |
balance | 文字列 "1000000000000000000" | 数値 |
decimals | 文字列または数値 | 常に数値 |
ブロック番号(常に10進数)
block_number: 12386788; // number - use directly
block_number: "12386788"; // string - parseInt(block_number, 10)
タイムスタンプ(通常は ISO 文字列)
"2021-05-07T11:08:35.000Z"; // → new Date(timestamp).getTime()
残高(プロパティ名が「formatted」(例:balanceFormatted)の場合や BigInt を除き、常に文字列)
balance: "1000000000000000000";
// → (Number(BigInt(balance)) / 1e18).toFixed(6)
レスポンスのパターン
| パターン | エンドポイントの例 |
|---|---|
直接配列 [...] | getWalletTokenBalancesPrice、getTokenMetadata |
ラップされた { result: [] } | getWalletNFTs、getWalletTransactions |
ページネーション形式 { page, cursor, result } | getWalletHistory、getNFTTransfers |
// Safe extraction
const data = Array.isArray(response) ? response : response.result || [];
よくあるフィールドの対応関係
token_address → tokenAddress
from_address_label → fromAddressLabel
block_number → blockNumber
receipt_status: "1" → success, "0" → failed
possible_spam: "true"/"false" → boolean check
よくある落とし穴(上位5つ)
- ブロック番号は16進数ではなく10進数です -
parseInt(x, 16)ではなくparseInt(x, 10)を使用します - タイムスタンプは ISO 文字列です -
new Date(timestamp).getTime()を使用します - 残高は文字列です - 計算には
BigInt(balance)を使用します - レスポンスがラップされている場合があります -
.map()の前に.resultを確認します - パスに一貫性がありません -
/wallets/{address}/...を使うものもあれば、/{address}/...を使うものもあります
詳しくは、references/CommonPitfalls.md を参照してください。
ページネーション
多くのエンドポイントはカーソルベースのページネーションを使用します。
# First request
curl "...?limit=100" -H "X-API-Key: $KEY"
# Next page
curl "...?limit=100&cursor=<cursor_from_response>" -H "X-API-Key: $KEY"
詳しくは、references/Pagination.md を参照してください。
エンドポイントのテスト
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'
すぐにできるトラブルシューティング
| 問題 | 原因 | 解決方法 |
|---|---|---|
| "Property does not exist" | フィールド名の不一致 | ルールファイルの snake_case を確認してください |
| "Cannot read undefined" | オプションのフィールドが不足 | ?. のオプショナルチェーンを使用してください |
| "blockNumber is NaN" | 10進数を16進数として解析 | 基数 10 を指定します:parseInt(x, 10) |
| "Wrong timestamp" | ISO 形式を数値として解析 | new Date(timestamp).getTime() を使用してください |
| "404 Not Found" | エンドポイントのパスが誤っているか、削除されている | ルールカタログと DeprecatedEndpoints.md を確認してください |
パフォーマンスとタイムアウト
通常の状況では、ほとんどのエンドポイントがすばやく応答します。応答時間は、ウォレットのアクティビティ量、チェーン、クエリの複雑さによって変わることがあります。
推奨されるクライアントのタイムアウト:
- シンプルなクエリ(残高、価格、メタデータ):10s
- 複雑なクエリ(ウォレット履歴、DeFi ポジション):30s
取引履歴が大量にあるウォレットでは、処理に時間がかかることがあります。妥当な limit 値を指定してページネーションを使用してください。
最適化のヒントについては、references/PerformanceAndLatency.md を参照してください。
料金とプランの要件
Data API のエンドポイントには明示的な Compute Unit(CU)コストが設定されており、一部のエンドポイントでは Starter または Pro プランが必要です。料金、クォータ、プレミアムエンドポイント、プランによる利用制限について回答する際は、references/PricingAndPremium.md を参照してください。
デフォルトのチェーン動作
EVM アドレス(0x...): 指定がない場合は Ethereum(chain=0x1)をデフォルトにします。
Solana アドレス(base58): 自動検出され、Solana API にルーティングされます。
対応チェーン
EVM: エンドポイントルールに記載された最新のエイリアスと16進数 ID を使用してください。Fantom と複数のテストネットは削除されています。Moonbeam、Moonriver、Lisk は 2026年9月25日に削除予定です。
Solana: メインネットのみ
全リストについては、references/SupportedApisAndChains.md を参照してください。
エンドポイントカタログ
カテゴリ別に整理された、全116エンドポイント(EVM 79件 + Solana 18件 + Universal / Bitcoin 19件)の完全な一覧です。
ウォレット
残高、トークン、NFT、トランザクション履歴、収益性、純資産データ。
| エンドポイント | 説明 |
|---|---|
| getNativeBalance | ウォレットのネイティブ残高を取得 |
| getNativeBalancesForAddresses | 複数のウォレットのネイティブ残高を取得 |
| getWalletActiveChains | ウォレットアドレスで有効なチェーンを取得 |
| getWalletApprovals | ウォレットの ERC20 承認を取得 |
| getWalletHistory | ウォレットのデコード済みトランザクション履歴をすべて取得 |
| getWalletInsight | ウォレットのインサイト指標を取得 |
| getWalletNetWorth | ウォレットの純資産を取得 |
| getWalletNFTCollections | ウォレットアドレスで NFT コレクションを取得 |
| getWalletNFTs | ウォレットアドレスで NFT を取得 |
| getWalletNFTTransfers | ウォレットアドレスで NFT の送金を取得 |
| getWalletProfitability | ウォレットアドレスの詳細な損益を取得 |
| getWalletProfitabilitySummary | ウォレットアドレスの損益サマリーを取得 |
| getWalletStats | ウォレットアドレスの統計サマリーを取得 |
| getWalletTokenBalances | ウォレットの ERC20 トークン残高を取得 |
| getWalletTokenBalancesPrice | ウォレットアドレスのトークン残高と価格を取得 |
| getWalletTokenTransfers | ウォレットアドレスの ERC20 トークン送金を取得 |
| getWalletTransactions | ウォレットのネイティブトランザクションを取得 |
| getWalletTransactionsVerbose | ウォレットのデコード済みトランザクションを取得 |
トークン
トークン価格、メタデータ、ペア、DEX スワップ、分析、セキュリティスコア、保有者。
| エンドポイント | 説明 |
|---|---|
| getHistoricalTokenScore | トークンアドレスの過去のトークンスコアを取得 |
| getMultipleTokenAnalytics | トークンアドレスのリストについてトークン分析データを取得 |
| getPairStats | ペアアドレスの統計を取得 |
| getSwapsByPairAddress | ペアアドレスのスワップトランザクションを取得 |
| getSwapsByTokenAddress | トークンアドレスのスワップトランザクションを取得 |
| getSwapsByWalletAddress | ウォレットアドレスのスワップトランザクションを取得 |
| getTimeSeriesTokenAnalytics | トークンアドレスごとの時系列取引統計を取得 |
| getTokenAnalytics | トークンアドレスのトークン分析データを取得 |
| getTokenCategories | ERC20 トークンのカテゴリーを取得 |
| getTokenHolders | トークンアドレスの保有者サマリーを取得 |
| getTokenMetadata | コントラクトの ERC20 トークンメタデータを取得 |
| getTokenOwners | コントラクトの ERC20 トークン所有者を取得 |
| getTokenPairs | アドレスのトークンペアを取得 |
| getTokenScore | トークンアドレスのトークンスコアを取得 |
| getTokenTransfers | コントラクトアドレスの ERC20 トークン送金を取得 |
NFT
NFT のメタデータ、送金、トレイト、希少度、フロア価格、取引。
| Endpoint | Description |
|---|---|
| getContractNFTs | コントラクトアドレスで NFT を取得 |
| getMultipleNFTs | NFT のメタデータを取得 |
| getNFTBulkContractMetadata | 複数の NFT コントラクトのメタデータを取得 |
| getNFTByContractTraits | トレイトで NFT を取得 |
| getNFTCollectionStats | NFT コレクションの概要統計を取得 |
| getNFTContractMetadata | NFT コレクションのメタデータを取得 |
| getNFTContractSalePrices | コレクション別に NFT の販売価格を取得 |
| getNFTContractTransfers | コントラクトアドレス別に NFT の送金を取得 |
| getNFTFloorPriceByContract | コントラクト別に NFT のフロア価格を取得 |
| getNFTFloorPriceByToken | トークン別に NFT のフロア価格を取得 |
| getNFTHistoricalFloorPriceByContract | コントラクト別に NFT の過去のフロア価格を取得 |
| getNFTMetadata | NFT のメタデータを取得 |
| getNFTOwners | コントラクトアドレス別に NFT の所有者を取得 |
| getNFTSalePrices | トークン別に NFT の販売価格を取得 |
| getNFTTokenIdOwners | トークン ID 別に NFT の所有者を取得 |
| getNFTTrades | コレクション別に NFT の取引を取得 |
| getNFTTradesByToken | トークン別に NFT の取引を取得 |
| getNFTTradesByWallet | ウォレットアドレス別に NFT の取引を取得 |
| getNFTTraitsByCollection | コレクション別に NFT のトレイトを取得 |
| getNFTTraitsByCollectionPaginate | コレクション別に NFT のトレイトをページネーション形式で取得 |
| getNFTTransfers | トークン ID 別に NFT の送金を取得 |
| resyncNFTRarity | NFT のトレイトを再同期 |
DeFi
DeFi プロトコルのポジション、流動性、エクスポージャーデータ。
| Endpoint | Description |
|---|---|
| getDefiPositionsByProtocol | ウォレットの DeFi ポジションの詳細をプロトコル別に取得 |
| getDefiPositionsSummary | ウォレットの DeFi ポジションを取得 |
| getDefiSummary | ウォレットの DeFi サマリーを取得 |
Entity
取引所、ファンド、プロトコル、クジラなど、ラベル付きのアドレス。
| Endpoint | Description |
|---|---|
| getEntity | ID によるエンティティの詳細を取得 |
| getEntityCategories | エンティティのカテゴリを取得 |
Price
トークンと NFT の価格、OHLCV ローソク足データ。
| Endpoint | Description |
|---|---|
| getMultipleTokenPrices | 複数の ERC20 トークン価格を取得 |
| getPairCandlesticks | ペアアドレス別に OHLCV を取得 |
| getTokenPrice | ERC20 トークン価格を取得 |
Blockchain
ブロック、トランザクション、日付からブロックへの変換、コントラクト関数。
| Endpoint | Description |
|---|---|
| getBlock | ハッシュでブロックを取得 |
| getDateToBlock | 日付でブロックを取得 |
| getLatestBlockNumber | 最新のブロック番号を取得 |
| getTransaction | ハッシュでトランザクションを取得 |
| getTransactionVerbose | ハッシュでデコード済みトランザクションを取得 |
検索
トレンドトークンとトップトレーダーを検索します。
| エンドポイント | 説明 |
|---|---|
| getTopProfitableWalletPerToken | 指定した ERC20 トークンのトップトレーダーを取得 |
| getTrendingTokensV2 | トレンドトークンを取得 |
その他
アドレスの解決、エンティティの検索、補助ユーティリティです。
| エンドポイント | 説明 |
|---|---|
| getEntitiesByCategory | カテゴリ別にエンティティを取得 |
| getUniqueOwnersByCollection | コントラクトの NFT を所有する一意のウォレットアドレスを取得します。 |
| resolveAddress | アドレスから ENS を検索 |
| resolveAddressToDomain | アドレスを Unstoppable ドメインに解決 |
| resolveDomain | Unstoppable ドメインを解決 |
| resolveENSDomain | ドメインから ENS を検索 |
| reSyncMetadata | NFT メタデータを再同期 |
| searchEntities | エンティティ、組織、ウォレットを検索 |
| searchTokens | コントラクトアドレス、ペアアドレス、トークン名、トークンシンボルに基づいてトークンを検索します。 |
Solana エンドポイント
Solana 固有のエンドポイント(ネイティブ 16 個 + Solana チェーンに対応する EVM バリアント 2 個、合計 18 個)。
| エンドポイント | 説明 |
|---|---|
| balance | 指定したアドレスが保有するネイティブ残高を取得 |
| getAggregatedTokenPairStats | アドレス別に集計されたトークンペアの統計を取得 |
| getCandleSticks | ペアアドレスのローソク足を取得 |
| getMultipleTokenMetadata | 複数のトークンメタデータを取得 |
| getMultipleTokenPrices | トークン価格を取得 |
| getNFTMetadata | 指定したコントラクトのグローバルメタデータを取得 |
| getNFTs | 指定したアドレスが所有する NFT を取得 |
| getPairStats | ペアアドレスの統計を取得 |
| getPortfolio | 指定したアドレスのポートフォリオを取得 |
| getSPL | 指定したアドレスが保有するトークン残高を取得 |
| getSwapsByPairAddress | スワップ関連のすべてのトランザクション(購入、売却、流動性の追加と削除)を取得 |
| getSwapsByTokenAddress | スワップ関連のすべてのトランザクション(購入、売却)を取得 |
| getSwapsByWalletAddress | 特定のウォレットアドレスのスワップ関連トランザクション(購入、売却)をすべて取得します。 |
| getTokenMetadata | トークンメタデータを取得 |
| getTokenPairs | アドレス別にトークンペアを取得 |
| getTokenPrice | トークン価格を取得 |
| getTokenAnalytics | Solana バリアント: トークンアドレス別にトークン分析データを取得 |
| getTrendingTokensV2 | Solana バリアント: トレンドトークンを取得 |
ユニバーサル/Bitcoin エンドポイント
Bitcoin Data API とクロスチェーン Universal API のページで使用する Universal v1 エンドポイントです。
| エンドポイント | 説明 |
|---|---|
| getAddressesByXpub | Bitcoin の拡張公開鍵(xpub)から派生アドレスを取得します。 |
| getBlockByNumberOrHash | チェーンとブロック番号またはハッシュを指定してブロックを取得します |
| getCandleSticks | ペアアドレスを使用して OHLCV ローソク足を取得します |
| getDefiPositions | 複数のチェーンにわたるウォレットの DeFi ポジションを取得します |
| getDefiProtocolPositions | 特定のプロトコルの DeFi ポジションを取得します |
| getDefiProtocols | サポート対象のすべての DeFi プロトコルを取得します |
| getDefiSummary | 複数のチェーンにわたるウォレットの DeFi ポジションの概要を取得します |
| getSwapsByPairAddress | スワップ関連のすべてのトランザクション(購入、売却、流動性の追加、流動性の削除)を取得します |
| getSwapsByTokenAddress | スワップ関連のすべてのトランザクション(購入、売却)を取得します |
| getTokenBalances | 特定のウォレットアドレスについて、複数のチェーンのトークン残高を取得します。 |
| getTokenPrice | アドレスを指定してトークン価格を取得します |
| getTokenPriceSparkline | トークンのスパークライン価格データを取得します |
| getTokenPriceTimeSeries | トークンの過去の価格時系列データを取得します |
| getTopTradersByToken | 単一のチェーンにおけるトークンの上位トレーダーを取得します。 |
| getTransactionByHash | チェーンとトランザクションハッシュを指定してトランザクションを取得します |
| getWalletHistory | 複数のチェーンにわたるウォレットのトランザクション履歴を取得します。 |
| getWalletInsight | 複数のチェーンにわたるウォレットのインサイト指標を取得します。 |
| getWalletProfitability | 複数のチェーンにわたるウォレットのトークンごとの収益性を取得します。 |
| getWalletProfitabilitySummary | 複数のチェーンにわたるウォレット単位の収益性の概要を取得します。 |
リファレンスドキュメント
- references/CommonPitfalls.md - よくある落とし穴の完全なリファレンス
- references/DataTransformations.md - 型変換のリファレンス
- references/DataFeatureGuidance.md - エンリッチメント、安全性、価格設定、ディスカバリー機能の動作
- references/DeprecatedEndpoints.md - 削除されたルート、代替手段、代替手段が明示的にないケース
- references/ApiResponseCodes.md - 一般的なステータスコードとレスポンスフィールドの規則
- references/PerformanceAndLatency.md - 応答時間のガイダンス、タイムアウトの推奨事項、キャッシュ
- references/ResponsePatterns.md - ページネーションのパターン
- references/SpamDetection.md - スパム検出の動作とフィルタリングのガイダンス
- references/SupportedApisAndChains.md - チェーンと API
- references/UniversalAndBitcoin.md - Universal v1 と Bitcoin Data API のリクエストパターン
関連項目
- エンドポイントのルール:
rules/*.mdファイル - Streams API:リアルタイムイベントについては @moralis-streams-api を参照