Skip to main content

Introduction

In this tutorial, you’ll learn how to retrieve all NFTs owned by a wallet address using the Moralis API. This works for both ERC721 and ERC1155 tokens and includes metadata, images, and collection information. This is essential for building NFT galleries, portfolio trackers, or wallet applications. We’ll use the following Moralis API endpoint:

Prerequisites

Step 1: Set Up Your Project

Create a new directory for your project and initialize it:
mkdir get-nft-balances && cd get-nft-balances
npm init -y

Step 2: Create the Script

Create a file called index.js and add the following code:
// index.js
const API_KEY = 'YOUR_API_KEY';
const WALLET_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'; // Vitalik's wallet

async function getNFTs() {
  const response = await fetch(
    `https://deep-index.moralis.io/api/v2.2/${WALLET_ADDRESS}/nft?chain=eth`,
    {
      headers: {
        'X-API-Key': API_KEY,
      },
    }
  );

  const data = await response.json();
  console.log(JSON.stringify(data, null, 2));
}

getNFTs();
Replace YOUR_API_KEY with your actual Moralis API key.

Step 3: Run the Script

Execute the script to fetch the NFTs:
node index.js

Example Response

{
  "status": "SYNCED",
  "page": 1,
  "page_size": 100,
  "cursor": null,
  "result": [
    {
      "token_address": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d",
      "token_id": "1234",
      "amount": "1",
      "owner_of": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "token_hash": "abc123...",
      "contract_type": "ERC721",
      "name": "Bored Ape Yacht Club",
      "symbol": "BAYC",
      "token_uri": "ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/1234",
      "metadata": {
        "name": "Bored Ape #1234",
        "image": "ipfs://QmRRPWG96cmgTn2qSzjwr2qvfNEuhunv6FNeMFGa9bx6mQ",
        "attributes": [
          { "trait_type": "Background", "value": "Aquamarine" },
          { "trait_type": "Fur", "value": "Blue" }
        ]
      },
      "last_token_uri_sync": "2024-01-15T10:30:00.000Z",
      "last_metadata_sync": "2024-01-15T10:30:00.000Z",
      "possible_spam": false,
      "verified_collection": true,
      "floor_price": 25.5,
      "floor_price_usd": 45000
    }
  ]
}

Understanding the Response

FieldDescription
token_addressThe NFT collection contract address
token_idThe unique token ID within the collection
amountQuantity owned (relevant for ERC1155)
contract_typeToken standard (ERC721 or ERC1155)
nameCollection name
symbolCollection symbol
metadataNFT metadata (name, image, attributes)
possible_spamWhether the NFT is flagged as spam
verified_collectionWhether the collection is verified
floor_priceCurrent floor price in native token
floor_price_usdFloor price in USD

Next Steps