How to get a token price by contract address (any chain)

Mateusz Sroka

(about 1 month ago)

6 min read

Share:

One GET request turns any contract address into a live USD price with liquidity, volume, and buy/sell flow attached, on 35+ chains. Plus the CoinPaprika cross-check route and a batched endpoint for watchlists.

How to get a token price by contract address (any chain)

To get the live USD price of any token from its contract address, call DexPaprika's token endpoint: GET https://api.dexpaprika.com/networks/{chain}/tokens/{address}. It returns the current price plus liquidity, volume, and buy/sell counts for any of 32M+ tokens the API tracks across 35+ chains, and it runs with a plain curl, no signup step. If the token is also listed on centralized exchanges, CoinPaprika's contracts endpoint resolves the same address to an exchange-aggregated ticker, which makes a nice independent cross-check.

Both routes below are copy-paste ready, and every command in this guide was executed against the live APIs the day it was written.

Why you should look up by address, not symbol

Symbols are a suggestion, not an identity. Anyone can deploy a token named USDC or PEPE in thirty seconds, and thousands of people have: search any DEX aggregator for a popular ticker and you'll wade through pages of copies, some of them built specifically to be mistaken for the original. The contract address is the only unambiguous name a token has. Wallets, block explorers, and DEXes all treat the address as ground truth, and so should your code. Price-by-address is not a workaround; it's the correct primitive.


One call, one token

Wrapped Ether on Ethereum:

curl "https://api.dexpaprika.com/networks/ethereum/tokens/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"

The response is a full token object; the price lives in summary.price_usd (trimmed here):

{
  "id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
  "name": "Wrapped Ether",
  "symbol": "WETH",
  "chain": "ethereum",
  "decimals": 18,
  "summary": {
    "price_usd": 1740.21,
    "liquidity_usd": 533483807.04,
    "pools": 5351,
    "24h": {
      "volume_usd": 229484631.49,
      "buys": 72314,
      "sells": 71655
    }
  }
}

You asked for a price and got a health report with it: total liquidity backing that price, how many pools it trades in, and the 24-hour buy/sell split. For anything decision-grade (bots, alerts, screening), those context fields matter as much as the number itself, because a price backed by $500 of liquidity isn't really a price.

"Any chain" means the same shape everywhere: swap ethereum for solana and an address like So11111111111111111111111111111111111111112 (wrapped SOL), or any of the other networks; GET https://api.dexpaprika.com/networks lists every supported chain with the ID the other endpoints expect (36 as I write this, and the list keeps growing).


Several tokens in one call

For a watchlist, don't loop the detail endpoint. There's a batched price endpoint that takes up to 10 addresses at once:

curl "https://api.dexpaprika.com/networks/ethereum/multi/prices?tokens=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xdac17f958d2ee523a2206206994597c13d831ec7"
[
  {
    "chain": "ethereum",
    "id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
    "price_usd": 1740.61
  },
  {
    "chain": "ethereum",
    "id": "0xdac17f958d2ee523a2206206994597c13d831ec7",
    "price_usd": 0.9996
  }
]

One request, one price per address, nothing else. Past 10 tokens, batch your calls. And if what you actually want is a continuously updating watchlist, skip polling entirely and open one SSE stream with up to 25 price subscriptions: the streaming docs cover it, and SSE explained for crypto apps walks through the client side.


Don't have the address? Resolve it once

When all you have is a ticker, search first, then cache the address (the search endpoint takes a single word, so query the symbol rather than the full name):

curl "https://api.dexpaprika.com/search?query=weth"

The tokens array in the response carries each match's chain, address (in the id field), price, and liquidity, which is usually enough to spot the real one: the original carries nine figures of liquidity_usd, the copycats carry pocket change. Do this lookup once per token, store the address, and never trust a symbol again.


The cross-check: same address on CoinPaprika

If the token is established enough to trade on centralized exchanges, CoinPaprika's contracts endpoint turns the same address into a full exchange-aggregated ticker:

curl -L "https://api.coinpaprika.com/v1/contracts/eth-ethereum/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"

That redirects to the ticker for WETH (quotes.USD.price, volume, market data from 350+ exchanges; 306 contract platforms are supported, listed at /v1/contracts). When I ran both routes while writing this, DexPaprika's pool-derived price and CoinPaprika's exchange-aggregated one landed within a tenth of a percent of each other (the spread breathes with the market, but it stays tight on liquid tokens), which is exactly what you want from two independent methodologies. When they *don't* agree, that spread is information: thin on-chain liquidity, a depeg in progress, or a token that trades very differently on-chain versus off.


Where the DEX price comes from

DexPaprika's token price is computed from actual on-chain trades, volume-weighted across the pools the token trades in and updated continuously as swaps land, with smoothing so one weird trade in a thin pool doesn't spike the number. The June 2026 product update covers the latest rework of that pipeline. If you want the deeper story on what "real-time price" actually means across different data sources, we wrote a whole guide on that.


FAQ

Do I need an API key to get a token price by address?

No signup is needed for the calls in this guide; they run as-is. The API reference carries the current access details and limits.

Which chains are supported?

35+ networks including Ethereum, Solana, Base, BSC, and Arbitrum, with new ones added regularly. GET /networks returns the current list with the chain IDs the other endpoints expect.

What if the token isn't found?

A 404 usually means the wrong chain (the same address can exist on several EVM chains but only be a real token on one) or a token with no indexed DEX activity. Check the chain ID first; it's the most common mistake.

Can I get prices for multiple tokens at once?

Yes: /networks/{chain}/multi/prices takes up to 10 comma-separated addresses. For live watchlists beyond that, one SSE stream carries up to 25 price subscriptions.

How fresh is the price?

It updates continuously from trade flow as swaps confirm on-chain. For push updates instead of polling, use the SSE price stream.

How do I find a token's contract address?

Search by symbol via /search?query=, then verify against the project's official site or a block explorer before trusting it. Cache the address; resolve once, use forever.


Key takeaways

  • The contract address is the only unambiguous token identifier; symbol lookup is how people end up pricing a counterfeit. Resolve the address once, then always query by it.
  • One endpoint covers every supported chain (35+ and growing) with an identical response shape, so multi-chain support in your code is a parameter, not a rewrite.
  • The price arrives with its own credibility check: liquidity, pool count, and buy/sell flow in the same response.
  • Two independent price sources agree tightly on liquid tokens (under a tenth of a percent when we measured), so divergence between the DEX and exchange routes is a signal worth alerting on, not an error.
  • Batch up to 10 addresses per REST call; past that, streaming beats polling.

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