OpenSea NFT Endpoints API
NFT endpoints to retrieve individual NFTs, metadata, ownership, and rarity
NFT endpoints to retrieve individual NFTs, metadata, ownership, and rarity
openapi: 3.1.0
info:
title: OpenSea Account Endpoints NFT 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: NFT Endpoints
description: NFT endpoints to retrieve individual NFTs, metadata, ownership, and rarity
paths:
/api/v2/nfts/batch:
post:
tags:
- NFT Endpoints
summary: Get NFTs by identifiers
description: Retrieve multiple NFTs in a single request by providing a list of identifiers (chain, contract address, and token ID). Not-found NFTs are silently omitted from the response.
operationId: get_nfts_batch
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BatchNftsRequest'
required: true
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/NftBatchResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts/{identifier}/validate-metadata:
post:
tags:
- NFT Endpoints
summary: Validate NFT metadata
description: Fetch and validate NFT metadata directly from the blockchain without using cached data. Returns both original and processed (SeaDN) URLs to show how the metadata would be ingested. This endpoint does not persist any data.
operationId: validate_nft_metadata
parameters:
- name: chain
in: path
description: The blockchain on which the NFT exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address
required: true
schema:
type: string
example: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d'
- name: identifier
in: path
description: The NFT token id
required: true
schema:
type: string
example: 1
- name: ignoreCachedItemUrls
in: query
description: Whether to bypass cached SeaDN URLs
required: false
schema:
type: boolean
example: true
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/ValidateMetadataResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts/{identifier}/refresh:
post:
tags:
- NFT Endpoints
summary: Refresh NFT metadata
description: Queue a metadata refresh for a specific NFT to update its information from the blockchain.
operationId: refresh_nft_metadata
parameters:
- name: address
in: path
description: Contract address
required: true
schema:
type: string
- name: chain
in: path
description: Blockchain chain identifier
required: true
schema:
type: string
- name: identifier
in: path
description: Token identifier
required: true
schema:
type: string
- name: ignoreCachedItemUrls
in: query
required: false
schema:
type: boolean
responses:
'200':
description: OK
content:
'*/*':
schema:
type: string
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/assets/transfer:
post:
tags:
- NFT Endpoints
summary: Transfer NFTs or tokens between wallets
description: Returns ordered blockchain actions to execute for transferring one or more NFTs or tokens from one wallet to another. Supports bulk transfers of multiple assets in a single request.
operationId: transfer_assets
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TransferRequest'
required: true
responses:
'200':
description: Transfer actions retrieved successfully
content:
'*/*':
schema:
$ref: '#/components/schemas/TransferResponse'
'400':
description: 'The request is invalid. Possible reasons: empty assets array, invalid addresses, invalid chain, or cross-ecosystem transfer.'
content:
'*/*':
schema:
$ref: '#/components/schemas/TransferResponse'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/metadata/{chain}/{contractAddress}/{tokenId}:
get:
tags:
- NFT Endpoints
summary: Get NFT metadata
description: Get detailed metadata for an NFT including name, description, image, traits, and external links.
operationId: get_nft_metadata
parameters:
- name: chain
in: path
description: The blockchain on which to filter the results
required: true
schema:
type: string
example: ethereum
- name: contractAddress
in: path
description: The unique public blockchain identifier for the contract
required: true
schema:
type: string
example: 0x8ba1f109551bD432803012645Hac136c94C19D6e
- name: tokenId
in: path
description: The NFT token id
required: true
schema:
type: string
example: 1
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/AssetMetadataResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/collection/{slug}/nfts:
get:
tags:
- NFT Endpoints
summary: Get NFTs by collection
description: 'Get NFTs in a specific collection. Optionally filter by traits using the ''traits'' query parameter with a JSON array of trait filters. Multiple traits are AND-combined (items must match all specified traits). Example: ?traits=[{"traitType":"Background","value":"Red"},{"traitType":"Eyes","value":"Blue"}]'
operationId: get_nfts_by_collection
parameters:
- name: slug
in: path
description: Collection slug
required: true
schema:
type: string
- name: traits
in: query
description: 'JSON array of trait filters. Each object has ''traitType'' and ''value'' fields. Multiple traits are AND-combined (items must match all). Example: [{"traitType":"Background","value":"Red"}]'
required: false
schema:
type: string
example:
- traitType: Background
value: Red
- name: has_agent_binding
in: query
description: Filter by NFTs that have an ERC-8217 agent binding
required: false
schema:
type: boolean
- 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
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/NftListResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts:
get:
tags:
- NFT Endpoints
summary: Get NFTs by contract
description: Get all NFTs for a specific contract address on a blockchain.
operationId: get_nfts_by_contract
parameters:
- name: address
in: path
description: Contract address
required: true
schema:
type: string
- name: chain
in: path
description: Blockchain chain identifier
required: true
schema:
type: string
- 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
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/NftListResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts/{identifier}:
get:
tags:
- NFT Endpoints
summary: Get NFT
description: Get metadata, traits, ownership information, and rarity for a single NFT.
operationId: get_nft
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/NftResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts/{identifier}/owners:
get:
tags:
- NFT Endpoints
summary: Get NFT owners
description: Get a paginated list of owners for a specific NFT. Particularly useful for ERC-1155 tokens which can have multiple owners.
operationId: get_nft_owners
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
- 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: next
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
responses:
'200':
description: NFT owners
content:
'*/*':
schema:
$ref: '#/components/schemas/OwnersPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/contract/{address}/nfts/{identifier}/analytics:
get:
tags:
- NFT Endpoints
summary: Get NFT analytics
description: Get analytics data for a specific NFT including sales history and floor price history.
operationId: get_nft_analytics
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: NFT analytics data
content:
'*/*':
schema:
$ref: '#/components/schemas/NftAnalyticsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/account/{address}/nfts:
get:
tags:
- NFT Endpoints
summary: Get NFTs by account
description: Get all NFTs owned by a specific account on a blockchain, with optional collection filtering.
operationId: get_nfts_by_account
parameters:
- name: address
in: path
description: Account address
required: true
schema:
type: string
- name: chain
in: path
description: Blockchain chain identifier
required: true
schema:
type: string
- name: collection
in: query
required: false
schema:
type: string
- 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
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/NftListResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
components:
schemas:
AgentNftResponse:
type: object
properties:
chain:
type: string
token_id:
type: string
contract_address:
type: string
required:
- chain
- contract_address
- token_id
NftSalePointResponse:
type: object
description: A sale data point for an NFT
properties:
time:
type: string
format: date-time
description: Timestamp of the sale
usd_price:
type: string
description: Sale price in USD
token_unit:
type: number
format: double
description: Sale price in token units
symbol:
type: string
description: Payment token symbol
chain:
type: string
description: Blockchain chain
required:
- chain
- time
- token_unit
- usd_price
Trait:
type: object
properties:
trait_type:
type: string
display_type:
type: string
max_value:
type: string
value: {}
required:
- trait_type
- value
ValidateMetadataAssetIdentifier:
type: object
properties:
chain:
type: string
contractAddress:
type: string
tokenId:
type: string
required:
- chain
- contractAddress
- tokenId
Rarity:
type: object
properties:
strategy_id:
type: string
strategy_version:
type: string
rank:
type: integer
format: int64
required:
- strategy_id
- strategy_version
AgentBindingResponse:
type: object
properties:
agent_id:
type: string
binding_contract:
type: string
agent:
$ref: '#/components/schemas/AgentNftResponse'
registered_by:
type: string
required:
- agent
- agent_id
- binding_contract
ValidateMetadataResponse:
type: object
properties:
assetIdentifier:
$ref: '#/components/schemas/ValidateMetadataAssetIdentifier'
tokenUri:
type: string
metadata:
$ref: '#/components/schemas/ValidateMetadataDetails'
error:
$ref: '#/components/schemas/MetadataIngestionError'
required:
- assetIdentifier
NftAnalyticsResponse:
type: object
description: Analytics data for an NFT including sales and floor price history
properties:
sales:
type: array
description: List of sale data points
items:
$ref: '#/components/schemas/NftSalePointResponse'
floor_prices:
type: array
description: List of floor price data points
items:
$ref: '#/components/schemas/FloorPricePointResponse'
required:
- floor_prices
- sales
OwnersPaginatedResponse:
type: object
properties:
owners:
type: array
items:
$ref: '#/components/schemas/Owner'
next:
type: string
required:
- owners
NftDetailed:
type: object
properties:
identifier:
type: string
collection:
type: string
contract:
type: string
token_standard:
type: string
name:
type: string
description:
type: string
image_url:
type: string
display_image_url:
type: string
display_animation_url:
type: string
metadata_url:
type: string
opensea_url:
type: string
updated_at:
type: string
is_disabled:
type: boolean
is_nsfw:
type: boolean
original_image_url:
type: string
original_animation_url:
type: string
traits:
type: array
items:
$ref: '#/components/schemas/Trait'
animation_url:
type: string
is_suspicious:
type: boolean
creator:
type: string
owners:
type: array
items:
$ref: '#/components/schemas/Owner'
rarity:
$ref: '#/components/schemas/Rarity'
subscription:
$ref: '#/components/schemas/SubscriptionInfoResponse'
agent_binding:
$ref: '#/components/schemas/AgentBindingResponse'
required:
- collection
- contract
- creator
- identifier
- is_disabled
- is_nsfw
- is_suspicious
- opensea_url
- owners
- token_standard
- traits
- updated_at
NftIdentifierInput:
type: object
description: An NFT identifier consisting of chain, contract address, and token ID
properties:
chain:
type: string
description: The blockchain the NFT is on
example: ethereum
contract_address:
type: string
description: The contract address of the NFT
example: '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D'
token_id:
type: string
description: The token ID of the NFT
example: 1
required:
- chain
- contract_address
- token_id
AssetMetadataResponse:
type: object
properties:
name:
type: string
description:
type: string
image:
type: string
external_link:
type: string
animation_url:
type: string
traits:
type: array
items:
$ref: '#/components/schemas/Trait'
required:
- traits
TransferRequest:
type: object
description: Request to transfer NFTs or tokens between wallets
properties:
assets:
type: array
description: List of assets to transfer
items:
$ref: '#/components/schemas/TransferAsset'
from_address:
type: string
description: Address of the sender wallet
example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
to_address:
type: string
description: Address of the recipient wallet
example: '0x28c6c06298d514db089934071355e5743bf21d60'
required:
- assets
- from_address
- to_address
NftResponse:
type: object
properties:
nft:
$ref: '#/components/schemas/NftDetailed'
required:
- nft
ValidateMetadataAttribute:
type: object
properties:
traitType:
type: string
value:
type: string
displayType:
type: string
required:
- traitType
- value
NftBatchResponse:
type: object
properties:
nfts:
type: array
items:
$ref: '#/components/schemas/NftDetailed'
required:
- nfts
NftListResponse:
type: object
properties:
nfts:
type: array
items:
$ref: '#/components/schemas/Nft'
next:
type: string
required:
- nfts
JsonNode: {}
TransferResponse:
type: object
description: Response containing ordered blockchain actions to execute for an asset transfer
properties:
steps:
type: array
description: Ordered list of blockchain actions to execute. Each action is a JSON object with a single field indicating the type (e.g. transferAction, approvalAction) and its associated data. Serialized using proto3 JSON format — fields with default values (empty string, 0, false) may be omitted.
items:
$ref: '#/components/schemas/JsonNode'
required:
- steps
Nft:
type: object
properties:
identifier:
type: string
collection:
type: string
contract:
type: string
token_standard:
type: string
name:
type: string
description:
type: string
image_url:
type: string
display_image_url:
type: string
display_animation_url:
type: string
metadata_url:
type: string
opensea_url:
type: string
updated_at:
type: string
is_disabled:
type: boolean
is_nsfw:
type: boolean
original_image_url:
type: string
original_animation_url:
type: string
traits:
type: array
items:
$ref: '#/components/schemas/Trait'
required:
- collection
- contract
- identifier
- is_disabled
- is_nsfw
- opensea_url
- token_standard
- traits
- updated_at
ValidateMetadataDetails:
type: object
properties:
name:
type: string
description:
type: string
originalImageUrl:
type: string
processedImageUrl:
type: string
originalAnimationUrl:
type: string
processedAnimationUrl:
type: string
externalUrl:
type: string
backgroundColor:
type: string
attributes:
type: array
items:
$ref: '#/components/schemas/ValidateMetadataAttribute'
required:
- attributes
TransferAsset:
type: object
description: An asset to transfer
properties:
chain:
type: string
description: The chain the asset is on (e.g. ethereum, base, solana)
example: ethereum
contract:
type: string
description: The contract address of the asset
example: '0xBd3531dA5CF5857e7CfAA92426877b022e612cf8'
token_id:
type: string
description: The token ID of the asset
example: 1234
quantity:
type: string
description: The quantity to transfer in raw units (1 for ERC721, raw amount for ERC1155/fungible)
example: 1
required:
- chain
- contract
- quantity
- token_id
BatchNftsRequest:
type: object
description: Request body for batch NFT retrieval by identifiers
properties:
identifiers:
type: array
description: List of NFT identifiers to retrieve
items:
$ref: '#/components/schemas/NftIdentifierInput'
required:
- identifiers
MetadataIngestionError:
type: object
properties:
errorType:
type: string
message:
type: string
url:
type: string
statusCode:
type: integer
format: int32
required:
- errorType
- message
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
SubscriptionInfoResponse:
type: object
properties:
expires_at:
type: string
format: date-time
is_renewable:
type: boolean
is_expired:
type: boolean
required:
- is_expired
- is_renewable
Owner:
type: object
properties:
address:
type: string
quantity:
type: integer
format: int32
quantity_string:
type: string
required:
- address
- quantity
- quantity_string
responses:
NotFound:
description: Resource not found
InternalError:
description: Internal server error. Please open a support ticket so OpenSea can investigate.
BadRequest:
description: For error reasons, review the response data.
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