OpenSea API
The OpenSea API returns NFT marketplace data — floor prices, items and activity — as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary collection endpoint returns a collection's slug, name, category, floor price (amount, symbol, USD), top offer, total supply, unique-item and listed counts, and you can search collections, list items, pull an item, its activity and holders, and see what is trending. It is built for NFT analytics, portfolio tools and web3 apps that need OpenSea data without a scraper. One ReefAPI key, one shared credit pool, the standard { ok, data, meta, error } envelope.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/opensea/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "pudgy"
}
}{
"ok": true,
"meta": {
"api": "opensea",
"endpoint": "search",
"mode": "live",
"latency_ms": 722.3,
"record_count": 10,
"bytes": 4133,
"cache_hit": false,
"method": "gql+v2"
},
"data": {
"collections": [
{
"slug": "pudgypenguins",
"name": "[redacted-name]",
"category": "PFPS",
"image_url": "https://i2c.seadn.io/collection/pudgypenguins/image/f489fb69fd11886b468c0f7ff1376c/cdf489fb69fd11886b468c0f7ff1376c.png",
"opensea_url": "https://opensea.io/collection/pudgypenguins",
"floor_price": {
"amount": 4.189956449999882,
"symbol": "ETH",
"usd": null
},
"total_supply": 8888,
"owner_count": 5081,
"total_volume": {
"amount": 517390.48322527186,
"symbol": null,
"usd": null
}
},
{
"slug": "lilpudgys",
"name": "[redacted-name]",
"category": "PFPS",
"image_url": "https://i2c.seadn.io/collection/lilpudgys/image/9289b91d3d0cefccfe6b9c7f83f471/649289b91d3d0cefccfe6b9c7f83f471.png",
"opensea_url": "https://opensea.io/collection/lilpudgys",
"floor_price": {
"amount": 0.419899,
"symbol": "ETH",
"usd": null
},
"total_supply": 21929,
"owner_count": 10527,
"total_volume": {
"amount": 142491.910604402,
"symbol": null,
"usd": null
}
},
{
"slug": "pudgyrods",
"name": "[redacted-name]",
"category": "MEMBERSHIPS",
"image_url": "https://i2c.seadn.io/collection/pudgyrods/image/6691c691d[redacted-phone]db411b57e86/866691c691d[redacted-phone]db411b57e86.png",
"opensea_url": "https://opensea.io/collection/pudgyrods",
"floor_price": {
"amount": 0.11889739,
"symbol": "ETH",
"usd": null
},
"total_supply": 7399,
"owner_count": 2951,
"total_volume": {
"amount": 23606.3316370304,
"symbol": null,
"usd": null
}
}
]
}
}What the OpenSea API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| collection | Full collection detail by slug: floor price, top offer, 24h + total volume, owner / listed / supply counts and 1-day floor change merged with keyless metadata — description, image/banner, contracts (address + chain), category, safelist status, fees and social links (Twitter / Discord / Telegram / website). | Pricing teams call collection to get full collection detail by slug. | slug |
| search | Search OpenSea collections by free-text name. Returns matching collections with slug, name, image, category, floor price, owner count, supply and total volume — use the returned slug with the other actions. | Marketplace operators call search to search OpenSea collections by free-text name. | query, limit |
| items | Paginated items (NFTs) in a collection. Each item: name, token id, contract, image, rarity rank, best listing price + marketplace, best offer and last sale. Sort by price / rarity / last-sale-price / listing-date. Cursor pagination — pass the returned meta.next_cursor as `cursor` to page on. | Catalog enrichment teams call items to get paginated items (NFTs) in a collection. | slug, limit, cursor, sort_by, direction |
| item | Single NFT / item detail by collection contract + token id: name, image, all traits (trait_type + value), rarity rank, best listing (price + marketplace), best offer and last sale. Get contract_address from the collection action's contracts[] (or an items[] row); token_id is the NFT number. | Retail analysts call item to get single NFT / item detail by collection contract + token id. | contract_address, token_id, chain |
| activity | Recent on-chain activity for a collection (default: sales). Each event: type, time, price (token amount + USD) and the item (name, token id, contract). Filter by event type — sales, listings, offers, transfers or mints. | Pricing teams call activity to get recent on-chain activity for a collection (default. | slug, limit, event_type |
| holders | Top holders (owners) of a collection, ranked by quantity owned. Each holder: wallet address, display name (ENS / OpenSea username if any), quantity, % of supply and estimated total NFT portfolio value (USD). Cursor pagination. | Marketplace operators call holders to get top holders (owners) of a collection, ranked by quantity owned. | slug, limit, cursor |
| trending | Trending or top collections ranked over a time window — the OpenSea rankings/leaderboard. Each: rank score, slug, name, floor price, volume, owners and 1-day floor change. Choose TRENDING (momentum) or TOP (by volume), and a window (1h / 1d / 7d / 30d). | Catalog enrichment teams call trending to get trending or top collections ranked over a time window. | ranking, timeframe, limit |
Call search from your stack
curl -X POST https://api.reefapi.com/opensea/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"pudgy"}'import requests
r = requests.post(
"https://api.reefapi.com/opensea/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "pudgy"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/opensea/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "pudgy"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.opensea.search with {"query":"pudgy"}.Who uses this API and why
- NFT-analytics tools call collection to track a project's floor price, supply and listed count.
- Portfolio apps use holders and items to value a wallet's holdings across collections.
- Web3 products use activity and trending to power market feeds and discovery.
Questions developers ask before integrating
What is the OpenSea API?
OpenSea API is a ReefAPI endpoint group for opensea It returns live JSON through POST requests under /opensea/v1.
Is the OpenSea API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. OpenSea calls use the same shared credit balance as every other ReefAPI engine.
Do I need a OpenSea login or account?
No login to OpenSea is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the OpenSea data?
The page example is captured from a live collection call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the OpenSea API use?
OpenSea actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call OpenSea from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call opensea actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the OpenSea API a OpenSea scraper?
It is the managed alternative to a DIY OpenSea scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same opensea back as clean JSON.
Why does my OpenSea scraper keep getting blocked?
Most OpenSea scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.