Developer
Rate Limits
Plan for quotas and abuse protection.
Rate limits depend on the product area, plan, and route. The values below are verified from current code on 2026-06-29; treat them as implementation notes, not commercial commitments.
Verified limits
| Area | Current behavior |
|---|---|
| Chatbot message API | /api/cxo/chatbot enforces API-key, IP, and session tiers. Defaults are 60/min and 1000/hour per API key, 100/min and 500/hour per IP, and 20/min and 200/hour per session. API-key rows can override the API-key minute/hour values. |
| Chatbot config handshake | /api/cxo/config returns the active key's minute/hour limits to the widget as informational config. |
| Search API | /api/search allows 20 requests per minute per rate-limit identifier. |
| Manual agent trigger | /api/agents/[id]/trigger defaults to 10 requests/minute per agent and caller, with stricter 3 requests/5 minutes for selected heavier agents. |
| Voice commercial admission | Voice plans define concurrency limits and monthly minute caps. Default concurrency ranges from 2 for cx_voice_starter to 20 for enterprise. |
| Voice synthesis | /api/voice/synthesize rejects text above 5000 characters. |
| Inngest workflows | Many workflows define concurrency in the function registration; limits are workflow-specific rather than one global number. |
Client behavior
Handle 429 Too Many Requests by reading Retry-After, retry_after, or retry_after_seconds when present, backing off, and showing the user a clear message.
Publishing rule
Do not publish a single global LeenOps quota table unless it is generated from route code and plan configuration. Quotas are currently distributed across route handlers, API-key rows, budget tables, voice commercial plans, and Inngest function definitions.