Security and Access

Rate Limiting and Quotas

Bounds enforces per-session rate limits and per-session quotas to protect your backend from abuse and to keep costs predictable. All limits are configurable per agent.

Default limits

LimitAnonymous sessionSigned session
Messages per minute1030
Max messages per session50
Max session duration60 minutes

How the rate limit works

Limits are enforced using a sliding-window counter keyed on the session's public ID. Each message send decrements the available count for the current minute window. When the limit is exceeded, the API returns HTTP 429 Too Many Requests. The widget surfaces a friendly message asking the user to slow down.

What happens when quotas are hit

QuotaWhat happens
Messages per minute exceededHTTP 429. Request is rejected. The user can retry after the window resets (within one minute).
Max messages per session reachedFurther messages are rejected. The session is not automatically closed - the user can still read the conversation history but cannot send new messages.
Max session duration reachedThe session is marked expired. The user must start a new session to continue.

Configuring limits per agent

In the console open the agent, go to Settings → Session, and adjust the values for your use case. Higher limits are appropriate for power users on signed sessions; lower limits help control costs on public-facing anonymous widgets.

Your own endpoint should rate limit independently

If you use actions to call your own API, do not rely on Bounds's session-level limits as your only protection. Apply rate limiting on your endpoint as well, keyed on the session ID or the user's external ID. This prevents a single compromised or abusive session from hammering your backend even if Bounds's limits are temporarily raised.