Rate limits

Rate limits keep HighQube fast for everyone. By default:

LimitDefault
Each key120 requests a minute
All of your organization's keys together600 requests a minute
Short burstsUp to 2× the limit, after a quiet spell

Your organization may have different limits. HighQube can raise them for a busy integration, so ask if you need more.

Know where you stand

Every response to a request made with a key includes these headers:

HeaderMeaning
X-RateLimit-LimitThe key's requests per minute
X-RateLimit-RemainingRequests it can make right now
X-RateLimit-ResetSeconds until it's back to its full allowance

Slow down when X-RateLimit-Remaining gets low, and you'll never be refused.

When you go over

The answer is 429 with code rate_limited and a Retry-After header. Wait that many seconds and send the same request again. Nothing is lost: the request is only delayed.

import time

import requests


def send(session: requests.Session, method: str, url: str, **kwargs) -> requests.Response:
    """Send a request, waiting and retrying when it is rate limited."""
    for _ in range(5):
        response = session.request(method, url, timeout=30, **kwargs)
        if response.status_code != 429:
            return response
        time.sleep(int(response.headers.get("Retry-After", "1")))
    return response
async function send(url, options = {}) {
  for (let attempt = 0; attempt < 5; attempt++) {
    const response = await fetch(url, options);
    if (response.status !== 429) return response;
    const seconds = Number(response.headers.get("Retry-After") ?? 1);
    await new Promise((resolve) => setTimeout(resolve, seconds * 1000));
  }
  return fetch(url, options);
}

Tips

  • Search lanes together. One rate search can take several routes, which uses one request instead of many.
  • Cache reference data. Port codes and airport codes rarely change.
  • Spread out scheduled jobs. A nightly sync that sends everything at once will hit the limit. Pace it below the per-minute rate.
Preview. Everything here runs against the sandbox, api-dev.highqube.ai, with test keys. Get a key