Skip to content

Rate limit errors

Chatevo returns HTTP 429 Too Many Requests when you exceed rate limits. The response includes a Retry-After header and error body with retry_after seconds.

Check response headers:

HeaderExampleMeaning
X-RateLimit-Limit60Max requests in window
X-RateLimit-Remaining0None left
X-RateLimit-Reset1752652860Window resets at this Unix time
Retry-After12Wait 12 seconds before retry

Error body:

{
"error": {
"code": "rate_limit_exceeded",
"message": "Chat rate limit exceeded for deployment dep_abc123.",
"retry_after": 12
}
}
CategoryDefault limitTypical trigger
Global1,000 req/min per orgAutomation polling list endpoints
Auth10/min per IPLogin brute force (wait before retry)
Chat60 messages/min per deploymentHigh-volume Direct API
Widget120 req/min per deploymentTraffic spike or load test
Webhook100 deliveries/min per endpointSlow webhook handler causing retries
CauseFix
Load test without throttlingSpread requests; use staging deployment
Bot trafficAdd CAPTCHA on your site; contact support for IP rules
Config fetched in a loopCache config client-side; load script once per page

Widget performance target remains ≤ 2s to interactive — rate limits should not affect normal visitor traffic.

import time
import requests
def send_with_retry(payload, max_retries=3):
for attempt in range(max_retries):
resp = requests.post(API_URL, json=payload, headers=HEADERS)
if resp.status_code != 429:
return resp
time.sleep(int(resp.headers.get("Retry-After", 2 ** attempt)))
raise Exception("Rate limit exceeded after retries")

Prefer webhooks over polling conversations.

  • Batch creates instead of one request per row
  • Cache assistant and KB lists locally
  • Use cursor pagination — do not refetch page 1 in a loop

Respond within 5 seconds with 2xx. Slow handlers cause retries that consume webhook quota.

Pro and Enterprise plans include higher limits. View current quotas under Billing → Usage or Deployment rate limits.