Limits
Rate Limits
The API implements rate limiting to ensure fair usage and system stability.
Limits by Category
| Endpoint Category | Rate Limit | Window |
|---|---|---|
| Authentication | 10 requests | per minute |
| Market Data (read) | 100 requests | per minute |
| Trading (write) | 50 requests | per minute |
| Account Management | 30 requests | per minute |
Rate Limit Headers
Rate limit information is returned in response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed in window |
X-RateLimit-Remaining | Remaining requests in current window |
X-RateLimit-Reset | Unix timestamp when limit resets |
Retry-After | Seconds to wait (only on 429 response) |
Example Response Headers
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1703052700
Handling Rate Limits
When rate limited (HTTP 429), implement exponential backoff:
import time
import requests
def make_request_with_retry(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 429:
# Use Retry-After header if available
retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
print(f"Rate limited. Waiting {retry_after} seconds...")
time.sleep(retry_after)
continue
return response
raise Exception("Rate limit exceeded after max retries")
Request Size Limits
| Limit | Value |
|---|---|
| Maximum request body size | 1 MB |
| Maximum URL length | 8,192 characters |
| Maximum headers size | 16 KB |
Batch Limits
| Operation | Limit |
|---|---|
| Order book instruments per request | 20 |
| Orders per list request | 1,000 |
| Instruments per list request | 1,000 |
Best Practices
- Cache static data - Venues and instruments change infrequently
- Use WebSocket for real-time data - Reduces polling overhead
- Batch requests - Use list endpoints instead of multiple single requests
- Implement backoff - Respect rate limits with exponential backoff
- Monitor headers - Track remaining quota to avoid hitting limits