OpenSea Collection Endpoints API
Collection endpoints to retrieve collection details, traits, and trending data
Collection endpoints to retrieve collection details, traits, and trending data
openapi: 3.1.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:
CollectionBatchResponse:
type: object
properties:
collections:
type: array
items:
$ref: '#/components/schemas/CollectionResponse'
required:
- collections
CollectionStatsResponse:
type: object
properties:
total:
$ref: '#/components/schemas/Total'
intervals:
type: array
items:
$ref: '#/components/schemas/IntervalStat'
required:
- intervals
- total
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
PricingCurrencies:
type: object
properties:
listing_currency:
$ref: '#/components/schemas/PaymentToken'
offer_currency:
$ref: '#/components/schemas/PaymentToken'
required:
- listing_currency
- offer_currency
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
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
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
Contract:
type: object
properties:
address:
type: string
chain:
type: string
required:
- address
- chain
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
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
CollectionPaginatedResponse:
type: object
properties:
collections:
type: array
items:
$ref: '#/components/schemas/CollectionResponse'
next:
type: string
required:
- collections
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
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
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
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
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
IntervalStat:
type: object
properties:
interval:
type: string
volume:
type: number
format: double
sales:
type: integer
format: int32
required:
- interval
- sales
- volume
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
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
Fee:
type: object
properties:
fee:
type: number
format: double
recipient:
type: string
required:
type: boolean
required:
- fee
- recipient
- required
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
responses:
NotFound:
description: Resource not found
BadRequest:
description: For error reasons, review the response data.
InternalError:
description: Internal server error. Please open a support ticket so OpenSea can investigate.
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