REST API errors
All REST API errors return a JSON object with amessage field (and sometimes an error field). Here’s every status code you can encounter:
200 — Success
Normal response. Parse the JSON body. One important edge case: batch pricing (GET /networks/{network}/multi/prices) returns HTTP 200 with an empty array [] when none of the requested tokens have pricing data. This is not an error — it means the tokens were processed but none had prices.
400 — Bad Request
The request was malformed or contained invalid parameters.- Invalid
order_byorsort_byvalue (e.g., usingliquiditywhen onlyvolume_usd,price_usd,transactions,last_price_change_usd_24h,created_atare valid) - Invalid
intervalvalue for OHLCV (must be one of:1m,5m,10m,15m,30m,1h,6h,12h,24h) - Batch pricing with more than 10 tokens
- Batch pricing with zero tokens (empty
tokensparameter) - Invalid UNIX timestamp format in filter parameters
- Missing required parameters (e.g.,
startfor OHLCV)
404 — Not Found
The requested resource doesn’t exist.- Invalid network ID (e.g.,
ethinstead ofethereum,solinstead ofsolana) - Token address doesn’t exist on that network
- Pool address doesn’t exist on that network
- Typo in the URL path
- Verify the network ID by checking
GET /networks - Use
GET /search?query={name}to find the correct network and address - Check that the address format matches the chain (e.g.,
0x...for EVM chains, base58 for Solana)
410 — Gone
The endpoint has been permanently removed.GET /pools— the global pools endpoint was deprecated in v1.3.0. UseGET /networks/{network}/poolsinstead.
429 — Too Many Requests
Rate limit exceeded. Free tier limit: 10,000 requests per day. What to do:- Cache responses for data that doesn’t change every second (network lists, DEX lists)
- Use batch pricing instead of individual token requests
- Use the streaming API for real-time prices instead of polling
- Consider the Pro API for unlimited requests
500 — Internal Server Error
Something went wrong on our side. What to do: Retry with exponential backoff (wait 1s, then 2s, then 4s, etc.). If the error persists, check our Discord for status updates or contact support.Streaming API errors
The streaming API athttps://streaming.dexpaprika.com can fail in two ways: HTTP errors before the stream starts, or SSE error events during an active stream.
HTTP errors (before stream starts)
| Status | Meaning |
|---|---|
| 200 | Connected successfully, streaming |
| 400 | Bad parameters, unsupported chain, token not found, or one invalid asset in a batch |
| 429 | Global stream limit exceeded (10,000 concurrent streams per server) |
SSE errors (during active stream)
If something goes wrong during an active stream, the error arrives as an SSE event:Pagination gotchas
All paginated endpoints in DexPaprika are 1-indexed:page=1returns the first pagepage=0is silently treated aspage=1(not an error, but may cause confusion)
limit parameter). Transaction pagination is limited to 100 pages — for deeper history, use cursor-based pagination with the cursor parameter.
Common mistakes and fixes
Getting empty results from pool listing
Getting empty results from pool listing
Symptom:
GET /networks/{network}/pools?limit=1 returns {"pools": [], "page_info": {...}}Cause: Some combinations of very small limits can return empty results due to internal filtering.Fix: Use limit=10 or higher. The minimum practical limit is 2–3.Search returns no results for a known token
Search returns no results for a known token
Symptom:
GET /search?query=USDC returns empty arrays.Cause: Search is best-effort and may not match very common/generic terms well. It searches across tokens, pools, and DEXes.Fix: Try more specific queries (e.g., the token address), or use the token endpoint directly if you know the network and address.OHLCV returns empty array
OHLCV returns empty array
Symptom: OHLCV request returns
[].Cause: The start date might be before the pool existed, or the pool may have very low activity in the requested period.Fix: Check the pool’s created_at field to ensure your date range is valid. Try a broader interval (e.g., 24h instead of 1h).Filter endpoint field names don't match pool listing
Filter endpoint field names don't match pool listing
Symptom: Code that works with
/pools breaks when switched to /pools/filter.Cause: Different response schemas. Filter uses address (not id), volume_usd_24h (not volume_usd), txns_24h (not transactions), and wraps results in results (not pools).Fix: Handle each endpoint’s response format separately. See common patterns for the exact filter response structure.Streaming connection drops immediately
Streaming connection drops immediately
Symptom: Streaming connection returns 400 instantly.Cause: One or more assets in the request are invalid (wrong chain ID, non-existent token address).Fix: Validate every token via the REST API before adding it to a streaming request. In a POST batch, all assets must be valid — one bad asset cancels the entire stream.
FAQs
Does DexPaprika return rate limit headers?
Does DexPaprika return rate limit headers?
The API does not currently return standard rate limit headers (X-RateLimit-*). Monitor your daily usage on your side.
What happens after a rate limit reset?
What happens after a rate limit reset?
The daily limit resets on a rolling 24-hour window. After hitting the limit, wait and retry.
Are there different limits per endpoint?
Are there different limits per endpoint?
No. The 10,000 request/day limit applies across all endpoints combined.