Skip to content

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

CategoryLimit
Quote APIOne long-lived connection per account. Subscribe up to 500 symbols. Max 10 calls/second, 5 concurrent requests.
Trade APIMax 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_list supports 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-Remaining header to anticipate throttling.
  • Stagger calls — Avoid sending bursts of requests during market open.

See Also