How To Sort And Filter Cryptocurrency Listings
The listings endpoint is far more capable than its default top-100 view suggests. It supports a full set of sort and filter parameters that let you rank by any market metric and narrow results to exactly the assets you care about, all server-side, before the data ever reaches your code.
This guide is the parameter reference for that. It covers every sort option, every filter, the aux parameter for controlling response size, and how to combine them.
Parameter availability can change. Confirm the current endpoint reference before shipping production code.
The endpoint
Every example on this page uses the same route. What changes is the query string.
Sort parameters
sort
Controls which field the results are ordered by.
| Value | Description |
|---|---|
| market_cap | CoinMarketCap market cap rank (default) |
| market_cap_strict | Strict market cap: latest price multiplied by circulating supply |
| volume_24h | 24-hour trading volume |
| percent_change_24h | 24-hour price percentage change |
| name | Alphabetical by asset name |
| symbol | Alphabetical by ticker symbol |
| date_added | Newest listings first, with sort_dir=desc |
| price | Current price |
| circulating_supply | Circulating supply |
| total_supply | Total supply |
sort_dir
asc or desc. Default is desc.
Top gainers over 24 hours
curl -G 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest' \
--data-urlencode 'sort=percent_change_24h' \
--data-urlencode 'sort_dir=desc' \
--data-urlencode 'limit=20' \
--data-urlencode 'convert=USD' \
-H 'X-CMC_PRO_API_KEY: YOUR_API_KEY'
Highest volume
curl -G 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest' \
--data-urlencode 'sort=volume_24h' \
--data-urlencode 'sort_dir=desc' \
--data-urlencode 'limit=50' \
--data-urlencode 'convert=USD' \
-H 'X-CMC_PRO_API_KEY: YOUR_API_KEY'
Filter parameters
Each filter narrows the result set before it is returned. The min and max variants can be used together or independently.
| Filter | Parameters | Notes |
|---|---|---|
| Price range | price_min, price_max | In the currency set by convert |
| Market cap range | market_cap_min, market_cap_max | Absolute values, not abbreviations |
| Volume floor | volume_24h_min | Pairs naturally with sort=volume_24h |
| Percent change | percent_change_24h_min, percent_change_24h_max | Accepts negative values |
| Asset type | cryptocurrency_type | all, coins or tokens |
| Tag | tag | all, defi or filesharing only |
Price range
params = {
"price_min": "0.001",
"price_max": "10",
"sort": "market_cap",
"limit": "100",
"convert": "USD",
}
Market cap range
params = {
"market_cap_min": "100000000", # $100M minimum
"market_cap_max": "1000000000", # $1B maximum
"sort": "market_cap",
"limit": "100",
"convert": "USD",
}
Volume floor
params = {
"volume_24h_min": "10000000", # $10M minimum daily volume
"sort": "volume_24h",
"sort_dir": "desc",
"limit": "50",
"convert": "USD",
}
Percent change filter
# Assets down more than 5% today
params = {
"percent_change_24h_max": "-5",
"sort": "percent_change_24h",
"sort_dir": "asc",
"limit": "50",
"convert": "USD",
}
Filter by type
params = {
"cryptocurrency_type": "tokens", # "coins", "tokens", or "all"
"sort": "market_cap",
"limit": "100",
"convert": "USD",
}
Filter by tag
The tag parameter accepts only three values: all, defi or filesharing.
params = {
"tag": "defi",
"sort": "market_cap",
"limit": "100",
"convert": "USD",
}
For other tag-based filtering such as layer-2 or NFT, fetch a broader list and filter locally by inspecting the tags array on each asset.
Combining sort and filters
Filters and sort work together. This fetches the top 50 DeFi tokens by volume with at least $5M daily volume:
import os
import requests
HEADERS = {
"Accept": "application/json",
"X-CMC_PRO_API_KEY": os.getenv("CMC_API_KEY"),
}
response = requests.get(
"https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest",
headers=HEADERS,
params={
"tag": "defi",
"sort": "volume_24h",
"sort_dir": "desc",
"volume_24h_min": "5000000",
"limit": "50",
"convert": "USD",
},
)
response.raise_for_status()
for asset in response.json()["data"]:
usd = asset["quote"]["USD"]
print(
f"{asset['symbol']:<8} ${usd['volume_24h']:>15,.0f} "
f"{usd['percent_change_24h']:>+6.2f}%"
)
The aux parameter
By default the response includes several supplemental fields. Use aux to add or remove them and control response size:
params = {
"limit": "100",
"convert": "USD",
"aux": "cmc_rank,date_added,tags,circulating_supply,max_supply",
}
Available aux fields include num_market_pairs, cmc_rank, date_added, tags, platform, max_supply, circulating_supply, total_supply, market_cap_by_total_supply, volume_24h_reported, volume_7d, volume_30d and is_market_cap_included_in_calc.
Common mistakes
Passing custom tag values
The tag parameter only accepts all, defi or filesharing. Other values return a 400 error. Filter by other tags locally.
Treating quote as an array
In v1 listings, quote is a dict keyed by symbol. Use asset["quote"]["USD"]["price"], not next().
Using this endpoint for specific known assets
If you already know which assets you want, use quotes/latest. It is more efficient.
FAQ
Which fields can I sort cryptocurrency listings by?
Ten values are supported: market_cap (default), market_cap_strict, volume_24h, percent_change_24h, name, symbol, date_added, price, circulating_supply and total_supply. Pair any of them with sort_dir set to asc or desc.
How do I find the top crypto gainers?
Set sort=percent_change_24h with sort_dir=desc. Add volume_24h_min to exclude thinly traded assets whose percentage moves are not meaningful.
Which tags does the tag parameter accept?
Only all, defi and filesharing. Any other value returns a 400 error. For tags such as layer-2 or NFT, fetch a broader list and filter locally on each asset's tags array.
Can I filter by market cap and price at the same time?
Yes. Filters compose freely and combine with any sort. You can pass market_cap_min, market_cap_max, price_min, price_max and volume_24h_min in the same request.
What does the aux parameter do?
It controls which supplemental fields the response carries, so you can add fields such as volume_7d or trim the default set to reduce response size.
When should I use quotes/latest instead?
When you already know which assets you want. Listings is built for discovery and ranking; quotes/latest is the efficient choice for looking up a known set of assets.
Where to go next
- How to Build a Crypto Market Screener
- How to Retrieve the Top 100 Cryptocurrencies by Market Cap
- How to Paginate Through Every Listed Cryptocurrency
Build your first filtered query
Combine a sort field with the range filters your product needs, and let the API do the narrowing before the data reaches your code.
This article contains links to third-party websites or other content for information purposes only ("Third-Party Sites"). The Third-Party Sites are not under the control of CoinMarketCap, and CoinMarketCap is not responsible for the content of any Third-Party Site, including without limitation any link contained in a Third-Party Site, or any changes or updates to a Third-Party Site. CoinMarketCap is providing these links to you only as a convenience, and the inclusion of any link does not imply endorsement, approval or recommendation by CoinMarketCap of the site or any association with its operators.
This article is intended to be used and must be used for informational purposes only. It is important to do your own research and analysis before making any material decisions related to any of the products or services described. This article is not intended as, and shall not be construed as, financial advice.


