Rate Limits
Understanding and working within API rate limits.
Rate Limits by Plan
| Plan | Per Minute | Per Day | WebSocket |
|---|---|---|---|
| Free | 10 requests | 100 requests | Not available |
| Individual | 60 requests | 10,000 requests | 2 connections |
| Business | 300 requests | 100,000 requests | 10 connections |
Rate Limit Headers
Every API response includes headers showing your current rate limit status:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum requests allowed per window |
X-RateLimit-Remaining |
Remaining requests in current window |
X-RateLimit-Reset |
Unix timestamp when limit resets |
X-Daily-Limit |
Daily limit for your plan |
X-Daily-Remaining |
Remaining daily requests |
Example Response Headers
text
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705329600
X-Daily-Limit: 10000
X-Daily-Remaining: 8542
Rate Limit Exceeded Response
json
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please wait before making more requests.",
"status": 429,
"retry_after": 45
}
}
Best Practices
Use WebSocket for Real-time Data
Instead of polling REST endpoints, use WebSocket connections for real-time updates. One WebSocket connection can replace hundreds of API calls.
Batch Requests
Use multi-symbol endpoints like /quotes?symbols=EUR/USD,GBP/USD instead of making individual requests.
Implement Exponential Backoff
When you receive a 429 response, wait and retry with exponentially increasing delays.
Cache Responses
Cache symbol lists and other static data locally to reduce unnecessary API calls.