Skip to content

Rate limits

Lane.Chat rate-limits its public endpoints with fixed windows. When you exceed a limit you get an HTTP 429 with a Retry-After header and rate-limit metadata (see Error codes).

Public REST API

Limits are applied per endpoint group. The window is in seconds.

Endpoint(s)LimitWindow
/v1/chat (session init)3060s
/v1/send-message6060s
/v1/upload1060s
/v1/forms/submit3060s
/v1/widget/* group6060s
/v1/knowledge/* (public read/search)12060s
/v1/binding/telegram/generate1060s

Native SDK

The SDK endpoints use a per-app fixed hourly window:

Endpoint(s)LimitWindow
/api/v1/sdk/sessions10,0001 hour
/api/v1/sdk/events100,0001 hour

/api/v1/sdk/identify and /api/v1/sdk/push/register are not separately rate-limited.

Handling 429

  • Respect the Retry-After header (seconds) before retrying.
  • Use exponential backoff with jitter for automated clients.
  • Read X-RateLimit-Remaining to slow down before you hit the wall.
js
async function postWithRetry(url, body, headers, attempt = 0) {
  const res = await fetch(url, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', ...headers },
    body: JSON.stringify(body),
  })
  if (res.status === 429 && attempt < 5) {
    const wait = Number(res.headers.get('Retry-After') || 2 ** attempt)
    await new Promise((r) => setTimeout(r, wait * 1000))
    return postWithRetry(url, body, headers, attempt + 1)
  }
  return res.json()
}

Limits can change

These values reflect the current server configuration. Treat 429 + Retry-After as the source of truth in production rather than hard-coding assumptions.

Lane.Chat — AI customer support, multichannel CRM, and roleplay AI.