CoinMarketCap API Integration: Caching and Error Handling
We frequently encounter projects that require real-time crypto market data, but without aggressive caching, the free plan of 10,000 credits per month is exhausted in a couple of days. One request for quotes of ten coins costs 10 credits. Updating prices every minute would drain the limit in 16 hours. In a DeFi aggregator project, without caching, the limit was gone within a day — after configuring Redis with a TTL of 60 seconds, consumption dropped 10x, saving the client about $500 per month on paid plans. Our team has 10+ years of experience in web3 and over 50 completed projects, so we guarantee a stable integration. Let's break down a typical integration that works under load and doesn't require expensive tariffs.
Setting Up the CoinMarketCap Client
Registration at pro.coinmarketcap.com gives you an API key instantly. Base URL: https://pro-api.coinmarketcap.com/v1/. For testing, use the sandbox: https://sandbox-api.coinmarketcap.com/v1/ (key b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c, data is fictional).
import axios, { AxiosInstance } from 'axios' class CoinMarketCapClient { private client: AxiosInstance constructor(apiKey: string, sandbox = false) { this.client = axios.create({ baseURL: sandbox ? 'https://sandbox-api.coinmarketcap.com/v1/' : 'https://pro-api.coinmarketcap.com/v1/', headers: { 'X-CMC_PRO_API_KEY': apiKey, 'Accept': 'application/json', }, }) } async getQuotes(symbols: string[]): Promise<Record<string, CmcQuote>> { const res = await this.client.get('/cryptocurrency/quotes/latest', { params: { symbol: symbols.join(','), convert: 'USD', }, }) return res.data.data } async getListings(limit = 100, start = 1): Promise<CmcListing[]> { const res = await this.client.get('/cryptocurrency/listings/latest', { params: { limit, start, convert: 'USD', sort: 'market_cap' }, }) return res.data.data } } Data Structure and Coin Mapping
CoinMarketCap assigns a unique CMC ID (integer) to each coin — this is more reliable than tickers, which can be duplicated. The ticker->CMC ID mapping is obtained via /v1/cryptocurrency/map and cached for a day.
interface CmcQuote { id: number name: string symbol: string slug: string quote: { USD: { price: number volume_24h: number percent_change_24h: number market_cap: number } } } const idMap: Record<string, number> = { 'BTC': 1, 'ETH': 1027 } // obtained via /map and caching Why Caching Is Critical for CoinMarketCap API
Each request consumes credits. One quotes request with 10 symbols costs 10 credits. With 10,000 credits per month, that's only 1,000 requests. Redis caching can reduce consumption by 10x. Savings on API credits can reach 70% — that's hundreds of dollars monthly for high-frequency projects. Recommended TTLs:
| Data Type | TTL | Example Usage |
|---|---|---|
quotes/latest |
60 s | Display prices on website |
listings/latest |
300 s | Top 100 coins list |
cryptocurrency/map |
86400 s | Ticker -> CMC ID mapping |
historical (OHLCV) |
3600 s | Daily charts |
import { createClient } from 'redis' const redis = createClient({ url: process.env.REDIS_URL }) await redis.connect() async function getCachedQuotes( symbols: string[], ttlSeconds = 60 ): Promise<Record<string, CmcQuote>> { const cacheKey = `cmc:quotes:${symbols.sort().join(',')}` const cached = await redis.get(cacheKey) if (cached) { return JSON.parse(cached) } const fresh = await cmcClient.getQuotes(symbols) await redis.setEx(cacheKey, ttlSeconds, JSON.stringify(fresh)) return fresh } Proper Rate Limit Handling
Errors 1008 (minute limit) and 1009 (hourly limit) require exponential backoff. Initial pause 1 s, multiplier 2, maximum 5 attempts. Error code handling:
function handleCmcError(errorCode: number): void { if ([1008, 1009].includes(errorCode)) { throw new RateLimitError('CoinMarketCap rate limit exceeded') } if (errorCode === 1006) { alertTeam('CMC monthly credits exhausted') } } // Retry with backoff for (let attempt = 1; attempt <= 5; attempt++) { try { return await cmcClient.getQuotes(symbols) } catch (err) { if (err instanceof RateLimitError) { await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, attempt))) } else { throw err } } } Additional error handling tips
- Error 1006 (credits exhausted) — immediately notify the team.
- Error 1007 (invalid key) — check the API key.
- Error 1010 (insufficient rights) — ensure the key has access to the requested endpoint.
Endpoints and Request Costs
| Endpoint | Credits / Request |
|---|---|
/quotes/latest (1 symbol) | 1 |
/quotes/latest (N symbols) | N |
/listings/latest (100 coins) | 1 |
/listings/latest (5000 coins) | 50 |
/info (metadata) | 1 |
/historical (OHLCV) | 1 / data point |
/global-metrics/latest | 1 |
It's more efficient to use the listings endpoint for bulk data. Additional endpoints:
-
/v1/tools/price-conversion— currency conversion. -
/v1/cryptocurrency/category— top coins by category (DeFi, NFT).
Monitoring Credit Usage
Tracking credit balance is critical for projects on the free plan. Current usage is available via /v1/key/info — it returns creditsUsed, creditsLeft, and the update date. We recommend checking every 6 hours and sending a Telegram notification when the remaining credits drop below 20% of the limit.
For high-load projects, separate API keys by environment: one for production, another for staging. This prevents test requests from consuming credits. According to in-article cite, CoinMarketCap documentation, paid plans start at $79/month (Hobbyist, 40,000 credits) and go up to $399/month (Startup, 200,000 credits). Proper caching allows most MVP projects to stay on the free 10,000-credit plan.
What's Included in a Turnkey Integration
When you order a CoinMarketCap API integration, you receive:
- Client development with full TypeScript typing.
- Coin mapping via
/cryptocurrency/mapwith daily caching. - Redis caching setup with optimal TTL for your use case.
- Rate limit handling with exponential backoff and notifications.
- Documentation and team training (up to 2 hours online).
- One month of post-deployment support.
Turnkey Integration Process
- Obtain API key and configure the client with typing.
- Map coins: fetch
/cryptocurrency/mapand cache for a day. - Set up Redis caching with optimal TTLs.
- Implement rate limit handling with backoff.
- Document and hand over to the team.
Contact us to evaluate your project. Order a CoinMarketCap API integration and forget about limits. Savings on API credits can reach 70% — that's hundreds of dollars monthly. Turnkey implementation takes 2–3 days.







