OpenSea Collection Endpoints API
Collection endpoints to retrieve collection details, traits, and trending data
Collection endpoints to retrieve collection details, traits, and trending data
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/opensea-collection-endpoints-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: OpenSea Account Endpoints Collection Endpoints API
description: The API for OpenSea
contact:
name: OpenSea
url: https://www.opensea.io
email: contact@opensea.io
version: 2.0.0
servers:
- url: https://api.opensea.io
description: Production server
security:
- ApiKeyAuth: []
tags:
- name: Collection Endpoints
description: Collection endpoints to retrieve collection details, traits, and trending data
paths:
/api/v2/collections/batch:
post:
tags:
- Collection Endpoints
summary: Get collections by slugs
description: Retrieve multiple collections in a single request by providing a list of slugs. Results are returned in the same order as the input slugs. Not-found collections are silently omitted.
operationId: get_collections_batch
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BatchCollectionsRequest'
required: true
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionBatchResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/traits/{slug}:
get:
tags:
- Collection Endpoints
summary: Get collection traits
description: Get all available traits for a collection with their value counts and data types.
operationId: get_collection_traits
parameters:
- name: slug
in: path
description: Unique identifier for the specific collection
required: true
schema:
type: string
example: doodles-official
responses:
'200':
description: Collection traits with categories and counts
content:
application/json:
examples:
TraitsResponse:
description: Example response showing both string and numeric trait types
value:
categories:
face: string
background: string
level: number
counts:
face:
glasses: 4
sunglasses: 2
background:
red: 6
level:
min: 1
max: 99
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections:
get:
tags:
- Collection Endpoints
summary: Get multiple collections
description: Get a list of collections with filters and sorting options.
operationId: list_collections
parameters:
- name: limit
in: query
description: Number of items to return per page
required: false
schema:
type: integer
format: int32
description: Number of items to return per page
example: 20
maximum: 200
minimum: 1
example: 20
- name: next.value
in: query
required: false
schema:
type: string
- name: chain
in: query
description: Blockchain to filter by
required: false
schema:
type: string
- name: creator_username
in: query
description: Username of collection creator to filter by
required: false
schema:
type: string
- name: include_hidden
in: query
description: Include hidden collections in results
required: false
schema:
type: boolean
- name: order_by
in: query
description: Field to order results by
required: false
schema:
type: string
example: created_date
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/{slug}:
get:
tags:
- Collection Endpoints
summary: Get a single collection
description: Get a single collection including details such as fees, traits, and links.
operationId: get_collection
parameters:
- name: slug
in: path
description: Unique identifier for the specific collection
required: true
schema:
type: string
example: doodles-official
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionDetailedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/{slug}/stats:
get:
tags:
- Collection Endpoints
summary: Get collection stats
description: Get comprehensive statistics for a collection including volume, floor price, and trading metrics.
operationId: get_collection_stats
parameters:
- name: slug
in: path
description: Unique identifier for the specific collection
required: true
schema:
type: string
example: doodles-official
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionStatsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/{slug}/offer_aggregates:
get:
tags:
- Collection Endpoints
summary: Get collection offer aggregates
description: Get aggregated offer buckets grouped by price level for a collection.
operationId: get_collection_offer_aggregates
parameters:
- name: slug
in: path
description: Collection slug
required: true
schema:
type: string
example: boredapeyachtclub
- name: limit
in: query
description: 'Number of results to return (default: 20, max: 100)'
required: false
schema:
type: integer
format: int32
default: 20
example: 20
- name: cursor
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
- name: sort_direction
in: query
description: Sort direction (asc or desc)
required: false
schema:
type: string
default: desc
example: desc
responses:
'200':
description: Collection offer aggregates
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionOfferAggregatesPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/{slug}/holders:
get:
tags:
- Collection Endpoints
summary: Get collection holders
description: Get a paginated list of holders for a collection.
operationId: get_collection_holders
parameters:
- name: slug
in: path
description: Collection slug
required: true
schema:
type: string
example: boredapeyachtclub
- name: limit
in: query
description: 'Number of results to return (default: 20, max: 100)'
required: false
schema:
type: integer
format: int32
default: 20
example: 20
- name: cursor
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
- name: sort_direction
in: query
description: Sort direction (asc or desc)
required: false
schema:
type: string
default: desc
example: desc
- name: owned_by
in: query
description: Filter by owner address
required: false
schema:
type: string
responses:
'200':
description: Collection holders
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionHoldersPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/{slug}/floor_prices:
get:
tags:
- Collection Endpoints
summary: Get collection floor price history
description: Get time-series floor price data for a collection.
operationId: get_collection_floor_prices
parameters:
- name: slug
in: path
description: Collection slug
required: true
schema:
type: string
example: boredapeyachtclub
- name: timeframe
in: query
description: 'Time window for floor price history. Options: one_minute, five_minutes, fifteen_minutes, one_hour, one_day, seven_days, thirty_days, one_year, all_time'
required: false
schema:
type: string
default: one_day
example: one_day
- name: resolution
in: query
description: Number of data points to return
required: false
schema:
type: integer
format: int32
responses:
'200':
description: Floor price history
content:
'*/*':
schema:
$ref: '#/components/schemas/FloorPriceHistoryResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/trending:
get:
tags:
- Collection Endpoints
summary: Get trending collections
description: Get a list of trending NFT collections sorted by sales activity over a specified timeframe. Trending is determined by sales volume and activity metrics. Available timeframes range from 1 minute to all time. For the one_day timeframe without a chain filter, collections are sorted by a composite trending score; all other timeframes sort by raw sales count. Results are filtered to verified, non-spam, non-NSFW collections with minimum volume thresholds.
operationId: get_trending_collections
parameters:
- name: timeframe
in: query
description: 'Time window for trending calculation. Options: one_minute, five_minutes, fifteen_minutes, one_hour, one_day, seven_days, thirty_days, one_year, all_time.'
required: false
schema:
type: string
default: one_day
example: one_day
- name: chains
in: query
description: Blockchain(s) to filter by. Comma-separated list of chain identifiers. Unsupported chains are silently ignored; a 400 is returned only if all specified chains are unsupported.
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ChainIdentifier'
example: ethereum,base
- name: category
in: query
description: Category to filter by (e.g. art, gaming, memberships, music, pfps, photography, domain-names, virtual-worlds, sports-collectibles, physical-collectibles).
required: false
schema:
type: string
example: pfps
- name: limit
in: query
description: Maximum number of collections to return (1-100).
required: false
schema:
type: integer
format: int32
default: 20
example: 20
- name: cursor
in: query
description: Cursor for pagination. Use the 'next' value from a previous response.
required: false
schema:
type: string
responses:
'200':
description: Trending collections
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collections/top:
get:
tags:
- Collection Endpoints
summary: Get top collections
description: 'Get top NFT collections ranked by various stats (sorted descending). Unlike /trending, results are not filtered by verification status; spam-tagged collections are excluded via trust-safety enforcement states. Available sort options: one_day_volume, seven_days_volume, thirty_days_volume, floor_price, one_day_sales, seven_days_sales, thirty_days_sales, total_volume, total_sales.'
operationId: get_top_collections
parameters:
- name: sort_by
in: query
description: 'The stat to sort collections by (always sorted descending). Options: one_day_volume, seven_days_volume, thirty_days_volume, floor_price, one_day_sales, seven_days_sales, thirty_days_sales, total_volume, total_sales'
required: false
schema:
type: string
default: one_day_volume
example: one_day_volume
- name: chains
in: query
description: Blockchain(s) to filter by. Comma-separated list of chain identifiers. Unsupported chains are silently ignored; a 400 is returned only if all specified chains are unsupported.
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ChainIdentifier'
example: ethereum,base
- name: category
in: query
description: Category to filter by (e.g. art, gaming, memberships, music, pfps, photography, domain-names, virtual-worlds, sports-collectibles, physical-collectibles).
required: false
schema:
type: string
example: pfps
- name: limit
in: query
description: Maximum number of collections to return (1-100).
required: false
schema:
type: integer
format: int32
default: 50
example: 50
- name: cursor
in: query
description: Cursor for pagination
required: false
schema:
type: string
responses:
'200':
description: Top collections list
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts/{identifier}/collection:
get:
tags:
- Collection Endpoints
summary: Get collection by NFT
description: Get the collection that an NFT belongs to. This is useful for multi-contract collections like Art Blocks where the item ID disambiguates which collection the NFT belongs to.
operationId: get_nft_collection
parameters:
- name: chain
in: path
description: The blockchain on which to filter the results
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The unique public blockchain identifier for the contract
required: true
schema:
type: string
example: 0x8ba1f109551bD432803012645Hac136c94C19D6e
- name: identifier
in: path
description: The NFT token id
required: true
schema:
type: string
example: 1
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/CollectionDetailedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
components:
schemas:
CollectionRarity:
type: object
properties:
calculated_at:
type: string
max_rank:
type: integer
format: int32
total_supply:
type: integer
format: int64
strategy_id:
type: string
strategy_version:
type: string
required:
- calculated_at
- max_rank
- strategy_id
- strategy_version
- total_supply
BatchCollectionsRequest:
type: object
description: Request body for batch collection retrieval by slugs
properties:
slugs:
type: array
description: List of collection slugs to retrieve
example:
- boredapeyachtclub
- doodles-official
items:
type: string
required:
- slugs
FloorPricePointResponse:
type: object
description: A floor price data point
properties:
time:
type: string
format: date-time
description: Timestamp of the data point
usd_price:
type: string
description: Floor price in USD
token_unit:
type: number
format: double
description: Floor price in token units
symbol:
type: string
description: Payment token symbol
chain:
type: string
description: Blockchain chain
required:
- time
Total:
type: object
properties:
volume:
type: number
format: double
sales:
type: integer
format: int32
num_owners:
type: integer
format: int64
floor_price:
type: number
format: double
floor_price_symbol:
type: string
required:
- floor_price
- floor_price_symbol
- num_owners
- sales
- volume
IntervalStat:
type: object
properties:
interval:
type: string
volume:
type: number
format: double
sales:
type: integer
format: int32
required:
- interval
- sales
- volume
CollectionStatsResponse:
type: object
properties:
total:
$ref: '#/components/schemas/Total'
intervals:
type: array
items:
$ref: '#/components/schemas/IntervalStat'
required:
- intervals
- total
CollectionOfferAggregatesPaginatedResponse:
type: object
description: Paginated list of collection offer aggregates
properties:
offer_aggregates:
type: array
description: List of offer aggregates
items:
$ref: '#/components/schemas/CollectionOfferAggregateResponse'
next:
type: string
description: Cursor for the next page of results
required:
- offer_aggregates
OfferAggregatePriceResponse:
type: object
description: Price information for an offer aggregate
properties:
usd_price:
type: string
description: Price in USD
token_unit:
type: number
format: double
description: Price in token units
symbol:
type: string
description: Payment token symbol
chain:
type: string
description: Blockchain chain
required:
- chain
- token_unit
- usd_price
CollectionPaginatedResponse:
type: object
properties:
collections:
type: array
items:
$ref: '#/components/schemas/CollectionResponse'
next:
type: string
required:
- collections
CollectionBatchResponse:
type: object
properties:
collections:
type: array
items:
$ref: '#/components/schemas/CollectionResponse'
required:
- collections
CollectionHolderResponse:
type: object
description: A collection holder
properties:
address:
type: string
description: Wallet address of the holder
quantity:
type: integer
format: int32
description: Number of items held
percentage:
type: number
format: float
description: Ownership percentage of the collection
required:
- address
- percentage
- quantity
BidderResponse:
type: object
description: A bidder in an offer aggregate
properties:
address:
type: string
description: Wallet address of the bidder
quantity:
type: integer
format: int32
description: Number of offers from this bidder
required:
- address
- quantity
PricingCurrencies:
type: object
properties:
listing_currency:
$ref: '#/components/schemas/PaymentToken'
offer_currency:
$ref: '#/components/schemas/PaymentToken'
required:
- listing_currency
- offer_currency
CollectionOfferAggregateResponse:
type: object
description: An aggregated offer bucket
properties:
offer_price:
$ref: '#/components/schemas/OfferAggregatePriceResponse'
description: Offer price level
total_value:
$ref: '#/components/schemas/OfferAggregatePriceResponse'
description: Total value of offers at this level
total_offers:
type: integer
format: int32
description: Total number of offers at this level
bidders:
type: array
description: Bidders at this price level
items:
$ref: '#/components/schemas/BidderResponse'
required:
- bidders
- offer_price
- total_offers
- total_value
CollectionDetailedResponse:
type: object
properties:
collection:
type: string
name:
type: string
description:
type: string
image_url:
type: string
banner_image_url:
type: string
owner:
type: string
safelist_status:
type: string
category:
type: string
is_disabled:
type: boolean
is_nsfw:
type: boolean
trait_offers_enabled:
type: boolean
collection_offers_enabled:
type: boolean
opensea_url:
type: string
project_url:
type: string
wiki_url:
type: string
discord_url:
type: string
telegram_url:
type: string
twitter_username:
type: string
instagram_username:
type: string
contracts:
type: array
items:
$ref: '#/components/schemas/Contract'
editors:
type: array
items:
type: string
fees:
type: array
items:
$ref: '#/components/schemas/Fee'
required_zone:
type: string
rarity:
$ref: '#/components/schemas/CollectionRarity'
total_supply:
type: integer
format: int64
unique_item_count:
type: integer
format: int64
created_date:
type: string
format: date-time
pricing_currencies:
$ref: '#/components/schemas/PricingCurrencies'
required:
- collection
- collection_offers_enabled
- contracts
- created_date
- editors
- fees
- is_disabled
- is_nsfw
- name
- opensea_url
- pricing_currencies
- safelist_status
- total_supply
- trait_offers_enabled
- unique_item_count
CollectionHoldersPaginatedResponse:
type: object
description: Paginated list of collection holders
properties:
holders:
type: array
description: List of holders
items:
$ref: '#/components/schemas/CollectionHolderResponse'
next:
type: string
description: Cursor for the next page of results
required:
- holders
Contract:
type: object
properties:
address:
type: string
chain:
type: string
required:
- address
- chain
CollectionResponse:
type: object
properties:
collection:
type: string
name:
type: string
description:
type: string
image_url:
type: string
banner_image_url:
type: string
owner:
type: string
safelist_status:
type: string
category:
type: string
is_disabled:
type: boolean
is_nsfw:
type: boolean
trait_offers_enabled:
type: boolean
collection_offers_enabled:
type: boolean
opensea_url:
type: string
project_url:
type: string
wiki_url:
type: string
discord_url:
type: string
telegram_url:
type: string
twitter_username:
type: string
instagram_username:
type: string
contracts:
type: array
items:
$ref: '#/components/schemas/Contract'
required:
- collection
- collection_offers_enabled
- contracts
- is_disabled
- is_nsfw
- name
- opensea_url
- safelist_status
- trait_offers_enabled
FloorPriceHistoryResponse:
type: object
description: Floor price history for a collection
properties:
floor_prices:
type: array
description: List of floor price data points
items:
$ref: '#/components/schemas/FloorPricePointResponse'
required:
- floor_prices
PaymentToken:
type: object
properties:
symbol:
type: string
address:
type: string
chain:
type: string
image:
type: string
name:
type: string
decimals:
type: integer
format: int32
eth_price:
type: string
usd_price:
type: string
required:
- address
- chain
- decimals
- eth_price
- image
- name
- symbol
- usd_price
Fee:
type: object
properties:
fee:
type: number
format: double
recipient:
type: string
required:
type: boolean
required:
- fee
- recipient
- required
ChainIdentifier:
type: string
default: ethereum
description: Blockchain chain identifier. Use the chain slug (e.g., 'ethereum', 'polygon', 'arbitrum', 'optimism', 'base')
enum:
- blast
- base
- ethereum
- zora
- arbitrum
- sei
- avalanche
- polygon
- optimism
- ape_chain
- flow
- b3
- soneium
- ronin
- bera_chain
- solana
- shape
- unichain
- gunzilla
- abstract
- animechain
- hyperevm
- somnia
- monad
- hyperliquid
- megaeth
- ink
example: ethereum
responses:
InternalError:
description: Internal server error. Please open a support ticket so OpenSea can investigate.
BadRequest:
description: For error reasons, review the response data.
NotFound:
description: Resource not found
securitySchemes:
ApiKeyAuth:
type: apiKey
description: API key required for authentication
name: x-api-key
in: header
x-tagGroups:
- name: Data & Discovery
tags:
- Chain Endpoints
- Account Endpoints
- Collection Endpoints
- NFT Endpoints
- Contract Endpoints
- Token Endpoints
- Search Endpoints
- name: Marketplace & Trading
tags:
- Listing Endpoints
- Offer Endpoints
- Order Endpoints
- Swap Endpoints
- Drops Endpoints
- name: Analytics & Events
tags:
- Analytics Endpoints
- name: Tools [Beta]
tags:
- Tool Endpoints [Beta]
- name: Transactions
tags:
- Transaction Endpoints