NFTs API

Can this NFT collection's owner abuse its holders, and is it flagged malicious?

An NFT contract's owner privileges (minting, burning, self-destruct, transfers without approval), whether it is a proxy or flagged malicious, and copies carrying its name.

GET/api/external/nft-analysis/nft-security/{chain}/{address}

What it returns

An NFT collection contract's owner privileges — minting outside the public mint, burning holders' tokens, destroying the contract, moving tokens without approval — each as absent, renounced (the function exists but its owner is a burn address) or present with who holds it; whether the contract is a proxy (its code can be replaced), restricts which marketplaces holders may approve, publishes its source, and is flagged malicious; and other contracts carrying the same name, which is how copies of a collection are spotted. flaggedMalicious: false means not flagged, not proven safe. When complete is false the scan of the contract was not finished and some fields may still be null: ask again a minute later.

Chains

  • Ethereum ETH

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-security/ETH/<address>"
Parameters
ParameterDescription
chain

path · string · required

The chain the address lives on. ETH is served; SOL, BNB, BASE, STABLE, RHC and ARC return 400. CELO, ARB, OP and SCROLL return 400 here.
address

path · string · required

The address being asked about — it may or may not turn out to be a contract; the response says which.

Response fields

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

Response fields of Can this NFT collection's owner abuse its holders, and is it flagged malicious?
FieldTypeDescription
contractstringThe collection contract, lowercase.
completebooleanfalse when the scan of the contract was not finished and some fields may still be null.
namestring | nullThe collection's name.
symbolstring | nullThe collection's symbol.
standardstring | nullThe token standard.
creatorstring | nullThe address that deployed the contract, lowercase.
verifiedboolean | nullWhether the collection is verified.
openSourceboolean | nullWhether the contract's source code is published.
proxyboolean | nullWhether the contract is a proxy, so its code can be replaced.
restrictedApprovalboolean | nullWhether the contract limits which operators a holder may approve, e.g. to one marketplace.
flaggedMaliciousboolean | nullWhether the contract is flagged malicious. false is "not flagged", not "safe".
trustListedboolean | nullWhether the collection is on a list of trusted collections.
privilegedMintingobject | nullWhether the owner can mint tokens outside the public mint. null when the source could not read it.
privilegedMinting.statusstringabsent: the contract has no such function. renounced: it has one, but its owner is a burn address, so nobody can call it. present: it has one and someone can call it.
privilegedMinting.ownerstring | nullThe address holding the privilege, lowercase, when the source names one.
privilegedMinting.ownerTypestring | nullWhat holds it, e.g. contract, multi-address (several addresses), blackhole.
privilegedBurnobject | nullWhether the owner can burn holders' tokens. null when the source could not read it.
privilegedBurn.statusstringabsent: the contract has no such function. renounced: it has one, but its owner is a burn address, so nobody can call it. present: it has one and someone can call it.
privilegedBurn.ownerstring | nullThe address holding the privilege, lowercase, when the source names one.
privilegedBurn.ownerTypestring | nullWhat holds it, e.g. contract, multi-address (several addresses), blackhole.
selfDestructobject | nullWhether the owner can destroy the contract. null when the source could not read it.
selfDestruct.statusstringabsent: the contract has no such function. renounced: it has one, but its owner is a burn address, so nobody can call it. present: it has one and someone can call it.
selfDestruct.ownerstring | nullThe address holding the privilege, lowercase, when the source names one.
selfDestruct.ownerTypestring | nullWhat holds it, e.g. contract, multi-address (several addresses), blackhole.
transferWithoutApprovalobject | nullWhether the owner can move holders' tokens without their approval. null when the source could not read it.
transferWithoutApproval.statusstringabsent: the contract has no such function. renounced: it has one, but its owner is a burn address, so nobody can call it. present: it has one and someone can call it.
transferWithoutApproval.ownerstring | nullThe address holding the privilege, lowercase, when the source names one.
transferWithoutApproval.ownerTypestring | nullWhat holds it, e.g. contract, multi-address (several addresses), blackhole.
holdersnumber | nullDistinct holding addresses.
itemsnumber | nullTokens in the collection.
lookalikesobject[] | nullOther contracts with the same name — possible copies. null when the source did not say.
lookalikes[].contractstringThe other contract, lowercase.
lookalikes[].namestring | nullIts name.
lookalikes[].symbolstring | nullIts symbol.
lookalikes[].holdersnumber | nullIts distinct holders.

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