Developers & analysts
Build dashboards, value portfolios and research markets. Start with a real API response, then choose the coverage and history you need.
Explore the APICOINPAPRIKA MARKET DATA INFRASTRUCTURE
From your first API call to enterprise data infrastructure and AI agents. Prices, market intelligence and historical data from one independent source.
Data provider to leading crypto platforms
ONE DATA FOUNDATION. THREE WAYS TO BUILD.
Build dashboards, value portfolios and research markets. Start with a real API response, then choose the coverage and history you need.
Explore the APIPower wallets, oracles and customer-facing platforms. Agree your licence, streaming requirements and SLA with our data team.
Explore EnterpriseGround crypto answers in market data. Connect MCP, discover tools and resolve asset IDs before querying prices.
Connect your agentFOR DEVELOPERS, ANALYSTS & SMALL BUSINESSES
Prices, OHLCV, markets and metadata through one REST API. Use the keyless tier for personal exploration, then scale your coverage and history on a paid plan.
20,000 calls a month, free for personal use. No signup, no card. Read the docs
Sample 8 Oct, 10:33 UTC no Authorization header
{
"id": "btc-bitcoin",
"symbol": "BTC",
"rank": 1,
"last_updated": "2026-10-08T10:33:14Z",
"quotes": {
"USD": {
"price": 82772.24,
"volume_24h": 25739157978,
"market_cap": 1663327588528,
"percent_change_1h": -0.41,
"percent_change_24h": -1.06,
"percent_change_7d": -1.18,
"ath_price": 126173.18
}
}
}Trimmed to 7 of 17 price fields. Coin IDs such as btc-bitcoin work in every endpoint.
Seven data types on one base URL. Each response below came back without a key on . Values are rounded and long lists trimmed.
Price, volume, market cap, change windows from 15 minutes to 7 days, the all-time high and its date, supply and beta. Quote in USD, BTC, ETH or fiat.
GET /v1/tickers/{coin_id}
Used for price tickers, portfolio valuation and alerts.
Tickers endpoint reference{
"id": "btc-bitcoin",
"name": "Bitcoin",
"symbol": "BTC",
"rank": 1,
"total_supply": 20095231,
"max_supply": 21000000,
"beta_value": 1.03061,
"first_data_at": "2010-07-17T00:00:00Z",
"last_updated": "2026-10-08T10:33:14Z",
"quotes": {
"USD": {
"price": 82772.24,
"volume_24h": 25739157978,
"volume_24h_change_24h": -6.29,
"market_cap": 1663327588528,
"market_cap_change_24h": -1.06,
"percent_change_15m": -0.18,
"percent_change_30m": -0.36,
"percent_change_1h": -0.41,
"percent_change_6h": 0.35,
"percent_change_12h": -0.52,
"percent_change_24h": -1.06,
"percent_change_7d": -1.18,
"ath_price": 126173.18,
"ath_date": "2025-10-06T19:00:40Z",
"percent_from_price_ath": -34.38
}
}
}Open, high, low, close, volume and market cap per candle. Without a key you get the last full day and today. Paid plans add history.
GET /v1/coins/{coin_id}/ohlcv/latest
Used for charts, backtests and end-of-day reports.
OHLCV endpoint reference[
{
"time_open": "2026-10-07T00:00:00Z",
"time_close": "2026-10-07T23:59:59Z",
"open": 85561.26,
"high": 85584.86,
"low": 82821.21,
"close": 83283.99,
"volume": 29831754624,
"market_cap": 1673593090527
}
]Price and 24-hour volume per market, its share of total volume, an outlier flag and a trust score. Also available per exchange.
GET /v1/coins/{coin_id}/markets
Used for best-venue lookups, arbitrage checks and exchange dashboards.
Markets endpoint reference[
{
"exchange_id": "binance",
"exchange_name": "Binance",
"pair": "BTC/USDT",
"category": "Spot",
"outlier": false,
"adjusted_volume_24h_share": 5.41,
"quotes": {
"USD": {
"price": 83133.42,
"volume_24h": 1438584059
}
},
"trust_score": "high",
"last_updated": "2026-10-08T09:46:02Z"
}
]Description, tags, team, links, whitepaper, consensus and launch date. People and dated events have their own endpoints.
GET /v1/coins/{coin_id}
Used for coin pages, research tools and token screeners.
Coin profile endpoint reference{
"id": "btc-bitcoin",
"name": "Bitcoin",
"symbol": "BTC",
"rank": 1,
"type": "coin",
"tags": [
{
"id": "proof-of-work",
"name": "Proof Of Work",
"coin_counter": 712
}
],
"team": [
{
"id": "satoshi-nakamoto",
"name": "Satoshi Nakamoto",
"position": "Founder"
}
],
"started_at": "2009-01-03T00:00:00Z",
"proof_type": "Proof of Work",
"hash_algorithm": "SHA256",
"open_source": true
}Pass a platform and an address. The API redirects to that coin's ticker, so tell your client to follow redirects.
GET /v1/contracts/{platform_id}/{address}
Used for wallets and portfolio trackers that start from on-chain addresses.
Contracts endpoint reference{
"id": "usdt-tether",
"name": "Tether",
"symbol": "USDT",
"rank": 3,
"contract_active": true,
"first_data_at": "2015-02-25T00:00:00Z",
"last_updated": "2026-10-08T09:48:14Z",
"quotes": {
"USD": {
"price": 0.9997,
"market_cap": 184024650281
}
}
}Search coins, exchanges, people and tags by name or symbol. Use the returned ID in every other call.
GET /v1/search/?q={query}
Used for search boxes and resolving user input to a coin ID.
Search endpoint reference{
"currencies": [
{
"id": "eth-ethereum",
"name": "Ethereum",
"symbol": "ETH",
"rank": 2,
"is_active": true,
"type": "coin"
},
{
"id": "weth-weth-bsc",
"name": "Binance-Peg Ethereum Token",
"symbol": "WETH",
"rank": 60,
"is_active": true,
"type": "token"
}
],
"exchanges": []
}Crypto to crypto or crypto to fiat at the current rate, with the timestamp of each side of the pair.
GET /v1/price-converter
Used for converters, checkout pages and tax tools.
Price converter endpoint reference{
"base_currency_id": "btc-bitcoin",
"base_currency_name": "Bitcoin",
"base_price_last_updated": "2026-10-08T09:45:18Z",
"quote_currency_id": "usd-us-dollars",
"quote_currency_name": "US Dollars",
"quote_price_last_updated": "2026-10-08T09:46:19Z",
"amount": 1,
"price": 83066.47
}| Data | Request | Without a key |
|---|---|---|
| Ticker for one coin | GET /v1/tickers/{coin_id} | Without a key: Yes |
| Tickers for all coins | GET /v1/tickers | Without a key: Top 2,000 coins |
| Historical ticks | GET /v1/tickers/{coin_id}/historical | Without a key: 1 year daily, 24 hours hourly |
| OHLCV, last full day | GET /v1/coins/{coin_id}/ohlcv/latest | Without a key: Yes |
| OHLCV, today | GET /v1/coins/{coin_id}/ohlcv/today | Without a key: Yes |
| OHLCV, date range | GET /v1/coins/{coin_id}/ohlcv/historical | Without a key: Today only, history from Starter |
| Coin list | GET /v1/coins | Without a key: Yes |
| Coin profile | GET /v1/coins/{coin_id} | Without a key: Yes |
| Markets for a coin | GET /v1/coins/{coin_id}/markets | Without a key: Yes |
| Exchanges for a coin | GET /v1/coins/{coin_id}/exchanges | Without a key: Yes |
| Events for a coin | GET /v1/coins/{coin_id}/events | Without a key: Yes |
| Person profile | GET /v1/people/{person_id} | Without a key: Yes |
| Tags | GET /v1/tags | Without a key: Yes |
| Tag details | GET /v1/tags/{tag_id} | Without a key: Yes |
| Exchanges | GET /v1/exchanges | Without a key: Yes |
| Exchange details | GET /v1/exchanges/{exchange_id} | Without a key: Yes |
| Markets on an exchange | GET /v1/exchanges/{exchange_id}/markets | Without a key: Yes |
| Contract platforms | GET /v1/contracts | Without a key: Yes |
| Contracts on a platform | GET /v1/contracts/{platform_id} | Without a key: Yes |
| Coin by contract address | GET /v1/contracts/{platform_id}/{address} | Without a key: Yes, as a redirect |
| History by contract address | GET /v1/contracts/{platform_id}/{address}/historical | Without a key: 1 year daily, as a redirect |
| Search | GET /v1/search/?q={query} | Without a key: Yes |
| Price converter | GET /v1/price-converter | Without a key: Yes |
| Global market stats | GET /v1/global | Without a key: Yes |
| Coin ID changelog | GET /v1/changelog/ids | Without a key: No, from Starter |
| Coin ID mappings | GET /v1/coins/mappings | Without a key: No, from Business |
| API key info | GET /v1/key/info | Without a key: No, paid plans |
JSON over HTTPS, callable from a browser. Coin IDs such as btc-bitcoin are unambiguous where ticker symbols are not.
Every endpoint has a command, with JSON output for scripts. Install in one line.
"""Python 3.10+. Run: python ticker.py btc-bitcoin. No third-party dependencies."""
import json
import os
import re
import sys
import time
from urllib.request import Request, urlopen
from urllib.error import HTTPError
def ticker(coin="btc-bitcoin"):
if not re.fullmatch(r"[a-z0-9-]+", coin):
raise ValueError("Use a CoinPaprika coin ID, such as btc-bitcoin.")
key = os.getenv("COINPAPRIKA_API_KEY")
base = "https://api-pro.coinpaprika.com/v1" if key else "https://api.coinpaprika.com/v1"
request = Request(f"{base}/tickers/{coin}", headers={"Accept": "application/json", "User-Agent": "CoinPaprika-Developer-Example/1.0", **({"Authorization": key} if key else {})})
for attempt in range(3):
try:
with urlopen(request, timeout=15) as response:
data = json.load(response)
price = data.get("quotes", {}).get("USD", {}).get("price")
if not isinstance(price, (float, int)) or not data.get("last_updated"):
raise ValueError("Price or source timestamp missing.")
return {"id": data["id"], "price_usd": price, "source_updated_at": data["last_updated"]}
except HTTPError as error:
if error.code == 429 and attempt < 2:
retry = error.headers.get("Retry-After", "")
time.sleep(min(int(retry) if retry.isdigit() else 2 ** attempt, 60))
continue
raise RuntimeError(f"HTTP {error.code}: check your coin ID, plan and service status.") from None
if __name__ == "__main__":
try:
print(json.dumps(ticker(sys.argv[1] if len(sys.argv) > 1 else "btc-bitcoin"), indent=2))
except Exception as error:
print(str(error), file=sys.stderr)
sys.exit(1)
# Set paid keys in a server environment. Cache according to your plan's refresh interval.
// Node.js 20+. Run: node ticker.mjs btc-bitcoin
// Paid access: set COINPAPRIKA_API_KEY in your server environment.
const coin = process.argv[2] || 'btc-bitcoin';
if (!/^[a-z0-9-]+$/.test(coin)) throw new Error('Use a CoinPaprika coin ID, such as btc-bitcoin.');
const key = process.env.COINPAPRIKA_API_KEY;
const base = key ? 'https://api-pro.coinpaprika.com/v1' : 'https://api.coinpaprika.com/v1';
async function ticker() {
for (let attempt = 0; attempt < 3; attempt++) {
const response = await fetch(`${base}/tickers/${coin}`, {
headers: key ? { Authorization: key } : {},
signal: AbortSignal.timeout(15000)
});
if (response.status === 429 && attempt < 2) {
const retry = response.headers.get('Retry-After');
const seconds = retry && /^\d+$/.test(retry) ? Number(retry) : 2 ** attempt;
await new Promise(resolve => setTimeout(resolve, Math.min(seconds, 60) * 1000));
continue;
}
if (!response.ok) throw new Error(`HTTP ${response.status}: check your coin ID, plan and service status.`);
const data = await response.json();
const price = data.quotes?.USD?.price;
if (!Number.isFinite(price) || !data.last_updated) throw new Error('Price or source timestamp missing.');
return { id: data.id, price_usd: price, source_updated_at: data.last_updated };
}
}
try { console.log(JSON.stringify(await ticker(), null, 2)); }
catch (error) { console.error(error.message); process.exitCode = 1; }
// Cache responses in your application according to the plan refresh interval.
// Do not interpret a cached response as a real-time execution price.
Each script waits at most 15 seconds, retries a 429 up to twice and returns the price with its last_updated time. Set COINPAPRIKA_API_KEY in your server environment and it switches to the paid host.
Need on-chain DEX data? DexPaprika, our sister API, reads pools and swaps from 36 chains and 244 DEXes. DexPaprika API docs
WHAT WILL YOU BUILD?
Value holdings with tickers, stable asset IDs and contract lookups.
Explore tickersStudy price, volume and market-cap history. Match your plan to the required period and resolution.
Explore candlesCombine global market statistics, exchange coverage and metadata for internal reporting.
Find a planAgree display and redistribution rights before shipping data to your users.
Explore licensingA dated response snapshot from the keyless API. Run a live request to refresh prices; the response timestamp identifies its freshness.
| Coin | Price | 24h |
|---|---|---|
| Bitcoin BTC | $82,772.24 | −1.06% |
| Ethereum ETH | $2,557.82 | −0.68% |
| Tether USDT | $0.9998 | −0.04% |
| BNB BNB | $768.37 | +0.16% |
| XRP XRP | $1.41 | −2.71% |
| USDC USDC | $1.00 | 0.00% |
| Solana SOL | $114.66 | −2.27% |
| TRON TRX | $0.3361 | +0.77% |
| Lido Staked Ether STETH | $2,560.80 | −0.58% |
| Zcash ZEC | $1,219.70 | −5.79% |
Snapshot from . Sparklines use 30 daily prices from /v1/tickers/{coin_id}/historical, one more request per coin. Green and red mark the direction of change.
Press Run live to refresh this table from your browser.
INDEPENDENT API REVIEWS
The hosted MCP server gives an agent the same data as the REST API through 31 tools. 27 need no key, and their calls count against the same 20,000 a month per IP address.
Paste this address wherever a client asks for a remote MCP server, or use a button.
What is Bitcoin's price, and how far is it below its all-time high?
resolveId({ type: "coin", query: "bitcoin" , rationale: "Retrieve market data for the requested crypto analysis." })
getTickersById({ coinId: "btc-bitcoin" , rationale: "Retrieve market data for the requested crypto analysis." })Bitcoin is $82,772.24, down 1.06% in 24 hours. That is 34.38% below its all-time high of $126,173.18, set on 6 October 2025.
Values from the 8 Oct 2026, 10:33 UTC snapshot. Tool examples include the required rationale argument. Setup for Claude Desktop, Cursor, VS Code and other clients, all 31 tools and more examples are on the agents page.
All 31 tools and setupAgent skillClaude Code pluginllms.txtThis page as MarkdownFull OpenAPI specification
Each price is a volume-weighted average across the markets we track. It is never a quote copied from one exchange.
"outlier": true.trust_score.Read the full methodology Independent study on SEC.gov: grade A
/v1/coins/v1/exchangesCounted from the live API on . A coin counts as active only while it has current market data.
Choose by monthly calls, history and candle resolution. Enterprise adds negotiated distribution rights, streaming and a contractual SLA.
Personal exploration
$0/month
First commercial project
$99/month
Research & growing teams
$199/month
Advanced analytics
$799/month
Deep historical analysis
$1,499/month
Redistribution rights, unlimited monthly calls, WebSocket streaming and a 99.9% availability SLA. Scoped to your product, under contract.
| Plan | Monthly price | Calls/month | Assets | Daily price history | OHLCV history | Intervals | Updates within | Licence |
|---|---|---|---|---|---|---|---|---|
| Free | $0 | 20,000 per IP | 2,000 | 1 year | latest full day | 24h | 10 min | personal |
| Starter | $99 | 400,000 | all available | 5 years | 1 month | 24h | 3 min | internal commercial |
| Pro | $199 | 1,000,000 | all available | full available history | 3 months | 24h | 3 min | internal commercial |
| Business | $799 | 5,000,000 | all available | full available history | 1 year | 1h, 6h, 12h, 24h | 3 min | internal commercial |
| Ultimate | $1,499 | 10,000,000 | all available | full available history | full available history | 1h, 6h, 12h, 24h | 3 min | internal commercial |
| Enterprise | Custom quote | Unlimited monthly calls | all available | full available history | full available history | 5m, 15m, 30m, 1h, 6h, 12h, 24h | 1 min | negotiated redistribution |
Prices in US dollars. Keyless is the Free plan in the docs. Price history is daily price, volume and market cap. Intraday price history: hourly for the last 24 hours without a key; hourly for 1 month and 5-minute for 1 week on Starter; hourly for 3 months and 5-minute for 1 month on Pro; 1 year on Business; full on Ultimate and Enterprise. Every plan requires a “Powered by CoinPaprika” credit under the API terms. Compare every plan feature or read pricing as Markdown.
429 or 402 with a message that names the limit. Data outside your plan answers 402. Nothing is billed automatically.ratelimit-limit and ratelimit-reset on every response. ratelimit-remaining is approximate.age header shows how old one is. Live statusFor products that pass CoinPaprika data on to their own users, or need it faster than polling allows.
The questions developers ask first. Anything else is in the docs.
No. curl https://api.coinpaprika.com/v1/tickers/btc-bitcoin returns JSON with no key, no account and no card. Keyless access covers 20,000 calls a month per IP address. A key is only needed on paid plans.
Yes, for personal use. Keyless access is free for 20,000 calls a month per IP address, with one year of daily price history and prices updated within 10 minutes. Commercial use starts with Starter at $99 a month.
One HTTP request is one call, whatever the endpoint and however much data comes back. There are no credits and no multipliers.
10 requests a second per IP address, plus a monthly quota: 20,000 calls keyless, 400,000 on Starter, 1,000,000 on Pro, 5,000,000 on Business and 10,000,000 on Ultimate. At a limit the API answers 429 or 402 with a message that names it. Data outside your plan answers 402. Nothing is billed automatically.
No. Keyless access is licensed for personal use and requires a “Powered by CoinPaprika” credit. Commercial use inside your company starts with Starter at $99 a month, and redistribution to your own customers needs Enterprise.
Published plan refresh intervals are up to 10 minutes on Free, up to 3 minutes on paid self-serve plans, and up to 1 minute on Enterprise. Use each response’s last_updated timestamp to assess source freshness. Fetch time and source update time are different.
Bitcoin daily prices start on 17 July 2010. Each asset has its own first_data_at timestamp. Free includes 1 year of daily price history, Starter includes 5 years, and Pro through Enterprise include full available daily history. OHLCV has separate plan limits: Free: latest full day; Starter: 1 month; Pro: 3 months; Business: 1 year; Ultimate: full available history; Enterprise: full available history.
Yes, on the Enterprise plan. Other plans poll the REST API. For on-chain prices, DexPaprika streams over SSE on every tier.
Yes. Responses allow any origin, so a front-end can call the keyless API directly.
Pick a plan, copy the key from your API panel, change the host to api-pro.coinpaprika.com and send the key as the whole value of the Authorization header, with no Bearer prefix. Paths and response shapes stay the same.
Yes. Connect the hosted MCP server at https://mcp.coinpaprika.com/streamable-http. It has 31 tools: 27 work with no key, and 4 need a paid plan and the local server. Calls count against the same 20,000 a month per IP address. Setup for each client is on the agents page.
Yes. In “Aggregate Confusion in Crypto Market Data” (Schwenkler, Shah and Yang, October 2025), a study of eight crypto data providers hosted on SEC.gov, CoinPaprika received an overall grade of A, with 4.5% of its daily data discarded as unreliable. CoinMarketCap and Santiment also received an A, and CoinGecko a C. Monthly grades vary, and this is academic research, not an SEC grade or endorsement.
It suits products that need broad market data at a fixed price per call: portfolio trackers, dashboards, research tools, tax software and AI agents. It is a poor fit for high-frequency trading, because prices update within 1 to 10 minutes depending on the plan, and for commercial products on the free tier, which is licensed for personal use. For DEX pools and on-chain swaps, use DexPaprika.
Paste one line into a terminal. No account, key or card.