Skip to main content

DexPaprika API — Verified Reference (2026-03-02)

Every claim in this document was verified against the live API with 72 tests, 72 pass, 0 failures.

Base URLs

ServiceURLNotes
REST APIhttps://api.dexpaprika.comJSON responses, no auth
Streaming APIhttps://streaming.dexpaprika.comSSE only on /stream path. Bare URL returns {"message":"Not Found"} (404)
Streaming docshttps://docs.dexpaprika.com/streaming/introductionHuman-readable docs

Pagination (applies to ALL list endpoints)

  • Pages are 1-indexed. page=0 is silently treated as page=1.
  • Max limit is 100. Values >100 return HTTP 400 (rejected, not capped).
  • Exception: /pools/filter uses wrapper key results instead of pools.
All paginated responses include:
"page_info": {
  "limit": 10,
  "page": 1,
  "total_items": 7838,
  "total_pages": 784
}

Endpoints

GET /networks

Response: Flat array (no wrapper, no page_info).
[
  {"id": "ethereum", "display_name": "Ethereum"},
  {"id": "solana", "display_name": "Solana"}
]
  • 33 networks as of 2026-03-02
  • Each item: 2 keys — id (string), display_name (string)
  • Common IDs: ethereum, solana, bsc, arbitrum, base, polygon, optimism, avalanche

GET /stats

Response: Flat object (no wrapper).
{
  "chains": 33,
  "factories": 205,
  "pools": 28185674,
  "tokens": 25916463
}
  • 4 keys: chains, factories, pools, tokens
  • Key is factories, NOT dexes — this is the DEX/factory count

GET /search?query=

Response: Object with 3 array keys.
{
  "tokens": [...],
  "pools": [...],
  "dexes": [...]
}
  • Case-insensitive
  • Empty query → 400
  • Token result shape (15 keys):
KeyTypeNotes
idstringContract address
namestring
symbolstring
chainstringNetwork ID
typestringOften empty
statusstringe.g. "visible"
decimalsnumber
total_supplynumber
descriptionstring
websitestring
explorerstring
price_usdnumber
liquidity_usdnumber
volume_usdnumber
price_usd_changenumber
  • Pool result shape includes: id, dex_id, dex_name, chain, created_at_block_number, created_at, volume_usd, transactions, price_usd, last_price_change_usd_5m (nullable), last_price_change_usd_1h (nullable), last_price_change_usd_24h (nullable), tokens (array)
NOTE: Search token shape is DIFFERENT from token details shape. Search tokens do NOT have has_image, added_at, price_stats, summary, or last_updated.

GET /networks//tokens/

Response: Flat object (no wrapper). Top-level keys (13 total):
KeyTypeNotes
idstringContract address
namestring
symbolstring
chainstring
decimalsnumber
total_supplynumber
descriptionstring
websitestring
has_imageboolean
added_atstringISO 8601
price_statsobjectSee below
summaryobjectSee below
last_updatedstringISO 8601
price_stats (4 keys):
KeyType
high_24hnumber
low_24hnumber
athnumber
ath_datestring
summary (13 keys):
KeyType
chainstring
idstring
price_usdnumber
fdvnumber
liquidity_usdnumber
poolsnumber
24hobject
6hobject
1hobject
30mobject
15mobject
5mobject
1mobject
Price is at: response.summary.price_usd summary.main_pool does NOT exist. There is no main_pool field anywhere in this response. Each time window object (8 keys, same shape for all intervals):
KeyTypeNotes
volumenumberVolume in token units
volume_usdnumberVolume in USD
sellsnumberPlural with ‘s’
buysnumberPlural with ‘s’
txnsnumberTotal transactions
buy_usdnumber
sell_usdnumber
last_price_usd_changenumberPercentage
CRITICAL: Fields are sells and buys (plural). NOT sell/buy (singular). The singular forms do not exist.

GET /networks//multi/prices?tokens=,

Response: Flat array (no wrapper, no page_info).
[
  {"chain": "ethereum", "id": "0xc02a...", "price_usd": 1975.75},
  {"chain": "ethereum", "id": "0xa0b8...", "price_usd": 1.0001}
]
  • Each item: 3 keys — chain, id, price_usd
  • Order is NOT guaranteed
  • Max 10 tokens. 11+ returns 400 with {"message":"max 10 tokens allowed."}
  • Invalid/unknown tokens are silently omitted (not an error)
  • All-invalid tokens → HTTP 200 with empty array []
  • Comma-separated addresses in a single tokens param

GET /networks//pools

Response: {pools: [...], page_info: {...}} Parameters:
ParamValuesDefault
page1-indexed integer1
limit1-10010
order_byvolume_usd, price_usd, transactions, last_price_change_usd_24h, created_atvolume_usd
sortasc, descdesc
Pool item keys (14 total):
KeyTypeNotes
idstringPool contract address
chainstring
dex_idstring
dex_namestring
feenumber
created_atstringISO 8601
created_at_block_numbernumber
volume_usdnumber
transactionsnumber
price_usdnumber
last_price_change_usd_5mnumber/nullCan be null
last_price_change_usd_1hnumber/nullCan be null
last_price_change_usd_24hnumber/nullCan be null
tokensarrayToken summary objects

GET /networks//pools/filter

Response: {results: [...], page_info: {...}} Note: wrapper key is results, not pools. Parameters:
ParamTypeDescriptionDefault
pageinteger1-indexed1
limitinteger1-10050
volume_24h_minnumberMin 24h volume USD
volume_24h_maxnumberMax 24h volume USD
txns_24h_minintegerMin transactions 24h
created_afterintegerUNIX timestamp
created_beforeintegerUNIX timestamp
sort_bystringvolume_24h, txns_24h, created_atvolume_24h
sort_dirstringasc, descdesc
Non-functional params (accepted but return 0 results): volume_7d_min, volume_30d_min, liquidity_usd_min, liquidity_usd_max All filters combine with AND logic. Filter result item keys (7 total):
KeyTypeNotes
addressstringNot id — different from pool listing
chainstring
dex_idstring
volume_usd_24hnumberNot volume_usd — different name
liquidity_usdnumber
txns_24hnumberNot transactions — different name
created_atstringISO 8601
IMPORTANT field name differences from /pools listing:
/pools listing/pools/filter results
idaddress
volume_usdvolume_usd_24h
transactionstxns_24h

GET /networks//pools/

Response: Flat object (no wrapper). Parameters: inversed (boolean, default: false) — flips the token pair price ratio. Top-level keys (20 total):
KeyType
idstring
chainstring
dex_idstring
dex_namestring
factory_idstring
feenumber
created_atstring
created_at_block_numbernumber
last_pricenumber
last_price_usdnumber
price_timestring
price_statsobject
token_reservesobject
tokensarray
24hobject
6hobject
1hobject
30mobject
15mobject
5mobject

GET /networks//pools//ohlcv

Response: Flat array (no wrapper). Parameters:
ParamTypeRequiredNotes
startstringYesISO 8601 or UNIX timestamp
endstringNoMax 1 year from start
limitintegerNoMax 366. Values >366 return 400.
intervalstringNo1m, 5m, 10m, 15m, 30m, 1h, 6h, 12h, 24h
inversedbooleanNoFlip price ratio
Missing start → 400. Candle keys (7 total):
KeyType
time_openstring
time_closestring
opennumber
highnumber
lownumber
closenumber
volumenumber

GET /networks//pools//transactions

Response: {transactions: [...], page_info: {...}} Parameters:
ParamDefaultNotes
page11-indexed
limit20Max 100
cursorTransaction ID for deep pagination
Max 100 pages via page param. Use cursor for deeper. Transaction item keys (24 total):
KeyType
idstring
log_indexnumber
transaction_indexnumber
factory_idstring
pool_idstring
chainstring
canonical_chainstring
senderstring
recipientstring
token_0string
token_0_symbolstring
token_1string
token_1_symbolstring
amount_0number
amount_1number
volume_0number
volume_1number
price_0number
price_0_usdnumber
price_1number
price_1_usdnumber
created_at_block_numbernumber
created_at_block_hashstring
created_atstring

GET /networks//tokens//pools

Response: {pools: [...], page_info: {...}} Parameters:
ParamDefaultNotes
page11-indexed
limit10
order_byvolume_usdSame options as pool listing
sortdesc
addressFilter to pools paired with this second token
reorderfalseMake queried token primary in all metrics

GET /networks//dexes

Response: {dexes: [...], page_info: {...}} Note: page_info exists but may show total_items: 0 (appears buggy). The limit param may be ignored — all DEXes are returned. DEX item keys (4 total):
KeyType
dex_idstring
dex_namestring
chainstring
protocolstring

GET /networks//dexes//pools

Response: {pools: [...], page_info: {...}} Same pool item shape as /networks/{network}/pools.

Streaming API

GET /stream (single token)

GET https://streaming.dexpaprika.com/stream?method=t_p&chain={network}&address={token_address}

POST /stream (multiple tokens, up to 2,000)

POST https://streaming.dexpaprika.com/stream
Content-Type: application/json
Accept: text/event-stream

[
  {"chain": "ethereum", "address": "0xc02a...", "method": "t_p"},
  {"chain": "solana", "address": "So111...", "method": "t_p"}
]

SSE event format

data: {"a":"0xc02a...","c":"ethereum","p":"2060.04","t":1772466306,"t_p":1772466304}
event: t_p
Note: data: line comes BEFORE event: line.
FieldTypeDescription
astringToken address
cstringChain ID
pstringPrice in USD. String, not number. Parse as decimal.
tintegerServer send timestamp (UNIX seconds)
t_pintegerPrice data timestamp (UNIX seconds)

Streaming constraints

  • Max 2,000 assets per POST
  • All assets must be valid — one invalid asset cancels entire stream with 400
  • Global limit: 10,000 concurrent streams per server
  • First events may take 10-20 seconds to arrive
  • Events arrive ~1/second after initial connection

Streaming errors

StatusCauseMessage
200ConnectedStream begins
400Bad chain{"message":"unsupported chain"}
400Bad address{"message":"asset not found"}
400Invalid asset in batch{"message":"unsupported chain"} (entire stream cancelled)
404Bare URL / wrong path{"message":"Not Found"}
429Global limitRetry with backoff
In-stream errors arrive as SSE: event: error + data: {"message": "..."}

Error handling (REST)

StatusCauseExample
200SuccessNormal response
400Invalid paramsBad order_by, sort, sort_by, empty query, limit >100, OHLCV limit >366, >10 batch tokens
404Not foundInvalid network, token, or pool address
410DeprecatedGET /pools (use /networks/{network}/pools)
429Rate limit10,000 req/day exceeded
500Server errorRetry with backoff

Constraints summary

ConstraintValueEnforcement
Rate limit10,000 requests/day
Pagination max per page100400 if exceeded
Pagination indexing1-indexedpage=0 treated as page=1
Batch prices max tokens10400 if exceeded
OHLCV max data points366400 if exceeded
OHLCV max range1 year
Transaction max pages100Use cursor for deeper
Streaming max assets/request2,000
Streaming global concurrent10,000 per server

Common token addresses

TokenChainAddress
WETHethereum0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
USDCethereum0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
USDTethereum0xdac17f958d2ee523a2206206994597c13d831ec7
USDCpolygon0x2791bca1f2de4661ed88a30c99a7a9449aa84174
SOLsolanaSo11111111111111111111111111111111111111112

Key gotchas for implementers

  1. sells/buys not sell/buy — plural forms only in token summary time windows
  2. summary.main_pool does not exist — to find a token’s best pool, query /tokens/{address}/pools?order_by=volume_usd&sort=desc&limit=1
  3. Filter uses different field names than pool listing: address not id, volume_usd_24h not volume_usd, txns_24h not transactions
  4. Filter wrapper key is results, not pools
  5. Stats key is factories, not dexes
  6. Pages are 1-indexed everywhere — page=0 is silently normalized to page=1
  7. Limits are enforced, not capped — limit=200 returns 400, not 100 results
  8. Streaming p is a string — parse as decimal for precision, do not treat as JSON number
  9. Streaming bare URL is 404 — only /stream path works
  10. Search token shape ≠ token details shape — different fields at top level
  11. OHLCV is the only flat-array list response — all other list endpoints wrap in {key: [...], page_info: {...}}
  12. DEXes endpoint page_info is buggy — may show total_items: 0 while returning all results
  13. Non-functional filter params (volume_7d_min, volume_30d_min, liquidity_usd_min, liquidity_usd_max) are accepted but always return 0 results
  14. First streaming events may take 10-20 seconds — don’t use short timeouts