Overview
Rate Limits
Understand API rate limits and best practices for staying within them.
Overview
The AIO Radar API limits how often each site can call it, to keep the service fast and fair for everyone. The limits are the same on every plan.
Limits
- Per minute: 60 reads (GET) and 20 writes (POST) per site and endpoint, on the plugin endpoints.
- Per day: generating llms.txt is capped at once a day on Starter and 5 times a day on Basic and Pro. On-demand visibility tests (Basic and Pro) are capped at 3 a day per site.
Rate Limit Headers
A 429 response includes headers showing the limit and when you can retry:
text
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1640995200Header Definitions
- X-RateLimit-Limit: Maximum requests allowed per window
- X-RateLimit-Remaining: Requests remaining in current window
- X-RateLimit-Reset: Unix timestamp when the window resets
Handling Rate Limits
429 Too Many Requests
When you exceed the rate limit, you'll receive a 429 response:
JSON
{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Please try again later."
}
}The Retry-After header gives the seconds until you can retry.
Best Practices
- Implement exponential backoff: When receiving 429, wait and retry with increasing delays
- Cache responses: Store API responses locally to reduce unnecessary calls
- Batch operations: Group related requests where possible
- Monitor usage: Track your X-RateLimit-Remaining header
Code Example
JavaScript
async function apiRequestWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || 60;
await sleep(retryAfter * 1000);
continue;
}
return response;
}
throw new Error('Max retries exceeded');
}