NFTs API

One NFT's transfers or sales

One NFT's latest 50 transfers (mint, transfer, burn) or marketplace sales with price, currency, marketplace, seller and buyer, newest first, and whether older ones exist.

GET/api/external/nft-analysis/nft-item-history/{chain}/{address}

What it returns

One NFT's history, newest first, up to 50 events: its transfers (mints and burns included) or its marketplace sales, with price, currency, marketplace, seller and buyer. hasMore says whether older events exist.

Chains

  • BNB Chain BNB
  • Ethereum ETH
  • Base BASE
  • Robinhood Chain RHC

Request

Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.

curl -H "x-dex-data-key: $DEXDATA_API_KEY" \
  "https://api.dexdata.io/api/external/nft-analysis/nft-item-history/BNB/<address>?tokenId=<tokenId>"
Parameters
ParameterDescription
tokenId

query · string · required

The token id, in decimal, e.g. "1". Leading zeros are ignored; at most 2^256 − 1.
type

query · string · optional

transfers (default) or sales. Sales are not served on RHC.transferssales
chain

path · string · required

ETH, BNB, BASE or RHC (transfers only on RHC). SOL, STABLE and ARC return 400: no wired source answers single-NFT history there. CELO, ARB, OP and SCROLL return 400 here.
address

path · string · required

The NFT collection's contract address.

Response fields

A JSON response. Every field is always present; null means the value could not be established, never zero.

Response fields of One NFT's transfers or sales
FieldTypeDescription
contractstringThe collection contract, lowercase.
tokenIdstringThe token id, in decimal.
typestringThe history asked for.
transfersobject[] | nullNewest first. null when type is sales. An empty list means no transfer is known — a token id the collection never minted answers the same.
transfers[].atstring | nullBlock time, ISO-8601 in UTC.
transfers[].blockNumberinteger | nullThe block number.
transfers[].txHashstring | nullThe transaction hash.
transfers[].logIndexinteger | nullThe event's position in the block.
transfers[].fromstring | nullThe sender, lowercase — the zero address on a mint.
transfers[].tostring | nullThe receiver, lowercase — the zero address on a burn.
transfers[].kindstring | nullmint from the zero address, burn to it, transfer otherwise.
transfers[].amountstring | nullUnits moved, as a decimal string: "1" for an ERC-721, the count moved for an ERC-1155. null for an ERC-1155 on RHC.
salesobject[] | nullNewest first. null when type is transfers. An empty list means no marketplace sale is known.
sales[].atstring | nullBlock time, ISO-8601 in UTC.
sales[].blockNumberinteger | nullThe block number.
sales[].txHashstring | nullThe transaction hash.
sales[].marketplacestring | nullThe marketplace, e.g. "opensea".
sales[].sellerstring | nullThe seller, lowercase.
sales[].buyerstring | nullThe buyer, lowercase.
sales[].pricestring | nullThe price paid, as an exact decimal string in priceCurrency — never a number, it can carry 18 decimals.
sales[].priceCurrencystring | nullThe token paid, by symbol (e.g. "ETH", "WETH") or, when it has none, by name. null when unknown.
sales[].priceCurrencyAddressstring | nullThe contract of the token paid, lowercase. null when paid in the chain's native coin.
sales[].itemsInSaleinteger | nullTokens sold in the same sale. Above 1, price is for all of them, not this one alone.
hasMorebooleanWhether older events exist beyond the 50 listed.
transferCountinteger | nullHow many transfers this NFT has had, all time. The length of transfers when hasMore is false; on RHC, counted in full when older transfers exist; otherwise null. Always null when type is sales.

Start building with DexData today

Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.

Get a free API key