Overview
Rate limits protect the API from abuse and ensure fair usage across all customers. Limits are applied per API key or user token.
Rate Limit Tiers
| Plan | Requests/min | Requests/day | Burst |
|---|---|---|---|
Free | 60 | 1,000 | 10 |
Starter | 300 | 10,000 | 50 |
Professional | 1,000 | 100,000 | 100 |
Enterprise | Custom | Custom | Custom |
Rate Limit Headers
Every API response includes headers showing your rate limit status:
X-RateLimit-Limit: 300 X-RateLimit-Remaining: 245 X-RateLimit-Reset: 1705312800
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute for your plan |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Rate Limit Exceeded
When you exceed the rate limit, the API returns a 429 Too Many Requests response:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 32
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 32 seconds.",
"retry_after": 32
}
}Handling Rate Limits
Exponential Backoff
Implement exponential backoff when you receive a 429 response:
import time
import random
def api_request_with_retry(endpoint, max_retries=5):
for attempt in range(max_retries):
response = make_request(endpoint)
if response.status_code == 429:
# Get retry delay from header or calculate
retry_after = int(response.headers.get('Retry-After', 0))
if retry_after == 0:
# Exponential backoff with jitter
retry_after = (2 ** attempt) + random.uniform(0, 1)
print(f"Rate limited. Waiting {retry_after}s...")
time.sleep(retry_after)
continue
return response
raise Exception("Max retries exceeded")Request Batching
Use batch endpoints to reduce request count:
# Instead of 100 individual requests:
for sku in skus:
get_product(sku) # 100 requests
# Use batch endpoint:
get_products_batch(skus) # 1 requestEndpoint-Specific Limits
Some endpoints have specific rate limits:
| Endpoint | Limit | Notes |
|---|---|---|
/auth/login | 5/min per IP | Prevents brute force |
/agents/run | 10/min | Computationally expensive |
/import | 5/hour | Large file processing |
/export | 20/hour | Report generation |
Best Practices
Monitor headers
Check remaining quota before making requests
Use webhooks
Subscribe to events instead of polling
Cache responses
Cache data that doesn't change frequently
Batch requests
Combine multiple operations when possible
Increasing Limits
Need higher limits? You have several options:
- Upgrade plan: Higher tiers include more requests
- Enterprise: Custom limits based on your needs
- Request increase: Contact support for temporary increases
Usage Analytics
View your API usage patterns in Settings → API Usage. See daily/hourly breakdowns, top endpoints, and approaching limits.
Fair Use Policy
Beyond numeric limits, please follow these guidelines:
- Don't create multiple accounts to bypass limits
- Space out large batch operations
- Avoid unnecessary repeated requests
- Contact us before running large migrations
Consistent abuse may result in temporary or permanent suspension.