Skip to main content

Rate Limit Tiers

Rate limits are based on your Affonso subscription plan:
PlanRequests/MinuteBurst/Second
Launch30010
Growth60020
Elite1,20040
Enterprise3,000100

Response Headers

Every API response includes rate limit information in the headers:
HeaderDescription
X-RateLimit-LimitMaximum requests allowed per minute
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when limit resets
Retry-AfterSeconds to wait (only on 429 responses)

Handling Rate Limits

When you exceed the rate limit, you’ll receive a 429 Too Many Requests response:
{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Too many requests. Please retry after 30 seconds.",
    "retryAfter": 30
  }
}

Best Practices

When you receive a 429, wait for the Retry-After duration, then retry with exponential backoff.
Cache API responses where appropriate to reduce the number of requests.
Use pagination with reasonable page sizes instead of fetching all records at once.
Where possible, batch multiple operations into fewer API calls.

Example: Handling Rate Limits

async function fetchWithRetry(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') || 30;
      console.log(`Rate limited. Retrying in ${retryAfter}s...`);
      await new Promise(r => setTimeout(r, retryAfter * 1000));
      continue;
    }
    
    return response;
  }
  throw new Error('Max retries exceeded');
}

Need Higher Limits?

Enterprise Plan

Contact us for custom rate limits on the Enterprise plan