Rate limits
| Tier | Limit | Notes |
|---|---|---|
| Free API | 10,000 requests per day | No API key needed |
| Pro API | Unlimited | Requires API key and enterprise subscription |
Need unlimited access? The Pro API removes all rate limits. Contact support@coinpaprika.com.
Pagination rules
All paginated endpoints follow the same rules:| Rule | Value |
|---|---|
| First page | page=1 (1-indexed) |
| Page 0 behavior | Silently treated as page 1 |
| Max items per page | 100 (via limit parameter) |
| Default items per page | Varies by endpoint (typically 10 or 50) |
| Transaction pages | Max 100 pages; use cursor for deeper history |
Reduce API calls
Use batch pricing
Instead of making one request per token:Use streaming for real-time data
If you need live prices, don’t poll the REST API in a loop. Open one streaming connection instead:Cache static data
Some data changes rarely and can be cached:| Data | Cache for |
|---|---|
Network list (/networks) | 24 hours |
DEX list (/networks/{n}/dexes) | 1 hour |
| Token metadata (name, symbol, decimals) | 24 hours |
| Pool token pair info | 24 hours |
| OHLCV historical data (completed candles) | Forever (completed candles don’t change) |
- Token prices
- Pool volumes and transaction counts
- Recent transactions
- Current OHLCV candle (incomplete)
Request only what you need
- Use
limitto control page size — don’t fetch 100 items if you need 5 - Use
order_byandsortto get the most relevant results first - Use the filter endpoint for targeted queries instead of fetching all pools and filtering client-side
Handle errors gracefully
Implement exponential backoff
When requests fail, don’t retry immediately in a tight loop:Don’t retry client errors
- 400 — fix the request parameters
- 404 — verify the network ID and addresses
- 410 — use the replacement endpoint
Streaming best practices
Validate before streaming
The streaming API rejects the entire request if any asset is invalid. Always verify tokens exist via REST first:Use batched POST for multiple tokens
Instead of opening multiple GET connections:Reconnect with backoff
Streaming connections can drop (network issues, server restarts). Always implement auto-reconnection:Parse prices as decimals
The streamingp field is a string, not a number. Use decimal parsing to avoid floating-point precision issues:
Production checklist
Before going to production
Before going to production
- Cache network and DEX lists
- Use batch pricing where possible
- Use streaming instead of polling for live prices
- Implement exponential backoff for retries
- Handle all HTTP status codes (200, 400, 404, 410, 429, 500)
- Parse streaming prices as decimals, not floats
- Validate tokens before adding to streaming connections
- Monitor daily request count against the 10,000 limit
- Consider Pro API if approaching limits
FAQs
Is there a per-second rate limit?
Is there a per-second rate limit?
No. Only a daily cap of 10,000 requests. You can burst as fast as you want within that daily budget.
Do streaming connections count toward the rate limit?
Do streaming connections count toward the rate limit?
Opening a streaming connection counts as a request. The individual SSE events within the stream do not count.
Can I increase the free tier limit?
Can I increase the free tier limit?
The free tier is fixed at 10,000/day. For higher limits, use the Pro API.