Real-time NFT and marketplace data
SimpleHash provides real-time access to NFT data and market prices across all of the main chains and ecosystems.
Using either our REST API, Webhooks or Kafka Streaming Service, it's easy to get transfers, current balances, metadata, media and market prices for any NFT. This makes it easy to build out user-facing crypto applications that rely on NFT data, including wallets, portfolio viewers, trading platforms, web3 social networks, tax software, and more.
What kinds of NFTs are supported?
SimpleHash supports the main NFT standards across the most popular developer ecosystems. Our indexer is generalized, meaning we ingest all NFTs and collections automatically, without them needing to be specifically whitelisted or added.
- EVM chains: All ERC721 and 1155 tokens on the main EVM compatible chains, including Ethereum itself, and the main L2 networks, plus some legacy contracts (including cryptopunks and cryptokitties)
- Solana: All Metaplex standard NFT tokens, including compressed NFTs
- Bitcoin: Bitcoin Ordinals inscriptions
- Flow: Most legacy contracts (e.g., NBA TopShot) and all tokens on Flow EVM (Crescendo)
- Tezos: Tezos FA2 NFTs
We're routinely adding new chains - visit this page to see the full list: Supported Chains & Testnets
What kinds of NFT data are available?
SimpleHash provides the core primitives of NFT data, to make it easy to build any kind of functionality for different crypto use cases.
- Balances: Current NFT balances for all tokens, and all wallets, can be queried using the API endpoints - balance changes are reflected within a few seconds
- Transfers: All transfers for all NFT contracts are provided, including core details on the transfer - historical retention of transfers is all the way to the beginning of the respective token standards on each chain
- Sales and Mints: We include sale details and mint details within the response bodies of both the Transfer endpoints and the NFT endpoints. For supported secondary market sale details, view the full list further down this page.
- Secondary Market Floor Prices: Both real-time and historical floor prices for all collections on supported marketplaces are available. Prices are updated within a few seconds. See the full list of supported marketplaces here.
- Listings and Bids: We provide real-time listing and bid data for selected chains across the main marketplaces.
- Collection info: We assign unique identifiers to all collections across all chains, to support multiple ecosystems, and cases where collections are not 1:1 to contracts. We pull in on and off chain data on collection names, descriptions, media, social links, while also providing details on supply, and spam score filtering. To see the full set of fields available, view the collection types further down this page.
What is the difference between an NFT contract and a collection?
"Contract" and "Collection" are terms used to describe two related, but different kinds of groupings of NFTs. Their specific implementations differ across blockchain ecosystems.
-
Contracts:
- On EVM-based chains, an NFT contract represents a smart contract (usually based on the ERC-721 or 1155 standards) that issued NFTs. Each contract has a unique on-chain address (e.g.,
0x23581767a106ae21c074b2276d25e5c3e136a68b
in the case of Moonbirds). - NFTs adhering to the 721 or 1155 standards can always be identified by the combination of their contract address and individual token ID. (Token IDs can be any number, but are often 1-9999 in the case of some popular PFP projects).
- Because they are represented on-chain, contracts remain the same no matter what marketplace or protocol is interacting with the NFT.
- Solana does not have the same notion as an NFT contract - each NFT is identified by a unique Base58 token address, and NFTs are more commonly grouped by collection
- Bitcoin ordinals also does not use smart contracts. Each NFT is identified by a unique inscription ID.
- On EVM-based chains, an NFT contract represents a smart contract (usually based on the ERC-721 or 1155 standards) that issued NFTs. Each contract has a unique on-chain address (e.g.,
-
Collections:
- On EVM-based chains, it is common to refer to NFT collections, some of which are well known or have a high media profile. Where collections differ from contracts is that they are usually represented off-chain, most commonly being tied to a specific NFT marketplace. Taking Moonbirds again as the example, the homepage on OpenSea for the collection can be found here: https://opensea.io/collection/proof-moonbirds, with
proof-moonbirds
being a unique identifier. - Collections may be represented by different identifiers across different marketplaces and protocols.
- Contracts and collections are often 1:1 (e.g., the Moonbirds collection on OpenSea only contains NFTs from the
0x23581767a106ae21c074b2276d25e5c3e136a68b
contract), but not always. A prominent example is the OpenSea storefront contract - one of the contracts used to mint NFTs on Ethereum via OpenSea's platform. The address of this contract is0x495f947276749ce646f68ac8c248420045cb7b5e
- and it has millions of individual NFT token IDs. - This storefront contract also contains many individual collections - and the opposite situation can also be possible (a collection that contains multiple contracts)
- On Solana, collections may be represented on or off-chain. Most Solana NFTs adhere to the Metaplex standard, which has a common way of verifying on-chain that a set of NFTs are part of a collection.
- Because collections are treated differently not only across marketplaces, but also across chains, SimpleHash generates a unique identifier for each collection. This identifier can be found on either an NFT response body, or by querying one of the Collections by IDs (accepts
metaplex_mint
addresses for Solana), Contracts by Collection, or Collections by Marketplace endpoints
- On EVM-based chains, it is common to refer to NFT collections, some of which are well known or have a high media profile. Where collections differ from contracts is that they are usually represented off-chain, most commonly being tied to a specific NFT marketplace. Taking Moonbirds again as the example, the homepage on OpenSea for the collection can be found here: https://opensea.io/collection/proof-moonbirds, with
The SimpleHash API makes it easy to identify the contract and collection data for a given NFT, and also to query lists of NFTs based on these concepts.
- EVM based NFTs:
- The
contract_address
is a field on the main NFT body - The
collection
data can be found on the main NFT body, including the uniquecollection_id
field
- The
- Solana based NFTs:
- The
contract_address
field represents the unique token mint address for a specific NFT - The
collection
data can be found on the main NFT body, including the uniquecollection_id
field - NFTs on a certain metaplex collection can be directly queried by passing the metaplex_mint as the collection identifer on the NFTs by Collection / Mint endpoint
- This collection field also contains both a
metaplex_mint
field identifying collections verified on chain, and ametaplex_first_verified_creator
, which is another way of identifying NFTs by collection, based on the identity of the initial NFT creator, for collections that have not been verified on-chain
- The
- Bitcoin based NFTs:
- The
contract_address
field represents the Inscription ID of the ordinal.
- The
NFT response models and types
NFT Model
The SimpleHash API returns NFT data in a standard format. The following are the fields included in the response (or as a list of NFT objects).
Field | Description | Type(s) |
---|---|---|
nft_id | Unique identifier for an NFT (chain.contract_address.token_id for EVM chains & Flow, chain.mint_address for Solana, chain.inscription_id for Bitcoin) | string |
chain | Name of the blockchain (e.g., ethereum ) | string |
contract_address | Address of the NFT's contract (hex format for EVM compatible chains). For Solana, this is a Base58-encoded string uniquely representing the NFT itself. For Bitcoin, this is the inscription ID. | string |
token_id | Token ID (usually numeric) of the NFT on its contract. Will be null for Solana and Bitcoin NFTs, which are identified by contract_address | string / null |
name | Name of the NFT derived from its metadata | string / null |
description | Description of the NFT derived from its metadata | string / null |
previews | Set of URLs to resized preview images of the media, including an opengraph image, and blurhash, where available. Previews are sized to fit the maximum dimension in pixels as follows: (small: 250px, medium: 512px, large: 1000px). These may be derived from images, videos, or 3D models. | {image_small_url :string / null ,image_medium_url :string / null ,image_large_url :string / null ,image_opengraph_url :string / null ,blurhash : string / null ,predominant_color : string / null ,} |
image_url | URL to cached image file on the SimpleHash CDN if available | string / null |
image_properties | Image properties if available | {width :int / null ,height : int / null ,size : int / null ,mime_type : str / null ,exif_orientation : int / null ,} / null |
video_url | URL to cached video file on the SimpleHash CDN if available | string / null |
video_properties | Video properties if available | {width : int / null ,height : int / null ,duration : float / null ,video_coding : str / null ,audio_coding : str / null ,size : int / null ,mime_type : str / null ,} / null |
audio_url | URL to cached audio file on the SimpleHash CDN if available | string / null |
audio_properties | Audio properties if available | {duration : float / null ,audio_coding : str / null ,size : int / null ,mime_type : str / null ,} / null |
model_url | URL to cached 3D model file on the SimpleHash CDN if available | string / null |
model_properties | Model properties if available | {size : int / null ,mime_type : str / null ,} / null |
other_url | URL to cached file on the SimpleHash CDN if available for other media types such as PDFs | string / null |
other_properties | File properties if available | {size : int / null ,mime_type : str / null ,} / null |
background_color | Background color of the NFT derived from its metadata | string / null |
external_url | External URL derived from the NFT's metadata, often with more information (such as about the project), where available | string / null |
created_date | NFT minting datetime if known in timestamp format (e.g., 2021-07-03T23:45:00 ) | string / null |
status | NFT status, one of lazy-minted , minted , or burned . Items that are lazy-minted will switch to minted status upon the first on-chain transfer or sale. | string |
token_count | Known quantity of this NFT | int / null |
owner_count | Known number of owners of this NFT | int / null |
owners | Array of 0-50 top owners of this NFT (sorted by quantity desc). Dates are supplied in the yyyy-MM-dd'T'HH:mm:ss format | [{owner_address :string ,quantity : int ,quantity_string : string ,first_acquired_date : string / null ,last_acquired_date : string }] |
last_sale | Detail on the most recent sale involving this NFT | last_sale / null |
primary_sale | Detail on the original sale (during the mint) for this NFT | primary_sale / null |
first_created | First creation NFT details | {minted_to : string / null ,quantity : int / null ,quantity_string : string / null ,timestamp : string / null ,block_number : int / null ,transaction : string / null ,transaction_initiator : string / null } / null |
contract | Contract type info for this NFT (type is usually the standard for the contract, such as ERC721 ) | {type :string ,name :string / null ,symbol :string / null deployed_by : string / null deployed_via_contract : string / null ,owned_by : string / null ,has_multiple_collections : bool } |
collection | The associated collection information for this NFT | Collection model |
rarity | The associated rarity information for this NFT | Rarity model |
royalty | Array of 0 or more royalty details, by source. Different marketplaces allow for different royalty amounts, so we show a list of the available information. When there are multiple sources, we list them from highest to lowest total_creator_fee_basis_points .Current sources are: opensea , metaplex , erc2981 The list of recipients can have 0 or more wallets, as applicable. Amounts are shown in both basis_points (adding up to total_creator_fee_basis_points ) and percentage , which is the share of this wallet's fees compared to other recipients.Note that for the recipients list, OpenSea natively uses basis_points while Metaplex uses percentage , so if you need very precise amounts (i.e. no possibility of rounding), use basis_points for OpenSea & ERC2981 and percentage for Metaplex. | [{source : string ,total_creator_fee_basis_points : int ,recipients : [{address : string ,percentage : float ,basis_points : int }] }] |
extra_metadata | JSON field containing the additional custom metadata fields for the NFT added by the creator. Includes the image_original_url and animation_original_url links to the original media source (where available), and passes through other fields not standardized above (such as attributes or traits) | {attributes : [{trait_type :string / null ,value :string ,display_type :string / null }], ... ,image_original_url :string / null ,animation_original_url :string / null ,metadata_original_url :string / null } |
Collection Model
The SimpleHash API returns information on the collection an NFT is associated with. These are often specific to certain NFT marketplaces. The following are the fields included for the collection model (appearing inline as a field on the NFT model).
For collection model found on NFT responses and core Collection endpoints:
Field | Description | Type(s) |
---|---|---|
collection_id | Unique identifier for a specific collection. This is distinct from contract address, since a contract may contain multiple collections | string / null |
name | Name of the collection | string / null |
description | Description of the collection | string / null |
image_url | URL link to the collection logo / main image on the SimpleHash CDN, where available | string / null |
banner_image_url | URL link to the collection banner image on the SimpleHash CDN, where available | string / null |
category | Collection category if available, currently one of: art , domain-names , gaming , memberships , music , pfps , photography , sports-collectibles , virtual-worlds This list may grow over time. | string / null |
is_nsfw | Collection flagged as NSFW | boolean / null |
external_url | URL link to the external website or resource associated with the collection | string / null |
twitter_username | Twitter handle of the account associated with the collection, where available | string / null |
discord_url | Discord server associated with the collection, where available | string / null |
instagram_url | Instagram URL for the collection if available | string / null |
medium_username | Medium.com username for the collection if available | string / null |
telegram_url | Telegram URL for the collection if available | string / null |
marketplace_pages | Array of 0 or more objects referencing the the collection's page(s) on a given marketplace. marketplace_collection_id is typically a case-sensitive slug (e.g., azuki for OpenSea) and sometimes an address (on marketplaces such as Quixotic and Stratos) | [{marketplace_id : string , marketplace_name :string ,marketplace_collection_id :string ,nft_url :string / null ,collection_url :string ,verified :boolean / null }] |
metaplex_mint | Unique metaplex mint ID, populated only for Solana NFTs where there is a verified metaplex collection | string / null |
metaplex_candy_machine | When a verified metaplex collection is not available, the candy machine address (if applicable) may be used to group the NFTs | string / null |
metaplex_first_verified_creator | When other grouping methods are not available, this identifier may be used to group NFTs by the first verified creator address | string / null |
spam_score | Spam rating of the NFT collection (for Enterprise plans), 0-100 range, (100 being most likely spam) | int / null |
floor_prices | Array of 0 or more floor prices for the collection, one for each marketplace | [Floor price model |
top_bids | Array of 0 or more top bids for the collection, one for each marketplace | [Top bid model] |
distinct_owner_count | Distinct number of owners for NFTs in this collection. This and the following numbers may briefly be null for new collections | int / null |
distinct_nft_count | Distinct number of unburned NFT IDs | int / null |
total_quantity | Total copies of unburned NFTs in this collection. For semi-fungibles, there may be more than one copy per NFT, so this value could exceed distinct_nft_count | int / null |
chains | Array of 1 or more chains in the collection. This is usually just 1, but OpenSea allows for multi-chain collections like this one spanning Polygon and BSC. | [chain :string ] |
top_contracts | On chains with NFT smart contracts (EVM & Flow), array of 1 or more contracts associated with this collection, capped at a maximum of 20. This will be an empty array for Bitcoin and Solana. | [contract_id :string ] |
collection_royalties | Array of 0 or more royalty details, at the collection level, by source. Different marketplaces allow for different royalty amounts, so we show a list of the available information. When there are multiple sources, we list them from highest to lowest total_creator_fee_basis_points .Current sources are: opensea The list of recipients can have 0 or more wallets, as applicable. Amounts are shown in both basis_points (adding up to total_creator_fee_basis_points ) and percentage , which is the share of this wallet's fees compared to other recipients. | [{source : string ,total_creator_fee_basis_points : int ,recipients : [{address : string ,percentage : float ,basis_points : int }] }] |
Transfer Model
The SimpleHash API returns transfer data in a standard format. The following are the fields included in the response (or as a list of transfer objects). Transfers typically reflect the exchange of an NFT from one address to another.
Field | Description | Type(s) |
---|---|---|
nft_id | Unique identifier for an NFT (chain.contract_address.token_id for EVM chains & Flow, chain.mint_address for Solana, chain.inscription_id for Bitcoin) | string |
chain | Name of the blockchain (e.g., ethereum) | string |
contract_address | Contract address of the NFT involved. Hex format for EVM-compatible chains. This is the mint address for Solana and Inscription ID for Bitcoin. | string |
token_id | Token ID (usually numeric) of the NFT on its contract. This will be null for Solana and Bitcoin NFTs | string / null |
collection_id | The unique identifier of the collection (obtainable from an NFT response, or from the Collection endpoints) | string / null |
event_type | The type of transfer, one of: mint , sale , transfer , burn | string |
from_address | Originating address for the transfer. Hex format for EVM-compatible chains. If null , this represents a minting event | string / null |
to_address | Destination address for the transfer. Hex format for EVM-compatible chains. If null , this represents a burn event | string / null |
quantity | Quantity of this NFT being transferred (can be greater than 1 for ERC-1155s) | int |
quantity_string | Same result as quantity as a string | string |
timestamp | Block time of the event in timestamp format (e.g., 2021-07-03T23:45:00Z) | string |
block_number | Numeric figure representing the block number within which the transfer occurred | int |
block_hash | Digital fingerprint / hash of the specific block. This will be null for Solana NFTs | string / null |
transaction | Unique identifier of the relevant transaction | string |
transaction_index | Position of the transaction within the block. The may be null for earlier records, but log_index can be used instead of ordering within a block. | int / null |
transaction_initiator | Wallet address that submitted the blockchain transaction, regardless of whether they are in the to_address or from_address field. This will be null for Solana, Flow, and Bitcoin NFTs. | string / null |
log_index | Index of the log in the transaction event logs | int |
batch_transfer_index | Index of the transfer in the log (Usually there is one transfer per log, but ERC-1155 allows for batch transfers in one log) | int |
sale_details | Details on the sale event that occurred in this transfer, if applicable | sale_details / null |
is_removed | [For transfer webhooks only] - Indicates whether a transfer is removed due to a reorg | bool/null |
Sale & Mints Model
The SimpleHash API includes detail on the sale (and primary sales / mints) of NFTs inline within the response bodies of both the NFT and transfer models. Currently NFT sale information will be returned for sales that occurred on the marketplaces and chains shown here:
- Ethereum: OpenSea, Blur, Magic Eden, LooksRare, X2Y2, CryptoPunks
- Solana: Magic Eden, Tensor
- Bitcoin: Magic Eden
- Polygon: OpenSea (Seaport contract), Magic Eden
- Arbitrum: OpenSea, Stratos, Trove
- Arbitrum Nova: OpenSea
- Avalanche: OpenSea
- Base: OpenSea, Magic Eden
- Blast: OpenSea, Blur
- BSC: OpenSea
- Optimism: OpenSea, Quix
- Zora: OpenSea
- Ethereum Goerli: OpenSea
- Ethereum Sepolia: OpenSea
- Arbitrum Goerli: OpenSea
- Arbitrum Sepolia: OpenSea
- Avalanche Fuji: OpenSea
- Base Goerli: OpenSea
- Base Sepolia: OpenSea
- Blast Sepolia: OpenSea
- BSC Testnet: OpenSea
- Optimism Goerli: OpenSea
- Optimism Sepolia: OpenSea
- Polygon Mumbai: OpenSea
- Zora Sepolia: OpenSea
- Zora Testnet: OpenSea
We now also support primary sales on all EVM chains & testnets. This is the amount paid during the mint transaction.
Coverage of more chains and marketplaces will be added in the near future.
On NFT responses, sale information is included in the field named last_sale
, whereas in transfer responses, it is included in the field named sale_details
last_sale
and primary_sale
models (included inline with the NFT
model):
Field | Description | Type(s) |
---|---|---|
from_address | Address selling the NFT | string / null |
to_address | Address acquiring the NFT | string / null |
quantity | The quantity of the NFT being sold. For semi-fungibles (like ERC-1155), this quantity may be greater than 1 | int |
quantity_string | Same results as quantity as a string | string |
timestamp | Datetime of the NFT sale | string |
transaction | Unique identifier of the NFT sale transaction | string |
marketplace_id | ID of the marketplace the sale occurred on (e.g. opensea ) | string |
marketplace_name | Name of the marketplace the sale occurred on (e.g., OpenSea ) | string |
is_bundle_sale | Whether the sale was a bundle sale or not (a bundle sale is where several items are put up for sale on a marketplace at a single price) | boolean |
payment_token | Detail on the token used to make the NFT sale. Will be null if is_bundle_sale is true | payment_token / null |
unit_price | Individual unit price of an item within the NFT sale. Will be null if is_bundle_sale is true | int / null |
total_price | Total price of the NFT sale. Will be null if is_bundle_sale is true | int / null |
unit_price_usd_cents | Individual price of an item within the NFT sale, in USD cents, as calculated at the time of the transaction. Will be null if is_bundle_sale is true or the currency conversion rate was unknown | int / null |
sale_details
model (included inline with the transfer
model):
Field | Description | Type(s) |
---|---|---|
marketplace_id | ID of the marketplace the sale occurred on (e.g. opensea ) | string / null |
marketplace_name | Name of the marketplace the sale occured on (e.g., OpenSea ) | string |
is_bundle_sale | Whether the sale was a bundle sale or not (a bundle sale is where several items are put up for sale on a marketplace at a single price) | boolean |
payment_token | Detail on the token used to make the NFT sale. Will be null if is_bundle_sale is true | payment_token / null |
unit_price | Individual unit price of an item within the NFT sale. Will be null if is_bundle_sale is true | int / null |
total_price | Total price of the NFT sale. Will be null if is_bundle_sale is true | int / null |
unit_price_usd_cents | Individual price of an item within the NFT sale, in USD cents, as calculated at the time of the transaction. Will be null if is_bundle_sale is true or the currency conversion rate was unknown | int / null |
payment_token
model:
Field | Description | Type(s) |
---|---|---|
payment_token_id | Unique identifier of the token type used to make the sale. Currently for ethereum ecosystem sales, this may be ethereum.native for the native ETH token, or ethereum.{contract_address} for ERC-20 tokens | string |
name | Name of the token, e.g., Ether derived from the contract or otherwise | string / null |
symbol | Symbol of the token derived from the contract or otherwise, e.g., ETH | string / null |
address | Contract address of the ERC-20 token used to make the sale (null in the case of the native ETH token) | string / null |
decimals | Base number of decimals of the token value involved in the NFT sale (e.g., 18 in the case of the native ETH token) | int |
Listing Models
The SimpleHash API includes details of active and historical listings on NFT marketplaces.
- UniSat: Live (Bitcoin Ordinals)
- OKX: Live (Bitcoin Ordinals)
- Blur: Live
- OpenSea: Live (all chains)
- MagicEden Live (Bitcoin Ordinals, Solana, Polygon, Ethereum & Base)
- Tensor: Live
- CryptoPunks: Live
- LooksRare: Live
- X2Y2: Live
Coverage of more marketplaces will be added in the near future.
listing
model:
Field | Description | Type(s) |
---|---|---|
id | Unique identifier of the listing | string |
permalink | Link to the marketplace listing | string |
bundle_item_number | If the listing is part of a bundle, the NFT's position in the bundle | int / null |
listing_timestamp | Datetime of the listing | string |
expiration_timestamp | Expiration datetime of the listing | string / null |
seller_address | Owner wallet address | string |
auction_type | Auction type, if applicable. Possible values are: dutch (AKA decreasing price auction) | string / null |
quantity | Original listing quantity | int |
quantity_remaining | Remaining listing quantity | int |
price | Total price of the listing | int |
marketplace_id | Unique identifier of the NFT marketplace associated with the listing | string |
order_hash | Unique marketplace-assigned identifier for the listing | string / null |
collection_id | Unique identifier for a specific collection | string / null |
nft_id | Unique identifier for an NFT (chain.contract_address.token_id for EVM chains & Flow, chain.mint_address for Solana) | string |
payment_token | Detail on the token used for the listing | payment_token / null |
listing_event
model:
Field | Description | Type(s) |
---|---|---|
id | Unique identifier of the listing event | string |
event_type | Generic type of event, one of: listing_added , listing_modified , listing_removed | string |
event_reason | More detailed reason (if available); one of: listing_cancelled , listing_expired , ownership_changed , quantity_changed , price_changed This list may expand as we add marketplaces that have their own idiosyncrasies. | string / null |
event_timestamp | Datetime of the event as processed by SimpleHash. For additional on-chain times, refer to listing_timestamp and expiration_timestamp on the listing object | string |
listing_id | Unique identifier of the listing from the listing model | string |
... | (Additional fields from the listing model) |
payment_token
model:
Field | Description | Type(s) |
---|---|---|
payment_token_id | Unique identifier of the token type relevant to the collection. Currently for ethereum ecosystem sales, this may be ethereum.native for the native ETH token, or ethereum.{contract_address} for ERC-20 tokens | string |
name | Name of the token, e.g., Ether derived from the contract or otherwise | string / null |
symbol | Symbol of the token derived from the contract or otherwise, e.g., ETH | string / null |
address | Contract address of the ERC-20 token associated with the collection (null in the case of the native ETH token) | string / null |
decimals | Base number of decimals of the token value associated with the collection (e.g., 18 in the case of the native ETH token) | int |
Floor Price Models
A floor price is the lowest currently listed price of an NFT for a given NFT (often specific to an NFT marketplace).
The SimpleHash API includes detail on the floor price of NFT collections on the following chains with standardized currencies across collections:
- Ethereum: ETH
- Solana: SOL
- Bitcoin: BTC
- Polygon: wETH
- Arbitrum: ETH
- Optimism: ETH
- Avalanche: AVAX
- BSC: BNB
- Base: ETH
- Zora: ETH
- Blast: ETH
- Sei: SEI
Floor prices from the following marketplaces are included: CryptoPunks, Tensor, Blur, OpenSea, X2Y2, LooksRare, Magic Eden, OKX, UniSat, and MRKT
Please note that marketplaces such as LooksRare and Blur may display the "global floor price", which is the floor price across several marketplaces. You may need to mouse-over the value, or click in to the collection, in order to see the marketplace-specific floor price.
Coverage of more chains and marketplaces will be added in the near future.
The floor prices array can be found on the field named floor_prices
on the collection model on the "NFT by..." endpoints, and directly on the the Collections by Wallet endpoint.
floor_price
model:
Field | Description | Type(s) |
---|---|---|
marketplace_id | Unique identifier of the NFT marketplace associated with the floor price | string |
value | The value of the floor price in the relevant currency. null if there is no current floor price (no active listings) | int /null |
payment_token | Detail on the relevant currency | payment_token |
value_usd_cents | The value of the floor price in USD cents | int / null |
payment_token
model:
Field | Description | Type(s) |
---|---|---|
payment_token_id | Unique identifier of the token type relevant to the collection. Currently for ethereum ecosystem sales, this may be ethereum.native for the native ETH token, or ethereum.{contract_address} for ERC-20 tokens | string |
name | Name of the token, e.g., Ether derived from the contract or otherwise | string / null |
symbol | Symbol of the token derived from the contract or otherwise, e.g., ETH | string / null |
address | Contract address of the ERC-20 token associated with the collection (null in the case of the native ETH token) | string / null |
decimals | Base number of decimals of the token value associated with the collection (e.g., 18 in the case of the native ETH token) | int |
Bid models
Currently, SimpleHash provides access to bids and top bids. The top bid is the highest current offer, or bid, for any NFT within a collection.
The SimpleHash API includes details of active bids on the following NFT marketplaces.
- OpenSea
- Magic Eden
Bid
model
Field | Description | Type(s) |
---|---|---|
id | Unique identifier of the bid | string |
quantity | Bid quantity | int /null |
price | Bid price | int |
timestamp | Datetime of the bid | string |
bidder_address | Bidder address | string |
marketplace_id | Unique identifier of the NFT marketplace associated with the bid | string |
collection_id | Unique identifier for a specific collection | string / null |
nft_id | Unique identifier for an NFT (chain.contract_address.token_id for EVM chains & Flow, chain.mint_address for Solana) | string |
payment_token | Detail on the token used for the bid | payment_token / null |
expiration_timestamp | Expiration timestamp of the bid | string / null |
The SimpleHash API includes top (collection-level) bids from the following marketplaces:
- Blur
- OpenSea
Coverage of additional marketplaces and bid types will be added in the near future.
The top bids array can be found on the field named top_bids
on the collection model on the "NFT by..." endpoints, and directly on the the Collections by Wallet endpoint.
top_bids
model:
Field | Description | Type(s) |
---|---|---|
marketplace_id | Unique identifier of the NFT marketplace associated with the top bid | string |
value | The value of the top bid in the relevant currency | int /null |
payment_token | Detail on the relevant currency | payment_token |
value_usd_cents | The value of the top bid in USD cents | int / null |
payment_token
model:
Field | Description | Type(s) |
---|---|---|
payment_token_id | Unique identifier of the token type relevant to the collection. Currently for ethereum ecosystem sales, this may be ethereum.native for the native ETH token, or ethereum.{contract_address} for ERC-20 tokens | string |
name | Name of the token, e.g., Ether derived from the contract or otherwise | string / null |
symbol | Symbol of the token derived from the contract or otherwise, e.g., ETH | string / null |
address | Contract address of the ERC-20 token associated with the collection (null in the case of the native ETH token) | string / null |
decimals | Base number of decimals of the token value associated with the collection (e.g., 18 in the case of the native ETH token) | int |
Rarity Model
The SimpleHash API leverages the OpenRarity standard to calculate consistent, mathematically-grounded rarity score for NFTs.
Currently, ERC-721 and Metaplex non-fungible token standards are supported. Support for ERC-1155 is expected soon.
rarity
model:
Field | Description | Type(s) |
---|---|---|
rank | Rarity rank, relative to the scores of all other NFTs in the collection | int / null |
score | Raw rarity score | float / null |
unique_attributes | The number of unique attributes, or traits, if any, that this NFT possesses | int / null |
Spam Scores
Overview
- Spam NFTs have become a significant issue as NFT use and adoption has risen
- This leads to poor UX, especially in wallet and dapp use cases, with end users often being confused or annoyed as to why unfamiliar, low quality NFTs appear
- An even greater concern is when these NFTs, which are usually airdropped en-masse, contain malicious links to dangerous external sites or resources
- Spam NFTs have been proliferating quicker on popular networks with lower transaction fees or costs, most notably Polygon and Solana
Spam scores are currently available to customers on Enterprise plans, on the main EVM chains, Solana and Bitcoin Ordinals.
Goals
The SimpleHash spam scoring implementation has two main goals:
- Make it easier to identify low-quality NFTs from undesirable airdrops (”spam NFTs”)
- Make it easier to identify NFTs that have dangerous or malicious external links (”scam NFTs”)
There is a blurred boundary between these two types of NFTs, and those targeted in the current implementation may fit into both categories.
SimpleHash Spam Scoring - Overview of Approach
- In an effort to provide end users with more tools to combat spam NFTs, the SimpleHash NFT provides a spam score for almost all NFT collections
- This model is generated through a combination of analytics and heuristics, plus an LLM that we continually finetune for this purpose - read more about our approach here: https://simplehash.com/blog/how-simplehash-fights-nft-spam-using-ai-and-crowdsourcing
- The model also utilizes OCR to assess the media of the image
- External links and description fields are also checked for malicious URLs and drainers
- The score is a numeric value from 0 to 100, with 0 being deemed not spam, and 100 being deemed likely spam
- The field
spam_score
is provided inline with NFT response bodies on the API, within thecollection
field (example pictured):
- Currently, the spam scores are generated at the NFT collection level, meaning all NFTs on a given collection with have the same score
- If the response is
null
, the collection does not have sufficient information to be scored, or has not yet been assessed