Skip to main content
Limits are counted per credential, not per workspace. Two integrations holding two tokens do not eat into each other’s budget. That is the main reason to issue a separate credential per system rather than sharing one. The per-second ceiling exists so one client cannot burn through the whole minute’s allowance in the first second and lock everyone else out for the remaining fifty-nine.

Headers

Every response carries your current standing, not just the ones that fail:
X-RateLimit-Reset is a Unix timestamp in seconds.

When you go over

Retry-After is in seconds and always rounded up, so waiting exactly that long is enough. Rounding down would send you back a fraction early and earn you a second 429.

Handling it

Wait for Retry-After rather than guessing at a backoff. The server already knows when your window resets, and the header is that answer.
Watch X-RateLimit-Remaining on the responses you are already getting and slow down before you hit zero. It is cheaper than being throttled.

The widget is limited differently

The chat widget has no credential, so it is limited per origin and per visitor address instead. Anonymous placements are the abuse surface, and they are metered accordingly.

Rate limits are not quotas

A 429 says you are going too fast and will be fine shortly. A 402 says the workspace has used its conversations for the period, and waiting will not help. See Quotas.