1. Edge IP limit
The edge in front ofinference.square1.dev rate-limits by client IP
(on the order of 30 requests/minute with a small burst allowance).
Exceeding it returns a plain edge error before the request reaches
the API — you will not get the JSON error envelope.
This exists to absorb runaway clients; normal chat usage doesn’t
approach it.
2. Per-model RPM (yours)
Each model has a per-account requests-per-minute limit — read it fromrate_limit_rpm in GET /v1/models and from the
x-ratelimit-*-requests response headers.
- Only served requests count toward the window; requests rejected by quota or validation don’t burn RPM.
- Exceeding it →
429 rate_limited.
3. Account burst cooldown
A safety net across all models: if one account fires too many attempts (any status) in a short window, every request from that account is rejected for a cooldown period.- Trip →
429 abuse_cooldownwithresets_atin the envelope. - The most common cause is an aggressive auto-retry loop hammering a failing request. Back off on errors instead of retrying in a tight loop — retrying into a cooldown only extends the outage on your side.
4. Model concurrency
Each model has a cap on concurrent in-flight requests across all users. When it saturates you get HTTP 529model_overloaded — a global
“this model is busy” signal, not something you caused. Retry after a few
seconds.