Skip to main content
Each API key has its own rate limits, configurable per key in the dashboard (rate_limit_per_minute and rate_limit_per_day). When a limit is exceeded, Clausum responds with 429 Too Many Requests.

Defaults

WindowDefault
Per minute100 requests
Per dayconfigurable per key
Limits are enforced per API key. Use separate keys for distinct workloads (e.g. checkout vs. batch jobs) so a burst in one doesn’t throttle the other.

Response headers

When rate limiting is active, responses include:
HeaderDescription
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetWhen the window resets

Handling 429s

Back off and retry with jitter:
async function requestWithRetry(url: string, options: RequestInit, attempt = 0): Promise<Response> {
  const res = await fetch(url, options)
  if (res.status !== 429 || attempt >= 5) return res

  const reset = Number(res.headers.get("x-ratelimit-reset")) || 0
  const waitMs = reset ? Math.max(0, reset * 1000 - Date.now()) : 2 ** attempt * 250
  const jitter = Math.random() * 250

  await new Promise((r) => setTimeout(r, waitMs + jitter))
  return requestWithRetry(url, options, attempt + 1)
}

Tips

Call /assess at the point of decision, not on every keystroke. Use the browser SDK for client-side pre-checks.
For bulk operations, spread requests over time rather than firing them all at once.
Expecting high volume? Contact api@clausum.ai to raise your key’s limits.