Find Real-Time NFT Data On Demand

Stop sorting through smart contracts. Our NFT API puts the NFTs you're looking for and their metadata at your fingertips.

Create an account
Contact us
Illustration of a Loopy Donuts NFT with corresponding identifiable information laid out in chat like bubbles. 0x8aE6...F46b Loopy Donut ipfs://QmZ...n6h ERC721
Adobe logo
Twitter logo
Blackdove logo

Powerful developer tools

Making NFTs Searchable and Universally Accessible

Retrieving NFT metadata from the blockchain is incredibly time-consuming. Developers need to identify each NFT smart contract, review its metadata schema, and normalize it within a local database for fast retrieval. Our NFT API does the heavy lifting for you across Solana NFTs, ERC-721, ERC-1155, and outlier contracts, making the data you need searchable and accessible.

const ethers = require("ethers");
(async () => {
  const url = "https://{your-node-name}.quiknode.pro/{your-token}/";
  const provider = new ethers.providers.JsonRpcProvider(url);
  const heads = await provider.send(
    "qn_verifyNFTsOwner",
    [
      "0x31D583a494af597B53eB49B62FCaAb4BAF7f2e69",
      [
        "0x2106c00ac7da0a3430ae667879139e832307aeaa:9923",
      ]
    ]
  );
  console.log(heads);
})();

Supported Chains

Support for
major chains

The NFT API is an add-on that can be enabled for your endpoints on the following blockchains:

qn_verifyNFTsOwner

Verify an NFT owner

With NFTs constantly changing hands, ownership is an evolving landscape. It is critical that applications verify ownership regularly to prevent misrepresenting holders or granting gated access to the wrong user.

  • Check mark Ethereum
Documentation
Illustration of verify NFTs owner response of Loopy Donut NFT Token #2574 on Ethereum

wallet

0x8aE6...F46b

token

#2574
Verified

verified

Copy
const ethers = require("ethers");
(async () => {
  const url = "https://{your-node-name}.quiknode.pro/{your-token}/";
  const provider = new ethers.providers.JsonRpcProvider(url);
  const heads = await provider.send(
    "qn_verifyNFTsOwner",
    [
      "0x8aE6422631292c31aeeB2efe154d6326f703F46b",
      [
        "0x2106c00ac7da0a3430ae667879139e832307aeaa:2574",
      ]
    ]
  );
  console.log(heads);
})();

qn_fetchNFTs

Fetch and filter NFTs

As the number of NFT projects grows, it gets increasingly difficult to query consistent data across collections and chains. Our NFT API makes it easy to search and retrieve details about the collection an NFT belongs to, past transaction history, and many other valuable details.

  • Check mark Ethereum
  • Check mark Solana
Documentation
qn_fetchNFTs ( Loopy Donuts, mysticryuujin.eth )
Illustration of fetch NFTs method response of Loopy Donuts NFTs owned by mysticryuujin.eth on Ethereum
Copy
const ethers = require("ethers");
(async () => {
  const url = "https://{your-node-name}.quiknode.pro/{your-token}/";
  const provider = new ethers.providers.JsonRpcProvider(url);
  const heads = await provider.send("qn_fetchNFTs", [
    "0x8aE6422631292c31aeeB2efe154d6326f703F46b",
    [
      "0x2106c00ac7da0a3430ae667879139e832307aeaa",
    ],
  ]);
  console.log(heads);
})();

qn_fetchNFTsByCreator

Find NFTs by creator

Many creators have launched NFTs across multiple collections making it complex to retrieve all their work. Our NFT API allows developers to easily retrieve NFTs by a given creator’s address.

  • Check mark Solana
Documentation
qn_fetchNFTsByCreator ( 3xVDoL...95P9 )
Illustration of fetch NFTs by creator respons for Okay Bears NFTs on Solana
Copy
const axios = require("axios");
(() => {
  const url = "https://{your-node-name}.quiknode.pro/{your-token}/";
  const config = {
    headers: {
      "Content-Type": "application/json",
    },
  };
  const data = {
    jsonrpc: "2.0",
    id: 1,
    method: "qn_fetchNFTsByCreator",
    params: [{
      creator: "3xVDoLaecZwXXtN59o6T3Gfxwjcgf8Hc9RfoqBn995P9",
      page: 1,
      perPage: 3
    }]
  };
  axios
    .post(url, data, config)
    .then(function (response) {
      // handle success
      console.log(response.data);
    })
    .catch((err) => {
      // handle error
      console.log(err);
    });
})();