SimpleHash Platform Overview

Currently live on 50+ chains and testnets

What's new: Frame & SimpleHash – Empowering NFT Developers & Creators

SimpleHash is excited to support Frame, a new L2 network designed for NFT use cases.

As part of the initial launch, any developer making use of Frame can take advantage of unlimited requests and Enterprise-level support, completely free of charge. To take advantage of this, just email [email protected] and we’ll get you set-up. Read the full annoucement


SimpleHash is an NFT data platform that provides the ability to access NFT metadata, media, collection details, sales, floor prices, listings and bids across multiple chains.

If you'd like to skip ahead and just try out some of the endpoints, try one out here by using the example curl widget on the page

Example queries and responses are shown for each endpoint listed in the menu, and can be tested with the request widget on the right of each endpoint page.

SimpleHash is built by a team with extensive experience in crypto and web3 - we've indexed >1B NFTs, and are backed by prominent players in the space, including OpenSea Ventures, Coinbase Ventures, and Y Combinator. Our goal is to provide the best developer NFT experience possible.

See what makes us different vs. the competition

Options for accessing the data

We offer three main methods for accessing NFT data, depending on your use case:

  • REST API: for general purpose access of NFT data - each endpoint is detailed on this API docs site
  • Webhook events: for subscribing to real-time NFT events - the set of available events and how to use the webhooks is detailed in this section
  • Bulk access / sync: we also offer a custom data export service for teams with high-performance work loads via flat-files or Kafka streaming - if you'd like to learn more about this option, please email [email protected]


If you need support integrating with the SimpleHash API, please contact [email protected]. For those on a paid plan, we also offer direct VIP Slack or Telegram channel support and technical assistance.


All endpoints require use of an API Key - these can be obtained by registering on the developer portal . The key should be passed within the request header in the following format: X-API-KEY: {API_KEY}

API Domain

The base URLs that can be used are : (primary) or (backup). For CDN links, either the .com or .xyz tlds can be used.

Formatting and Variables

  • chains: Specified as the name(s) of the desired chain. The available options are listed here: Supported Chains & Testnets

    • If you have feedback on the chains / networks you'd like to see supported, please contact [email protected].

  • contract_address: Address of the desired contract:

    • EVM chains: Formatted as a hex addresses, e.g., 0x52782699900df91b58ecd618e77847c5774dcd2e. Both the lowercase and checksum cases are supported.
    • Bitcoin: Formatted as a lowercase string corresponding to the inscription ID, e.g. 6fb976ab49dcec017f1e201e84395983204ae1a7c2abf7ced0a85d692e442799i0
    • Solana: Formatted as a Base58-encoded string uniquely representing the NFT itself, e.g., 2DfTukhzftoX9oF8xaUQ8kS85oPEVEHsmpa4DQiinQGD. These addresses on Solana are often elsewhere referred to as a Mint Address or Token Address. These are case sensitive.
    • Flow: Formatted as a hybrid string starting with with the capital A, followed by a period and the hexidecimal portion of the address, followed by a period and the name of the contract, e.g., A.0b2a3299cc857e29.TopShot. These are case sensitive.

  • token_id: Numeric ID of the specific token on a given contract:

    • EVM chains: A numeric value, e.g., 1002
    • Bitcoin: Does not apply, the contract_address (inscription ID) uniquely identifies the NFT
    • Solana: Does not apply, the contract_address (mint address) uniquely identifies the NFT
    • Flow: A numeric value, e.g., 1002

  • wallet_addresses: Address of the desired owner(s):

    • EVM chains: Formatted as hex addresses, e.g., 0xb47902159c61b06ec03770a2cab692901d9a3759. Both the lowercase and checksum cases are supported.
    • Bitcoin: Formatted as Base58-strings, e.g. bc1qv8zhcjzpjw4m4tdyc5zn3dmax0z6rr6l78fevg, 3MggiruZDgJhg7piJEZPBHPfhbeQH1unNF. These are case sensitive.
    • Solana: Formatted as Base58-strings, e.g., Dg3C8UeEnCdZoFqeFCwYCfB96o5Erb6D63rDQJTmuTkW. These are case sensitive.
    • Flow: Formatted as lowercase hex addresses, e.g., 0x10285e5afddd80c3

Handling Media URLs

SimpleHash caches and saves the media files of all NFTs on the indexed chains. If an NFT has an image / media file cached on the SimpleHash CDN, it will appear in the following format, with one or all of the fields image_url, video_url, audio_url and model_url: <>.

In rare cases, only the original media links are available. Original media links (e.g., in the response on the image_original_url field within extra_metadata are usually returned as either base64 format (e.g., data:image/svg+xml;base64,PHN2Z...), in which case they can be rendered directly, or as an external link (e.g., ipfs://QmbAhtqQqiSQqwCwQgrRB6urGc3umTskiuVpgX7FvHhutU/8667.png).

In the case of an IPFS link, you have the option of appending an IPFS gateway to serve the image (such as, which will result in a link similar to this: <>

Media Previews

For most NFT responses, SimpleHash provides preview versions of the relevant media file within the previews field. These are a set of URLs linking 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). When generating previews of SVGs, images are converted to PNG format for improved compatibility.

  • Previews will also include a version sized for Open Graph, found on the field image_opengraph_url
  • The sizing of the preview image can be customized further by alterting the numeric value of the suffix =s{number} on the URL (for example: <>)
  • For additional media transformation options, check out this Stack Overflow post

Pagination & Cursors

Endpoints that return multiple items are paginated using a cursor system. To pull the next set of results, query the next field returned in the current results, e.g., <>