DexPaprika API
Free API for on-chain DEX data and real-time price streaming. 33+ blockchains, 25M+ tokens, 27M+ pools. No API key, no authentication.| Service | Base URL | Purpose |
|---|---|---|
| REST API | https://api.dexpaprika.com | Token data, pools, OHLCV, transactions, search |
| Streaming API | https://streaming.dexpaprika.com | Real-time price updates via SSE (~1s intervals). Full docs |
| CLI | curl -sSL .../install.sh | sh | Terminal tool wrapping the full API. Install: curl -sSL https://raw.githubusercontent.com/coinpaprika/dexpaprika-cli/main/install.sh | sh |
dexpaprika-cli) wraps every endpoint into simple commands with --output json --raw for scripting. REST responses are JSON. Streaming responses are Server-Sent Events.
Core concepts
Network IDs are lowercase chain identifiers:ethereum, solana, bsc, arbitrum, base, polygon, optimism, avalanche, etc. Get the full list from GET /networks.
Token addresses are the on-chain contract addresses (e.g., 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 for WETH on Ethereum, So11111111111111111111111111111111111111112 for SOL on Solana).
Pool addresses are the on-chain liquidity pool contract addresses. Find them via token pools or network pools endpoints.
If you don’t know the network or address for a token, use search first.
Endpoints
Search (start here when you don’t have addresses)
Token price and details
response.summary.price_usd
Example: Get SOL price
Batch token prices
{id, chain, price_usd} objects. Order is not guaranteed.
Top pools on a network
volume_usd, price_usd, transactions, last_price_change_usd_24h, created_at.
Example: Top 5 Ethereum pools by volume
Advanced pool filtering (new)
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number, 1-indexed (default: 1) |
limit | integer | Items per page, 1-100 (default: 50) |
volume_24h_min | number | Min 24h volume in USD |
volume_24h_max | number | Max 24h volume in USD |
txns_24h_min | integer | Min transactions in last 24h |
created_after | integer | UNIX timestamp — only pools created after this |
created_before | integer | UNIX timestamp — only pools created before this |
sort_by | string | volume_24h (default), txns_24h, created_at |
sort_dir | string | asc or desc (default: desc) |
volume_7d_min, volume_30d_min, liquidity_usd_min, liquidity_usd_max exist in the spec but are not functional yet — they return empty results.
All filters combine with AND logic. The response includes page_info with total_items and total_pages.
Example: High-volume Ethereum pools (>$100k daily volume)
Pool details
inversed=true to flip the price ratio (token1/token0 instead of token0/token1).
Pool OHLCV (historical candlesticks)
start is required (ISO 8601 or UNIX timestamp). Optional end (max 1 year from start).
Intervals: 1m, 5m, 10m, 15m, 30m, 1h, 6h, 12h, 24h
Max data points: 366 per request
Example: Last 30 days of daily candles for a pool
Pool transactions
cursor parameter (transaction ID) instead of page numbers.
Each transaction includes: token amounts (amount_0, amount_1), volumes (volume_0, volume_1), USD prices (price_0_usd, price_1_usd), token symbols, sender/recipient, and timestamps.
Pools for a token
address parameter to filter to pools paired with a second specific token. Add reorder=true to make the queried token the primary token in all metrics.
DEXes on a network
dex id to filter pools:
Networks
Platform stats
Streaming API — Real-time prices via SSE
Stream live token prices with ~1 second update intervals. Uses Server-Sent Events (SSE) — works with any HTTP client that supports streaming. For full streaming docs, guides, and code examples see: https://docs.dexpaprika.com/streaming/introduction Base URL:https://streaming.dexpaprika.com (no landing page — only the /stream paths below work)
Stream a single token (GET)
Stream multiple tokens (POST) — recommended for 2+ tokens
Send a JSON array of assets. Single connection, up to 2,000 tokens.chain (network ID), address (token contract), and method (always t_p for token price).
SSE event format
| Field | Meaning |
|---|---|
a | Token address |
c | Chain ID |
p | Price in USD (string for precision — parse as decimal) |
t | Server send timestamp (UNIX seconds) |
t_p | Price event timestamp (UNIX seconds) |
now() - t for network latency, now() - t_p for total price data latency.
Python streaming example
Streaming constraints
- Max 2,000 assets per POST request
- All assets must be valid — one invalid asset cancels the entire stream with HTTP 400
- Global stream limit: 10,000 concurrent streams per server
- Validate assets via REST
/searchbefore streaming - Use multiple smaller requests (100-500 each) rather than one massive request for better load distribution
- Reconnect with exponential backoff on disconnect
Streaming errors
| Status | Meaning |
|---|---|
| 200 | Connected, streaming |
| 400 | Bad params, unsupported chain, asset not found, or one invalid asset in batch |
| 429 | Global stream limit exceeded — retry with backoff |
event: error + data: {"message": "..."}. Handle both HTTP errors (before stream starts) and SSE errors (during streaming).
Constraints and limits
REST API
- Rate limit: 10,000 requests per day
- Batch prices: max 10 tokens per request
- Pagination: max 100 items per page
- OHLCV: max 366 data points per request, max 1 year range
- Transactions: max 100 pages of pagination
- Pagination: all endpoints are 1-indexed (page=0 is silently treated as page=1)
Streaming API
- Max assets per request: 2,000
- Global concurrent streams: 10,000 per server
- All assets must be valid or entire stream is cancelled
Error handling
| Status | Meaning | What to do |
|---|---|---|
| 200 | Success | Parse JSON response |
| 400 | Bad request (invalid params, too many tokens, bad sort field) | Check parameter values and constraints above |
| 404 | Network, token, or pool not found | Verify the network ID and address; use /search to find correct values |
| 410 | Endpoint deprecated (old /pools) | Use /networks/{network}/pools instead |
| 429 | Rate limit exceeded | Back off and retry; consider caching responses |
| 500 | Server error | Retry with backoff |
Common workflows
”What’s the price of X?”
GET /search?query=Xto find the network and token addressGET /networks/{network}/tokens/{address}to get price at.summary.price_usd
”Show me the top pools on Ethereum”
GET /networks/ethereum/pools?limit=10&order_by=volume_usd&sort=desc
”Find new pools with high volume”
GET /networks/{network}/pools/filter?created_after={unix_timestamp}&volume_24h_min=50000&sort_by=created_at&sort_dir=desc
”Get historical price data for a token”
- Find the token’s pools via
GET /networks/{network}/tokens/{address}/pools?order_by=volume_usd&sort=desc&limit=1(the highest-volume pool is the best source) GET /networks/{network}/pools/{pool_address}/ohlcv?start={date}&interval=24h&limit=30
”Compare prices of multiple tokens”
GET /networks/{network}/multi/prices?tokens={addr1},{addr2},{addr3}
”Stream live price updates for a token”
GET https://streaming.dexpaprika.com/stream?method=t_p&chain={network}&address={token_address}
”Build a real-time dashboard tracking multiple tokens”
- Validate tokens exist via REST:
GET /search?query={name}orGET /networks/{network}/tokens/{address} POST https://streaming.dexpaprika.com/streamwith JSON array of{chain, address, method: "t_p"}objects- Parse SSE events, read price from
pfield (string — parse as decimal for precision)
“Monitor a token’s price with alerts”
- Stream the token via GET or POST to
streaming.dexpaprika.com - Compare each incoming
pvalue against your threshold - Reconnect with exponential backoff on disconnect
What this skill does NOT cover
- CoinPaprika centralized exchange data — that’s a different API (
api.coinpaprika.com) - Trading or swapping — DexPaprika is read-only; it does not execute trades