Migrating from the CoinCap API to CoinPaprika

Mateusz Sroka

(about 1 month ago)

6 min read

Share:

CoinCap retired its free, keyless v2 API (the host no longer resolves) and v3 now requires an account and key. If you want free and keyless, this guide maps every endpoint to its CoinPaprika equivalent, with working code.

Migrating from the CoinCap API to CoinPaprika

If your app suddenly started throwing connection errors against api.coincap.io, you're not debugging your code: CoinCap retired its free v2 API and that host no longer resolves. To be clear, CoinCap itself is alive and well. The current CoinCap API 3.0 (at rest.coincap.io, docs at pro.coincap.io) is a capable product. It just runs on an account and an API key now. So if you were using CoinCap specifically because it was free and needed no signup, this guide moves that workload to CoinPaprika, which still needs neither, mapping each endpoint with working examples you can run right now.

I keep a few hobby trackers wired to "free, no-signup" crypto APIs, and CoinCap's v2 was one of them. When api.coincap.io started returning nothing, I had two choices: sign up for a v3 key, or move to something still free and keyless. This is the second path. The fix was a base-URL swap plus a couple of field renames. Here's the whole map.

What happened to CoinCap

Not a shutdown of CoinCap, but a change in how you access it:

  1. The free, keyless v2 API is gone.api.coincap.io doesn't resolve anymore (a DNS lookup returns NXDOMAIN), so any https://api.coincap.io/v2/... call fails to connect. This is the API a lot of tutorials and side projects were built on.
  2. v3 is a paid, key-required product. CoinCap API 3.0 lives at https://rest.coincap.io/v3 and returns 401 Unauthorized without a key. CoinCap moved to an account-gated model (including a prepaid credit system) in 2025. It's a capable API; it's just no longer the free-and-no-signup option it used to be. This is a business-model change, not a service failure.

So the question isn't "is CoinCap dead" (it isn't). It's "do I want to create an account and manage a key, or stay free and keyless." If it's the latter, CoinPaprika's public REST API (https://api.coinpaprika.com/v1) still needs neither, which is why it's a clean landing spot.


The two changes that apply to every call

Authentication. CoinCap v3 wants Authorization: Bearer <key>. CoinPaprika's free tier wants nothing. You delete the auth code. (Paid CoinPaprika plans use api-pro.coinpaprika.com with a bare key in the Authorization header, no Bearer prefix, but you only touch that if you need higher limits or deep history.)

Response shape. This is the bigger porting task. CoinCap wrapped everything in a { "data": ..., "timestamp": ... } envelope and returned every number as a string ("priceUsd": "67000.12"). CoinPaprika returns the object or array directly, with real numbers, and nests price fields under quotes.USD. So two changes in your parsing code: stop unwrapping .data, and stop calling parseFloat on everything.


Endpoint mapping

What you needCoinCap v2 (dead)CoinPaprika
All assets / prices/v2/assets/v1/tickers
One asset/v2/assets/bitcoin/v1/tickers/btc-bitcoin
Price history/v2/assets/bitcoin/history?interval=d1/v1/tickers/{id}/historical (paid) or /v1/coins/{id}/ohlcv/*
Markets for an asset/v2/assets/bitcoin/markets/v1/coins/{id}/markets
Exchange rates / convert/v2/ratesquotes= parameter, or /v1/price-converter
Exchanges/v2/exchanges/v1/exchanges
Real-time price feedwss://ws.coincap.io/pricesDexPaprika SSE (see below)

One ID note: CoinCap used plain slugs like bitcoin. CoinPaprika uses btc-bitcoin (symbol + name) because many tokens share a symbol. Resolve once and cache:

curl "https://api.coinpaprika.com/v1/search/?q=bitcoin&c=currencies&limit=1"

That returns btc-bitcoin as the first result.


Migration by example

All assets

CoinCap: GET https://api.coincap.io/v2/assets?limit=10 (returned {data: [...], timestamp}). CoinPaprika drops the envelope and the key:

curl "https://api.coinpaprika.com/v1/tickers"

You get an array of coins, each with price, volume, market cap, and percent-change fields. Where CoinCap had asset.priceUsd (a string at the top level), CoinPaprika has coin.quotes.USD.price (a number).

A single asset

curl "https://api.coinpaprika.com/v1/tickers/btc-bitcoin"
{
  "id": "btc-bitcoin",
  "name": "Bitcoin",
  "symbol": "BTC",
  "rank": 1,
  "total_supply": 19700000,
  "quotes": {
    "USD": {
      "price": 64936.43,
      "volume_24h": 22989717518,
      "market_cap": 1314398076140,
      "percent_change_24h": -1.02
    }
  }
}

Field translation from CoinCap: priceUsd becomes quotes.USD.price, marketCapUsd becomes quotes.USD.market_cap, volumeUsd24Hr becomes quotes.USD.volume_24h, changePercent24Hr becomes quotes.USD.percent_change_24h, and supply becomes total_supply. All numbers now, not strings.

Multiple fiat currencies

CoinCap made you hit /v2/rates and do the math. CoinPaprika converts in the same call:

curl "https://api.coinpaprika.com/v1/tickers/btc-bitcoin?quotes=USD,EUR,BTC"

Price history

CoinCap's /v2/assets/bitcoin/history?interval=d1 maps to CoinPaprika's OHLCV. The most recent day is free:

curl "https://api.coinpaprika.com/v1/coins/btc-bitcoin/ohlcv/latest"

Deeper history (/v1/coins/{id}/ohlcv/historical?start=...) is on a paid plan. CoinCap's deep history was free, so this is the one spot where the free tiers don't line up one-to-one. If you need years of daily candles, that's a paid CoinPaprika plan.

Exchanges

curl "https://api.coinpaprika.com/v1/exchanges"

Returns the full list of tracked exchanges, replacing /v2/exchanges.


Replacing the WebSocket price feed

CoinCap's free, keyless wss://ws.coincap.io/prices socket was the easiest way to get pushed price updates. For a free real-time feed today, use DexPaprika's streaming endpoint, which pushes prices over Server-Sent Events (SSE) with no key:

curl -N "https://streaming.dexpaprika.com/sse/prices?method=token_price&chain=ethereum&address=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"

SSE is simpler than WebSocket for a price feed (one HTTP connection, the browser's EventSource auto-reconnects). The catch worth knowing: DexPaprika streams on-chain DEX prices by token address, so it's the right fit for DeFi and on-chain assets rather than aggregated exchange-wide averages. If you're weighing the two protocols for your rebuild, we compared them in Implementing SSE and WebSocket crypto price feeds with DexPaprika, and the full reference lives in the streaming docs.


Gotchas before you ship

  • IDs change:bitcoin becomes btc-bitcoin. Resolve via /v1/search/ once and cache the mapping.
  • No more envelope: stop reading response.data; CoinPaprika returns the payload directly.
  • Numbers are numbers: drop the parseFloat/Number() calls you needed for CoinCap's string values. Prices live under quotes.USD.
  • Deep history is paid on CoinPaprika; CoinCap's was free. Check the API plans if you need long historical ranges.

FAQ

Is CoinCap dead?

No. CoinCap API 3.0 is live at rest.coincap.io (docs at pro.coincap.io) and is a capable product. What went away is the free, keyless v2: api.coincap.io no longer resolves. So existing v2 integrations break, but CoinCap itself is still running, now on a paid, key-based model.

Does CoinCap v3 work for free?

v3 requires an account and an API key (it returns 401 Unauthorized without one) and runs on a credit model. So it's not free-and-keyless the way v2 was. If that property is what you need, that's the reason to look at CoinPaprika.

Do I need a key for CoinPaprika?

Not for the free tier. api.coinpaprika.com/v1 works with no key and no signup. You only authenticate on the Pro tier for higher limits or deep history.

What's the hardest part of the migration?

The response shape. CoinCap wrapped data in a {data, timestamp} envelope with string numbers; CoinPaprika returns the payload directly with real numbers nested under quotes.USD. Update your parser, not just your URLs.

How do I replace CoinCap's WebSocket price stream?

Use DexPaprika's free SSE streaming endpoint for real-time on-chain prices. It needs no key and the browser's EventSource handles reconnection.


Where to go next

Related articles

Latest articles

Coinpaprika education

Discover practical guides, definitions, and deep dives to grow your crypto knowledge.

Cryptocurrencies are highly volatile and involve significant risk. You may lose part or all of your investment.

All information on Coinpaprika is provided for informational purposes only and does not constitute financial or investment advice. Always conduct your own research (DYOR) and consult a qualified financial advisor before making investment decisions.

Coinpaprika is not liable for any losses resulting from the use of this information.

Go back to Education