Rate Limits
Rate limits protect service quality for all users. Limits vary by plan and are enforced per API key.
Limits by Plan
| Plan | Requests/Day | Rate Limit | Burst |
|---|---|---|---|
| Trial | 1,000 | 30/min | 45 |
| Starter | 10,000 | 120/min | 180 |
| Pro | 100,000 | 600/min | 900 |
| Enterprise | 1,000,000 | 6,000/min | 9,000 |
| Pay-As-You-Go | Unlimited | 600/min | 900 |
Rate Limit Headers
Every API response includes headers showing your current usage:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
X-RateLimit-Reset: 1711029660
X-RateLimit-Window: 60 X-RateLimit-Limit— Maximum requests per windowX-RateLimit-Remaining— Requests remaining in current windowX-RateLimit-Reset— Unix timestamp when the window resetsX-RateLimit-Window— Window duration in seconds
When You Hit the Limit
Requests exceeding the rate limit receive a 429 Too Many Requests response:
{
"error": "Rate Limited",
"message": "Rate limit exceeded. Retry after 60 seconds",
"code": 429,
"retry_after": 60
} Retry-After header value to implement exponential backoff in your client.
Best Practices
Cache responses locally
Indicator values don't change within their timeframe. Cache responses and only re-fetch when a new bar opens.
Use batch endpoints
Use /v1/multi for multiple symbols instead of making individual requests.
Implement backoff
On 429 responses, wait for the Retry-After period before retrying. Use exponential backoff for consecutive failures.
Monitor your usage
Track usage in your dashboard. Set up alerts at 50%, 80%, and 100% of your quota.
Overage Billing
Subscription users who exceed their daily limit are billed at Pay-As-You-Go rates. Set a spending cap in your dashboard to prevent unexpected charges.
View detailed pricing →