Skip to main content
Understand ChatAds rate limits by plan tier, what happens when you exceed them, and how to implement graceful error handling with exponential backoff.
Rate limits are per-team and shared across all API keys:
PlanMonthly LimitDaily Limit
Free100 requests100 requests
PAYGUnlimited10,000 requests
Limits reset at midnight UTC (daily) and the 1st of each month (monthly).
You’ll receive a 429 error with details:
{
  "success": false,
  "error": {
    "code": "DAILY_LIMIT_EXCEEDED",
    "message": "Daily rate limit exceeded"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-01-15T12:00:00Z",
    "version": "1.0.0"
  }
}
The response includes a Retry-After header with seconds until reset.
Check for rate limit errors and wait for reset:
const response = await client.analyzeMessage(message);

if (response.error !== null) {
  if (response.error.code === 'DAILY_LIMIT_EXCEEDED' ||
      response.error.code === 'MONTHLY_LIMIT_EXCEEDED') {
    // Rate limit hit - don't retry, wait for reset at midnight UTC
    console.log('Rate limit reached, try again after reset');
    return;
  }
  throw new Error(response.error.message);
}

// Process successful response
Rate limit errors should not be retried with backoff - they require waiting until the limit resets (midnight UTC for daily, 1st of month for monthly).
Amazon’s Product Advertising API has strict limits: 1 request per second initially. As you drive sales through affiliate links, this can increase to 10 requests per second. ChatAds handles this internally, but high-volume users should optimize their calls to avoid hitting these upstream limits.