Getting started
Rate limits
Request limits
- 600 requests per minute per account, counted per endpoint. Each endpoint has its own counter, so calls to one do not consume another’s allowance
- The counter is per account, not per key: every API key on an account draws from the same allowance
- Exception:
GET /v3/runs/{run_id}is 100 requests per minute. Polls are free, so poll every 10 seconds rather than in a tight loop, or passwebhook_urland skip polling. See Webhooks
Concurrent connections
The documented v3 endpoints have no concurrency limit: async and polling requests are bounded only by the per-endpoint request limit above. The streaming endpoints of the 2026-07-30 edition allow 10 concurrent connections per account and report it in X-Concurrent-Quota-Limit and X-Concurrent-Quota-Remaining.
Rate limit headers
Every API response includes rate limit information in the headers:
RateLimit-Limit: 600
RateLimit-Remaining: 599
RateLimit-Reset: 50
RateLimit-Limit: Total requests allowed per windowRateLimit-Remaining: Requests remaining in current windowRateLimit-Reset: Seconds until window resets
X-RateLimit-Limit-Minute and X-RateLimit-Remaining-Minute are also sent, carrying the same values. Prefer the RateLimit-* headers above.
Rate limit responses
A 429 comes from either a rate limit or a plan limit, and the two carry different bodies. Branch on the shape, not on the status code.
The per-minute rate limit and the concurrency limit share this body. The per-minute limit also carries a Retry-After header giving the seconds to wait:
{ "message": "API rate limit exceeded" }
A plan limit, meaning the free-plan allowance, a monthly request cap, or a monthly spend limit:
{ "error": "monthly_cap_reached", "message": "Monthly usage cap reached for this API." }
Higher limits
For production workloads needing more throughput, contact sales@savvyiq.ai.