Python wrapper around the coinmarketcap.com API.
npx @tessl/cli install tessl/pypi-coinmarketcap@5.0.0Python wrapper around the coinmarketcap.com API (Version 2), enabling developers to easily retrieve cryptocurrency market data including listings, ticker information, and global market statistics. The library features built-in caching (120-second cache), support for multiple fiat and cryptocurrency conversions, and a clean object-oriented interface through the Market class.
pip install coinmarketcapfrom coinmarketcap import Marketfrom coinmarketcap import Market
# Initialize the market client with default settings
coinmarketcap = Market()
# Get all active cryptocurrency listings
listings = coinmarketcap.listings()
print(f"Found {len(listings['data'])} cryptocurrencies")
# Get top 10 cryptocurrencies by rank
top_10 = coinmarketcap.ticker(limit=10)
for crypto_id, data in top_10['data'].items():
print(f"{data['name']} ({data['symbol']}) - Rank: {data['rank']}")
# Get specific cryptocurrency by ID (Bitcoin = 1)
bitcoin = coinmarketcap.ticker(1)
btc_price = bitcoin['data']['quotes']['USD']['price']
print(f"Bitcoin price: ${btc_price}")
# Get global market statistics
stats = coinmarketcap.stats()
total_market_cap = stats['data']['quotes']['USD']['total_market_cap']
print(f"Total market cap: ${total_market_cap:,.0f}")The package uses a caching strategy with SQLite backend through requests_cache to optimize API usage:
The main interface for accessing CoinMarketCap API endpoints with built-in request caching and error handling.
class Market:
def __init__(
self,
base_url: str = "https://api.coinmarketcap.com/v2/",
request_timeout: int = 30,
tempdir_cache: bool = True
):
"""
Initialize Market client with API configuration.
Parameters:
- base_url (str): CoinMarketCap API base URL (default: v2 API)
- request_timeout (int): HTTP request timeout in seconds (default: 30)
- tempdir_cache (bool): Use system temp directory for cache (default: True)
"""Retrieve all active cryptocurrency listings with basic information for further querying.
def listings(self) -> dict:
"""
Get all active cryptocurrency listings.
Returns:
dict: Response containing list of cryptocurrencies with id, name, symbol, website_slug
Exception: Returns Exception object on network or parsing errors
Note: Response includes 'cached' field indicating if data came from cache
"""Retrieve cryptocurrency ticker data with pagination, sorting, and currency conversion options.
def ticker(self, currency: str = "", **kwargs) -> dict:
"""
Get cryptocurrency ticker data with optional filtering and conversion.
Parameters:
- currency (str): Specific cryptocurrency ID to query (empty for all)
- start (int): Return results from rank [start] and above (default: 1)
- limit (int): Maximum results to return (default: 100, max: 100)
- convert (str): Currency conversion code
Fiat: AUD, BRL, CAD, CHF, CLP, CNY, CZK, DKK, EUR, GBP, HKD, HUF,
IDR, ILS, INR, JPY, KRW, MXN, MYR, NOK, NZD, PHP, PKR, PLN,
RUB, SEK, SGD, THB, TRY, TWD, ZAR
Crypto: BTC, ETH, XRP, LTC, BCH
- sort (str): Sort order - "id", "rank", "volume_24h", "percent_change_24h" (default: rank)
Note: "id" is recommended for pagination as it provides consistent ordering
- structure (str): Response structure format - "dictionary" or "array" (default: dictionary)
Returns:
dict: Response containing ticker data with pricing, market cap, volume info
Exception: Returns Exception object on network or parsing errors
Note: Response includes 'cached' field indicating if data came from cache
"""Retrieve global cryptocurrency market data and statistics.
def stats(self, **kwargs) -> dict:
"""
Get global cryptocurrency market statistics.
Parameters:
- convert (str): Currency conversion code (same options as ticker method)
Returns:
dict: Response containing global market data with total market cap, volume,
active cryptocurrencies count, Bitcoin dominance
Exception: Returns Exception object on network or parsing errors
Note: Response includes 'cached' field indicating if data came from cache
"""# Get Bitcoin price in EUR
bitcoin_eur = coinmarketcap.ticker(1, convert='EUR')
eur_price = bitcoin_eur['data']['quotes']['EUR']['price']
print(f"Bitcoin price: €{eur_price:.2f}")
# Get global stats in multiple currencies
global_btc = coinmarketcap.stats(convert='BTC')
btc_market_cap = global_btc['data']['quotes']['BTC']['total_market_cap']
print(f"Total market cap: {btc_market_cap:.2f} BTC")# Get cryptocurrencies ranked 11-20, sorted by 24h volume
page_2 = coinmarketcap.ticker(start=11, limit=10, sort='volume_24h')
# Get top 5 by 24h percentage change
top_gainers = coinmarketcap.ticker(limit=5, sort='percent_change_24h')
# Get data in array format instead of dictionary
array_data = coinmarketcap.ticker(limit=10, structure='array')
# Use ID sorting for consistent pagination (recommended)
consistent_page = coinmarketcap.ticker(start=1, limit=10, sort='id')# The API methods can return Exception objects on error
try:
data = coinmarketcap.ticker(99999) # Invalid ID
if isinstance(data, Exception):
print(f"API error: {data}")
else:
print("Success:", data)
except Exception as e:
print(f"Network error: {e}")
# Alternative: Check for successful response structure
response = coinmarketcap.listings()
if not isinstance(response, Exception) and 'data' in response:
print(f"Found {len(response['data'])} cryptocurrencies")
else:
print("API call failed")