Skip to content

Rate Limits

For Developers

The KynectLocal API enforces rate limits to ensure availability across all integrations. Exceeding a limit returns a 429 Too Many Requests response.

  • Designing a polling or bulk-fetch strategy for your integration
  • Debugging 429 responses in production
  • Understanding how much headroom your API key has

All API requests are subject to a global rate limit:

LimitWindow
100 requests60 seconds

This limit applies across all endpoints, regardless of which resource you are querying.

Per-key limits are enforced at three levels simultaneously:

LimitWindow
10 requests1 second
300 requests1 minute
50,000 requests1 day

All three windows are checked on every request. A request is rejected if it would exceed any of the three.


Every API response includes headers that tell you your current usage against the active limits:

HeaderDescription
X-RateLimit-LimitThe total number of requests allowed in the current window
X-RateLimit-RemainingThe number of requests remaining in the current window
X-RateLimit-ResetUnix timestamp (seconds) when the current window resets

Read these headers proactively — don’t wait for a 429 to know you’re close to the limit.


When you exceed the rate limit, the API returns:

HTTP/1.1 429 Too Many Requests
Retry-After: 14
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1714000000

The Retry-After header tells you how many seconds to wait before retrying. Always respect this value rather than retrying immediately.

A basic retry pattern in Node.js:

async function fetchWithRetry(url, options, retries = 3) {
const res = await fetch(url, options);
if (res.status === 429 && retries > 0) {
const retryAfter = parseInt(res.headers.get('Retry-After') || '5', 10);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
return fetchWithRetry(url, options, retries - 1);
}
return res;
}