OpenSea Token Endpoints API
Token endpoints for getting token details, balances, and trending data
Token endpoints for getting token details, balances, 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-token-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 Token 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: Token Endpoints
description: Token endpoints for getting token details, balances, and trending data
paths:
/api/v2/tokens/batch:
post:
tags:
- Token Endpoints
summary: Get tokens by contract identifiers
description: Retrieve multiple tokens in a single request by providing a list of contract identifiers (chain and address). Not-found tokens are silently omitted from the response.
operationId: get_tokens_batch
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BatchTokensRequest'
required: true
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenBatchResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/tokens/trending:
get:
tags:
- Token Endpoints
summary: Get trending tokens
description: Get trending tokens based on OpenSea's trending score algorithm. Returns tokens with high momentum including memecoins and newly popular assets.
operationId: get_trending_tokens
parameters:
- 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: chains
in: query
description: Filter by blockchain(s)
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ChainIdentifier'
example: ethereum
- name: cursor
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/tokens/top:
get:
tags:
- Token Endpoints
summary: Get top tokens
description: Get top tokens ranked by 24-hour trading volume. Returns established tokens with high market activity.
operationId: get_top_tokens
parameters:
- 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: chains
in: query
description: Filter by blockchain(s)
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ChainIdentifier'
example: ethereum
- name: cursor
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/token-groups:
get:
tags:
- Token Endpoints
summary: Get token groups
description: Get a paginated list of token groups sorted by market cap descending. Token groups represent equivalent currencies across different blockchains (e.g., ETH on Ethereum, Base, and Arbitrum are all in the "eth" token group).
operationId: get_token_groups
parameters:
- name: limit
in: query
description: 'Number of results to return (default: 50, max: 100)'
required: false
schema:
type: integer
format: int32
default: 50
example: 50
- name: cursor
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
responses:
'200':
description: Successful response
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenGroupPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/token-groups/{slug}:
get:
tags:
- Token Endpoints
summary: Get a token group by slug
description: Get detailed information about a specific token group by its slug identifier.
operationId: get_token_group
parameters:
- name: slug
in: path
description: The slug identifier of the token group
required: true
schema:
type: string
example: eth
responses:
'200':
description: Successful response
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenGroupResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/token/{address}:
get:
tags:
- Token Endpoints
summary: Get token details
description: Get detailed information about a specific token by chain and contract address.
operationId: get_token
parameters:
- name: chain
in: path
description: The blockchain on which the token exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address of the token
required: true
schema:
type: string
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenDetailedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/token/{address}/price_history:
get:
tags:
- Token Endpoints
summary: Get token price history
description: Get historical price data for a specific token.
operationId: get_token_price_history
parameters:
- name: chain
in: path
description: The blockchain on which the token exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address of the token
required: true
schema:
type: string
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
- name: start_time
in: query
description: Start time for the price history window (ISO 8601)
required: true
schema:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
- name: end_time
in: query
description: End time for the price history window (ISO 8601, defaults to now)
required: false
schema:
type: string
format: date-time
example: '2024-01-02T00:00:00Z'
- name: bucket_size
in: query
description: Candle bucket size for aggregation (1s, 1m, 5m, 15m, 1h, 4h, 1d)
required: false
schema:
type: string
example: 1h
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/PriceHistoryResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/token/{address}/ohlcv:
get:
tags:
- Token Endpoints
summary: Get token OHLCV candles
description: Get OHLCV (Open, High, Low, Close, Volume) candlestick data for a specific token.
operationId: get_token_ohlcv
parameters:
- name: chain
in: path
description: The blockchain on which the token exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address of the token
required: true
schema:
type: string
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
- name: start_time
in: query
description: Start time for the OHLCV window (ISO 8601)
required: true
schema:
type: string
format: date-time
example: '2024-01-01T00:00:00Z'
- name: end_time
in: query
description: End time for the OHLCV window (ISO 8601, defaults to now)
required: false
schema:
type: string
format: date-time
example: '2024-01-02T00:00:00Z'
- name: bucket_size
in: query
description: Candle bucket size (1s, 1m, 5m, 15m, 1h, 4h, 1d)
required: true
schema:
type: string
example: 1h
- name: fill_time_window
in: query
description: Whether to fill empty time windows with zero-volume candles
required: false
schema:
type: boolean
default: false
example: false
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/OhlcvResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/token/{address}/liquidity-pools:
get:
tags:
- Token Endpoints
summary: Get token liquidity pools
description: Get liquidity pools for a specific token.
operationId: get_token_liquidity_pools
parameters:
- name: chain
in: path
description: The blockchain on which the token exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address of the token
required: true
schema:
type: string
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
- name: limit
in: query
description: 'Number of results to return (default: 20, max: 50)'
required: false
schema:
type: integer
format: int32
default: 20
example: 20
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenLiquidityPoolsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/token/{address}/holders:
get:
tags:
- Token Endpoints
summary: Get token holders
description: Get paginated list of holders for a specific token, including quantity held and USD value.
operationId: get_token_holders
parameters:
- name: chain
in: path
description: The blockchain on which the token exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address of the token
required: true
schema:
type: string
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
- 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
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenHoldersResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/chain/{chain}/token/{address}/activity:
get:
tags:
- Token Endpoints
summary: Get token swap activity
description: Get paginated swap activity for a specific token on a given chain.
operationId: get_token_activity
parameters:
- name: chain
in: path
description: The blockchain on which the token exists
required: true
schema:
type: string
example: ethereum
- name: address
in: path
description: The contract address of the token
required: true
schema:
type: string
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
- name: limit
in: query
description: 'Number of results to return (default: 20, max: 50)'
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
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenSwapActivityPaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
/api/v2/account/{address}/tokens:
get:
tags:
- Token Endpoints
summary: Get token balances by account
description: Get fungible token balances for a specific wallet address. Returns quantity (in display units, not raw/wei), USD value, and token metadata for each token held.
operationId: get_token_balances_by_account
parameters:
- name: address
in: path
description: Wallet address
required: true
schema:
type: string
example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
- 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: chains
in: query
description: Filter by blockchain(s)
required: false
schema:
type: array
items:
$ref: '#/components/schemas/ChainIdentifier'
example: ethereum
- name: sort_by
in: query
description: 'Sort field (default: usd_value)'
required: false
schema:
type: string
enum:
- USD_VALUE
- MARKET_CAP
- ONE_DAY_VOLUME
- PRICE
- ONE_DAY_PRICE_CHANGE
- SEVEN_DAY_PRICE_CHANGE
example: usd_value
- name: sort_direction
in: query
description: 'Sort direction (default: desc)'
required: false
schema:
type: string
enum:
- asc
- desc
example: desc
- name: disable_spam_filtering
in: query
description: When true, disables OpenSea's heuristic spam filtering and returns tokens that would normally be hidden (low liquidity, dust, flagged-as-spam, etc.). Tokens flagged for trust & safety enforcement or as malicious are still filtered out regardless. Surfaced tokens carry a `status` field on the response indicating why they would have been filtered.
required: false
schema:
type: boolean
default: false
example: false
- name: cursor
in: query
description: Pagination cursor for next page
required: false
schema:
type: string
responses:
'200':
description: OK
content:
'*/*':
schema:
$ref: '#/components/schemas/TokenBalancePaginatedResponse'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalError'
components:
schemas:
TokenDetailedResponse:
type: object
description: Detailed token information including stats and social links
properties:
address:
type: string
description: The contract address of the token
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
chain:
type: string
description: The blockchain the token is on
example: ethereum
name:
type: string
description: The display name of the token
example: USD Coin
symbol:
type: string
description: The ticker symbol of the token
example: USDC
image_url:
type: string
description: URL of the token's image
usd_price:
type: string
description: Current price in USD
example: 1
decimals:
type: integer
format: int32
description: Number of decimal places
example: 6
opensea_url:
type: string
description: URL to the token page on OpenSea
description:
type: string
description: A description of the token
stats:
$ref: '#/components/schemas/TokenStatsResponse'
description: Market statistics for the token
socials:
$ref: '#/components/schemas/TokenSocialsResponse'
description: Social media links for the token
status:
type: string
default: OK
description: 'Token safety status based on OpenSea''s spam-classification rules. `OK` for tokens that pass all safety checks (the normal case). Categories are intentionally broad and may evolve. Possible values, in decreasing severity: `WARNING` (flagged as risky/suspicious — caution advised), `SPAM` (flagged as spam), `LOW_LIQUIDITY` (insufficient liquidity pool reserves), `OK` (passes all checks).'
enum:
- OK
- WARNING
- SPAM
- LOW_LIQUIDITY
required:
- address
- chain
- decimals
- name
- opensea_url
- symbol
- usd_price
TokenContractInput:
type: object
description: A token contract identifier consisting of chain and address
properties:
chain:
type: string
description: The blockchain the token is on
example: ethereum
address:
type: string
description: The contract address of the token
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
required:
- address
- chain
TokenHolderDistributionResponse:
type: object
description: Holder distribution health metrics for a token
properties:
total_holders:
type: integer
format: int32
description: Total number of holders with a non-zero balance
top_one_percent_concentration:
type: number
format: float
description: Percentage of total supply held by the top 1% of holders (0-100)
health_score:
type: integer
format: int32
description: Health score from 0-100 (higher = more distributed)
health_label:
type: string
description: Human-readable label for the health score
enum:
- STRONG
- HEALTHY
- CONCERNING
- BAD
required:
- health_label
- health_score
- top_one_percent_concentration
- total_holders
TokenPaginatedResponse:
type: object
description: Paginated list of tokens
properties:
tokens:
type: array
description: List of tokens
items:
$ref: '#/components/schemas/TokenResponse'
next:
type: string
description: Cursor for the next page of results
required:
- tokens
TokenGroupStatsResponse:
type: object
description: Market statistics for a token group
properties:
market_cap_usd:
type: string
description: Total market capitalization in USD
volume_usd_24h:
type: string
description: 24-hour trading volume in USD
price_usd:
type: string
description: Current price in USD (from primary currency)
price_change_percent_24h:
type: number
format: double
description: Price change percentage over the last 24 hours
total_supply:
type: string
description: Total supply across all currencies in the group
holders:
type: integer
format: int32
description: Number of holders
rolling_stats:
$ref: '#/components/schemas/TokenGroupRollingStatsResponse'
description: Rolling statistics over multiple time periods
required:
- market_cap_usd
- volume_usd_24h
OhlcvResponse:
type: object
description: List of OHLCV candle data points
properties:
candles:
type: array
description: List of OHLCV candles
items:
$ref: '#/components/schemas/OhlcvCandleResponse'
required:
- candles
TokenBatchResponse:
type: object
properties:
tokens:
type: array
items:
$ref: '#/components/schemas/TokenDetailedResponse'
required:
- tokens
TokenBalancePaginatedResponse:
type: object
description: Paginated list of token balances
properties:
token_balances:
type: array
description: List of token balances
items:
$ref: '#/components/schemas/TokenBalanceResponse'
next:
type: string
description: Cursor for the next page of results
required:
- token_balances
TokenStatsResponse:
type: object
description: Market statistics for a token
properties:
market_cap_usd:
type: number
format: double
description: Market capitalization in USD
fdv_usd:
type: number
format: double
description: Fully diluted valuation in USD
circulating_supply:
type: number
format: double
description: Circulating supply of the token
max_supply:
type: number
format: double
description: Maximum supply of the token
total_supply:
type: number
format: double
description: Total supply of the token
volume_24h:
type: number
format: double
description: 24-hour trading volume in USD
price_change_1h:
type: number
format: double
description: Price change percentage over the last hour
price_change_24h:
type: number
format: double
description: Price change percentage over the last 24 hours
price_change_7d:
type: number
format: double
description: Price change percentage over the last 7 days
price_change_30d:
type: number
format: double
description: Price change percentage over the last 30 days
BatchTokensRequest:
type: object
description: Request body for batch token retrieval by contract identifiers
properties:
contracts:
type: array
description: List of token contract identifiers to retrieve
items:
$ref: '#/components/schemas/TokenContractInput'
required:
- contracts
OhlcvCandleResponse:
type: object
description: An OHLCV candle data point
properties:
time:
type: string
format: date-time
description: Candle timestamp
open:
type: number
description: Opening price in USD
high:
type: number
description: Highest price in USD
low:
type: number
description: Lowest price in USD
close:
type: number
description: Closing price in USD
volume:
type: number
description: Trading volume in USD
required:
- close
- high
- low
- open
- time
- volume
TokenHoldersResponse:
type: object
description: Paginated list of token holders
properties:
holders:
type: array
description: List of token holders
items:
$ref: '#/components/schemas/TokenHolderResponse'
total_count:
type: integer
format: int32
description: Total number of holders
distribution:
$ref: '#/components/schemas/TokenHolderDistributionResponse'
description: Holder distribution health metrics
next:
type: string
description: Cursor for the next page of results
required:
- holders
TokenSwapActivityPaginatedResponse:
type: object
description: Paginated list of token swap activity events
properties:
swap_events:
type: array
description: List of swap activity events
items:
$ref: '#/components/schemas/TokenSwapActivityResponse'
next:
type: string
description: Cursor for the next page of results
required:
- swap_events
TokenGroupRollingStatsResponse:
type: object
description: Rolling statistics for a token group over multiple time periods
properties:
volume_1d:
type: string
description: 1-day trading volume in USD
volume_7d:
type: string
description: 7-day trading volume in USD
volume_30d:
type: string
description: 30-day trading volume in USD
price_change_1d:
type: number
format: double
description: 1-day price change percentage
price_change_7d:
type: number
format: double
description: 7-day price change percentage
price_change_30d:
type: number
format: double
description: 30-day price change percentage
TokenLiquidityPoolResponse:
type: object
description: A liquidity pool for a token
properties:
pool_type:
type: string
description: Pool protocol type (e.g. UNISWAP_V2, UNISWAP_V3)
pool_identifier:
type: string
description: Unique identifier for the pool
pool_address:
type: string
description: On-chain address of the pool contract
base_token:
type: string
description: Base token contract identifier (chain/address)
quote_token:
type: string
description: Quote token contract identifier (chain/address)
base_reserve_usd:
type: number
description: USD value of base token reserves
quote_reserve_usd:
type: number
description: USD value of quote token reserves
total_reserve_usd:
type: number
description: Total USD value of reserves in the pool
bonding_curve_progress:
type: number
format: float
description: Bonding curve progress percentage (0-100)
is_graduated:
type: boolean
description: Whether the token has graduated from its bonding curve
required:
- base_token
- pool_identifier
- pool_type
- quote_token
TokenBalanceResponse:
type: object
description: Token balance for a wallet address
properties:
address:
type: string
description: The contract address of the token
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
chain:
type: string
description: The blockchain the token is on
example: ethereum
name:
type: string
description: The display name of the token
example: USD Coin
symbol:
type: string
description: The ticker symbol of the token
example: USDC
image_url:
type: string
description: URL of the token's image
usd_price:
type: string
description: Current price in USD
example: 1
decimals:
type: integer
format: int32
description: Number of decimal places
example: 6
opensea_url:
type: string
description: URL to the token page on OpenSea
quantity:
type: string
description: Token balance in display units (divided by 10^decimals), not raw/wei
example: 1.5
usd_value:
type: string
description: Total USD value of the balance (quantity * usd_price)
example: 3518.51835185
status:
type: string
default: OK
description: 'Token status relative to OpenSea''s spam-classification rules. `OK` for tokens that pass all spam filters (the normal case); populated with a more specific value for tokens surfaced via `disable_spam_filtering=true` that would normally be hidden. Categories are intentionally broad and may evolve. Possible values, in decreasing severity: `WARNING` (flagged as risky/suspicious — caution advised), `SPAM` (flagged as spam), `LOW_LIQUIDITY` (insufficient pool liquidity), `LOW_VALUE` (dust holding < $0.01), `OK` (passes all filters).'
enum:
- OK
- WARNING
- SPAM
- LOW_LIQUIDITY
- LOW_VALUE
base_token_liquidity_usd:
type: string
description: USD value of base token reserves in the top liquidity pool paired with a curated quote token
example: 125000.5
quote_token_liquidity_usd:
type: string
description: USD value of quote token reserves in the top liquidity pool paired with a curated quote token
example: 125000.5
required:
- address
- chain
- decimals
- name
- opensea_url
- quantity
- symbol
- usd_price
- usd_value
TokenGroupPaginatedResponse:
type: object
description: Paginated list of token groups
properties:
token_groups:
type: array
description: List of token groups
items:
$ref: '#/components/schemas/TokenGroupResponse'
next:
type: string
description: Cursor for the next page of results
required:
- token_groups
TokenResponse:
type: object
description: A token with summary market data
properties:
address:
type: string
description: The contract address of the token
example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
chain:
type: string
description: The blockchain the token is on
example: ethereum
name:
type: string
description: The display name of the token
example: USD Coin
symbol:
type: string
description: The ticker symbol of the token
example: USDC
image_url:
type: string
description: URL of the token's image
usd_price:
# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/opensea/refs/heads/main/openapi/opensea-token-endpoints-api-openapi.yml