Rate Limit
To protect both the platform and your account, OpenAPI enforces quotas on every endpoint category. Design your client against these limits from day one — they are strictly enforced.
Quota Table
| Category | Limit |
|---|---|
| Quote API | One long-lived connection per account. Subscribe up to 500 symbols. Max 10 calls/second, 5 concurrent requests. |
| Trade API | Max 30 calls per 30 seconds. Minimum interval between two calls: 20 ms. |
Response When Exceeded
When you hit a quota, the server returns HTTP 429 Too Many Requests with a Retry-After header indicating the number of seconds to back off:
http
HTTP/1.1 429 Too Many Requests
Retry-After: 2
Content-Type: application/json
{ "code": 429001, "message": "rate limit exceeded" }Retry Strategy
Use exponential backoff to handle rate limiting:
python
import time
import requests
def safe_request(url, headers, data, max_retries=3):
for i in range(max_retries):
resp = requests.post(url, headers=headers, json=data)
if resp.status_code == 429:
wait = int(resp.headers.get('Retry-After', 2 ** i))
time.sleep(wait)
continue
return resp
raise Exception("max retries exceeded")Best Practices
- Batch requests — Combine multiple symbols into one call. For example,
code_listsupports up to 400 symbols. - Cache static data — Trading calendars, plate lists, and other infrequently changing data should be cached locally.
- Monitor response headers — Watch the
X-RateLimit-Remainingheader to anticipate throttling. - Stagger calls — Avoid sending bursts of requests during market open.
See Also
- Authentication — Authentication method.
- API Reference — Browse the full API documentation.