Skip to content

Errors & rate limits

Status Meaning
401 Missing or invalid API key.
403 Key revoked, or user account suspended.
422 Request body validation failed (check field types).
429 Rate limit exceeded (default 100/min). Honor the Retry-After header.
500 Server error — log + retry. Should not happen in normal usage.
503 ML inference is down. Endpoint still returns a rules-only response with HTTP 200 in this case.

Rate limits

  • Default: 100 requests / minute per key
  • Use case: Pre-trade check is 1 call per intended trade — you shouldn't approach the limit
  • On 429: use exponential backoff (start 1s, double up to 30s, give up)
  • Need more? Contact founder for a per-key limit increase
import time, requests

def call_with_backoff(fn, max_attempts=5):
    delay = 1.0
    for attempt in range(max_attempts):
        try:
            return fn()
        except requests.HTTPError as e:
            if e.response.status_code != 429:
                raise
            retry_after = float(e.response.headers.get("Retry-After", delay))
            time.sleep(retry_after)
            delay = min(delay * 2, 30.0)
    raise RuntimeError("rate limit not cleared after retries")