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: 1640995200

Header 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

  1. Implement exponential backoff: When receiving 429, wait and retry with increasing delays
  1. Cache responses: Store API responses locally to reduce unnecessary calls
  1. Batch operations: Group related requests where possible
  1. 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');
}