← Protocols
NFTScan
NFT / Marketplace·Ethereum · Solana · Bitcoin · BNB Chain · Polygon · Arbitrum · Optimism · Base · Avalanche · Aptos · Sui · TON

NFTScan

01Description

Multichain NFT data API and JS/TS SDK with assets, transactions, collections, and analytics across 20+ EVM chains and Solana, Bitcoin, Aptos, Sui, TON.

02Best for
  • 01multichain NFT lookups
  • 02wallet NFT portfolios
  • 03collection analytics
  • 04transfer history
  • 05floor price feeds
03Install
  • pnpm add nftscan-api
04Environment variables
VariableScopeDescription
NFTSCAN_API_KEYServerNFTScan developer API key from developer.nftscan.com (10k req/day free tier).
05Prompt snippet
Use NFTScan for cross-chain NFT data fetching. Initialize the JS SDK once with `new NftscanEvm({ apiKey: process.env.NFTSCAN_API_KEY!, chain: EvmChain.ETH })` then call `evm.asset.getAssetsByAccount(address, { erc_type: 'erc721' })` for wallet portfolios or `evm.collection.getCollection(contractAddress)` for floor data. For non-EVM chains import `NftscanSolana`, `NftscanBtc`, etc., each with their own clients. Always pass the API key server-side; cache responses for 30–60s since pricing endpoints are rate-limited.
06Gotchas
  • Each chain has its own SDK client and own base URL — sharing the same instance across chains silently sends every call to the first chain configured.
  • Royalty fields in collection responses reflect on-chain EIP-2981 only; marketplace-enforced royalties (Blur, OpenSea operator filter status) are not surfaced — query the marketplace API separately if you need real-world enforcement signal.
  • Rate limits are per-key per-second AND per-day; bursting wallet portfolio scans across many addresses will 429 long before the daily cap — batch with `getAllAssets` cursors instead of parallel requests.
  • Image URLs returned are NFTScan-mirrored proxies, not the original IPFS CIDs; if you need the canonical `tokenURI` for persistence, parse `metadata_json` and re-pin yourself.
  • Solana / Bitcoin / TON endpoints have different schemas than EVM — don't assume `contract_address` exists; Solana uses `mint_address`, Bitcoin Ordinals use `inscription_id`.
07Alternatives