ClientSphereDocs
Guides

Rate limits

How many requests a ClientSphere API key may make, and how to handle being limited.

Requests are rate limited per API key, over a rolling one-minute window. The default is 60 requests a minute.

The limit belongs to the key, not to your workspace or IP address, so giving each integration its own key also gives each its own budget.

Reading your budget

Responses carry the standard RateLimit-* headers, so you can see where you stand without waiting to be rejected:

HeaderMeaning
RateLimit-LimitRequests allowed in the window
RateLimit-RemainingRequests left in the current window
RateLimit-ResetSeconds until the window resets

Being limited

Exceeding the limit returns 429:

{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Please slow down."
  }
}

Nothing was processed, so the request is safe to retry. Wait for the window to reset rather than retrying immediately — a tight retry loop just spends the next window's budget on rejections too.

async function request(url, apiKey, attempt = 0) {
  const res = await fetch(url, {
    headers: { Authorization: `Bearer ${apiKey}` },
  });
 
  if (res.status === 429 && attempt < 5) {
    const reset = Number(res.headers.get('RateLimit-Reset') ?? 1);
    await new Promise((r) => setTimeout(r, (reset || 1) * 1000));
    return request(url, apiKey, attempt + 1);
  }
 
  return res;
}

Staying under it

  • Page with limit=100 rather than the default 20 — a fifth of the requests for the same data. See Pagination.
  • Spread bulk work over time instead of firing it in parallel.
  • Cache things that rarely change rather than re-fetching them per operation.

If an integration legitimately needs more, a key's limit can be raised — the 60 a minute is a per-key default, not a fixed ceiling.

On this page