Rate Limits
Limits
Section titled “Limits”| Limit | Value |
|---|---|
| Sustained | 1,000 requests per minute per API key |
| Burst | 50 requests per second per API key |
Rate limits are enforced per API key. The sustained limit is measured over a rolling 60-second window.
Rate Limit Headers
Section titled “Rate Limit Headers”Every authenticated response includes rate limit headers regardless of whether you are near the limit:
| Header | Description |
|---|---|
X-RateLimit-Limit | Total requests allowed in the current window |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (seconds) when the window resets |
These headers are not present on 401 responses (unauthenticated requests).
When You Hit the Limit
Section titled “When You Hit the Limit”A rate-limited response has status 429 and includes a Retry-After header:
HTTP/1.1 429 Too Many RequestsRetry-After: 14X-RateLimit-Limit: 1000X-RateLimit-Remaining: 0X-RateLimit-Reset: 1720000000{ "error": { "type": "rate_limit_error", "code": "rate_limit_exceeded", "message": "Rate limit exceeded. Retry after 14 seconds." }, "meta": { "requestId": "req_01j..." }}The Retry-After value is in seconds. Do not retry before this time elapses.
Backoff Guidance
Section titled “Backoff Guidance”For automated clients, implement token-bucket or exponential backoff:
- Check
X-RateLimit-Remainingon each response. If it is below a threshold (for example, 50), slow your request rate proactively. - On a
429, wait exactlyRetry-Afterseconds before the next request to that resource. - For burst scenarios, spread requests evenly rather than sending them all at once.
# Example: polling with a pause between requestswhile true; do response=$(curl -s -w "\n%{http_code}" \ -H "Authorization: Bearer sk_test_your_key_here" \ https://api-us.suiteop.com/api/v1/tasks)
status=$(echo "$response" | tail -1)
if [ "$status" = "429" ]; then retry_after=$(curl -s -I \ -H "Authorization: Bearer sk_test_your_key_here" \ https://api-us.suiteop.com/api/v1/tasks \ | grep -i retry-after | awk '{print $2}' | tr -d '\r') sleep "${retry_after:-10}" fi
sleep 0.1 # max ~10 req/s sustained — well within limitsdone