OpenSea API 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 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 API?
OpenSea API API is a ReefAPI endpoint group for opensea api It returns live JSON through POST requests under /opensea/v1.
Is the OpenSea API API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. OpenSea API calls use the same shared credit balance as every other ReefAPI engine.
Do I need a OpenSea API login or account?
No login to OpenSea API 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 API 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 API use?
OpenSea API 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 API 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 API a OpenSea API scraper?
It is the managed alternative to a DIY OpenSea API 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 api back as clean JSON.
Why does my OpenSea API scraper keep getting blocked?
Most OpenSea API 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.