HoodMarket

Developer API

Get an API key

Send this as the x-api-key header. It will not be shown again.

Authentication

x-api-key: hmd_live_...

Base URL: https://developer-api.hoodmarket.io. Errors are always { "error": "..." } with a non-2xx status.

GET/api/v1/collections/{address}

curl https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41 \
  -H "x-api-key: YOUR_KEY"
const res = await fetch(
  "https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41",
  { headers: { "x-api-key": "YOUR_KEY" } },
);
const data = await res.json();
import requests

res = requests.get(
    "https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41",
    headers={"x-api-key": "YOUR_KEY"},
)
data = res.json()
const axios = require("axios");

const { data } = await axios.get(
  "https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41",
  { headers: { "x-api-key": "YOUR_KEY" } },
);
req, _ := http.NewRequest("GET",
  "https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41",
  nil)
req.Header.Set("x-api-key", "YOUR_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
$ch = curl_init("https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
require "net/http"
require "json"

uri = URI("https://developer-api.hoodmarket.io/api/v1/collections/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41")
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "YOUR_KEY"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)
{
  "contractAddress": "0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41",
  "source": "native",
  "name": "Example Collection",
  "avatarUrl": "https://.../image.png",
  "bannerUrl": "https://.../banner.png",
  "hoodmarketUrl": "https://hoodmarket.io/collection/example",
  "openseaUrl": "https://opensea.io/collection/example"
}
Field Description
source native (launched on HoodMarket), spotlight (featured, cached), or opensea (resolved live from OpenSea)
avatarUrl / bannerUrl Direct URL to the image.
hoodmarketUrl Link to the collection's page on hoodmarket.io, if it has one.

404 means we have no record of this contract. Not every collection is indexed yet.

GET/api/v1/nfts/{contract}/{tokenId}

curl https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1 \
  -H "x-api-key: YOUR_KEY"
const res = await fetch(
  "https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1",
  { headers: { "x-api-key": "YOUR_KEY" } },
);
const data = await res.json();
import requests

res = requests.get(
    "https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1",
    headers={"x-api-key": "YOUR_KEY"},
)
data = res.json()
const axios = require("axios");

const { data } = await axios.get(
  "https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1",
  { headers: { "x-api-key": "YOUR_KEY" } },
);
req, _ := http.NewRequest("GET",
  "https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1",
  nil)
req.Header.Set("x-api-key", "YOUR_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
$ch = curl_init("https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
require "net/http"
require "json"

uri = URI("https://developer-api.hoodmarket.io/api/v1/nfts/0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41/1")
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "YOUR_KEY"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body)
{
  "contractAddress": "0xa597a1e2ec4490cdc64f33b8581c74d7aec72e41",
  "tokenId": "1",
  "source": "native",
  "name": "Example #1",
  "description": "...",
  "imageUrl": "https://.../1.png",
  "traits": [{ "trait_type": "Background", "value": "Blue" }]
}
Field Description
source native (metadata read straight from HoodMarket's own storage) or opensea (resolved live from OpenSea)
imageUrl Direct URL to the token's image.

404 means we have no record of this token.

Rate limits

120 requests per minute per API key. Responses set Cache-Control, so cache on your side for anything that doesn't need to be real-time.

More endpoints coming

New-collection detection is on the roadmap. Need something specific? Ping us on Discord.