Klantly Developers

Rate limits

How many requests you may make, how to see where you stand and how to back off gracefully.

Limits

LimitAmountDescriptionWindow (seconds)
key_minute120requests per minute for this key60
company_minute300requests per minute for this company60
company_writes60write actions per minute for this company60
company_heavy10heavy actions per minute for this company60
company_day50.000requests per day for this company86400
auth_failures20failed sign-ins per minute from this IP address60

The per-company limit applies to all keys of your company together. Write actions (POST, PATCH, DELETE) also count towards the write limit. Need more on a structural basis? Contact support.

Headers

Every response tells you where you stand:

Header Meaning
RateLimit-Policy All limits that apply to this request
RateLimit Remaining requests and seconds until the reset, for the tightest limit
X-RateLimit-Limit Size of the tightest limit
X-RateLimit-Remaining Still available in the current window
X-RateLimit-Reset Unix time at which the window starts again

On a 429

A 429 rate_limited has a Retry-After header with the number of seconds you have to wait. The limit field in the response names the limit you hit.

JavaScript
async function request(url, options, attempt = 0) {
  const response = await fetch(url, options);

  if (response.status === 429 && attempt < 5) {
    const seconds = Number(response.headers.get('Retry-After') ?? 1);
    await new Promise((resolve) => setTimeout(resolve, seconds * 1000));

    return request(url, options, attempt + 1);
  }

  return response;
}

Tip

Spread large synchronisations over time and use limit=100, so you fetch more with fewer requests.

Last updated on September 14, 2026