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.